本文以 Ubuntu 26.04 LTS 为例,介绍 PHP、MySQL、Redis 以及 Caddy/Nginx 的安装、配置、管理和升级。 适用场景: - PHP 网站、ThinkPHP、Laravel 等应用。 - MySQL 本机数据库。 - Redis 缓存、Session、队列。 - Caddy 或 Nginx 作为 Web 服务。 - HTTPS 自动续期。 - 生产环境部署。 一、系统初始化 1. 更新系统


sudo apt update
sudo apt upgrade -y

2. 安装常用工具


sudo apt install -y \
  curl wget git vim nano unzip zip \
  lsb-release ca-certificates \
  gnupg apt-transport-https \
  cron openssl socat \
  htop net-tools lrzsz

3. 设置时区


sudo timedatectl set-timezone Asia/Shanghai

查看当前时间:


timedatectl

4. 查看系统版本


lsb_release -a
uname -a

--- 二、安装 PHP Ubuntu 26.04 默认 PHP 版本为 **PHP 8.5**,一般建议优先使用 Ubuntu 官方软件源,不需要额外添加第三方源。 1. 安装 PHP 8.5


sudo apt update

sudo apt install -y \
  php8.5 \
  php8.5-fpm \
  php8.5-cli \
  php8.5-common \
  php8.5-mysql \
  php8.5-redis \
  php8.5-opcache \
  php8.5-curl \
  php8.5-gd \
  php8.5-mbstring \
  php8.5-xml \
  php8.5-zip \
  php8.5-intl \
  php8.5-bcmath \
  php8.5-soap

| 扩展 | 用途 |
|---|---|
| php8.5-fpm | PHP-FPM 服务 |
| php8.5-cli | 命令行 PHP |
| php8.5-mysql | MySQL 数据库连接 |
| php8.5-redis | Redis 扩展 |
| php8.5-opcache | PHP 字节码缓存 |
| php8.5-curl | HTTP 请求 |
| php8.5-gd | 图片处理 |
| php8.5-mbstring | 多字节字符串 |
| php8.5-xml | XML 处理 |
| php8.5-zip | ZIP 压缩 |
| php8.5-intl | 国际化处理 |
| php8.5-bcmath | 高精度数学计算 |
| php8.5-soap | SOAP 接口 |


php -v

查看已安装的 PHP 扩展:


php -m

查看指定扩展:


php -m | grep -E 'mysqli|pdo_mysql|redis|Zend OPcache|curl|gd'

3. 查看 PHP 配置文件


php --ini

默认配置文件: text /etc/php/8.5/cli/php.ini /etc/php/8.5/fpm/php.ini 注意: - CLI 配置用于命令行 PHP。 - FPM 配置用于网站运行。 - 修改网站运行参数时,通常需要修改 FPM 的 php.ini。 4. PHP-FPM 服务管理 设置开机启动并立即启动:


sudo systemctl enable --now php8.5-fpm

启动:


sudo systemctl start php8.5-fpm

停止:


sudo systemctl stop php8.5-fpm

重启:


sudo systemctl restart php8.5-fpm

平滑重载:


sudo systemctl reload php8.5-fpm

查看状态:


sudo systemctl status php8.5-fpm

查看 PHP-FPM 监听配置:


sudo grep -E '^(listen|user|group|pm|pm.max_children|pm.start_servers)' \
  /etc/php/8.5/fpm/pool.d/www.conf

默认 Socket: text /run/php/php8.5-fpm.sock 5. 配置 PHP FPM 配置文件:


sudo vim /etc/php/8.5/fpm/php.ini

建议生产环境调整以下参数:

; 时区
date.timezone = Asia/Shanghai

; 内存限制
memory_limit = 256M

; 上传文件
upload_max_filesize = 50M
post_max_size = 50M

; 最大执行时间
max_execution_time = 300
max_input_time = 300

; 错误显示
display_errors = Off
log_errors = On

; OPcache
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 2

修改完成后:


sudo systemctl restart php8.5-fpm

6. PHP-FPM 进程配置 配置文件:


sudo vim /etc/php/8.5/fpm/pool.d/www.conf

4GB 内存、2 核 CPU 的小型服务器,可以从以下参数开始: ini pm = dynamic pm.max_children = 15 pm.start_servers = 3 pm.min_spare_servers = 2 pm.max_spare_servers = 5 pm.max_requests = 500 注意:MySQL、Redis 和系统本身也需要占用内存,`max_children` 不能只按照 PHP 单进程内存估算。建议根据实际负载调整。 修改后:


sudo systemctl restart php8.5-fpm

7. 如果需要安装 PHP 8.4 如果项目暂时不兼容 PHP 8.5,可以通过第三方 PHP 软件源安装 PHP 8.4。 首先安装必要工具:


sudo apt update

sudo apt install -y \
  lsb-release ca-certificates \
  curl gnupg apt-transport-https

安装 DEB.SURY.ORG 密钥:


sudo curl -sSLo /tmp/debsuryorg-archive-keyring.deb \
  https://packages.sury.org/debsuryorg-archive-keyring.deb

sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb

添加软件源:


sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

更新软件源:


sudo apt update

安装 PHP 8.4:


sudo apt install -y \
  php8.4 \
  php8.4-fpm \
  php8.4-cli \
  php8.4-mysql \
  php8.4-redis \
  php8.4-opcache \
  php8.4-curl \
  php8.4-gd \
  php8.4-mbstring \
  php8.4-xml \
  php8.4-zip \
  php8.4-intl \
  php8.4-bcmath

启动:


sudo systemctl enable --now php8.4-fpm

查看版本:


php8.4 -v

注意:添加第三方软件源后,PHP 8.4 和 PHP 8.5 可以并存,但需要明确选择网站使用的 PHP-FPM Socket。 例如: text PHP 8.4:/run/php/php8.4-fpm.sock PHP 8.5:/run/php/php8.5-fpm.sock 如果需要切换 CLI 默认版本:


sudo update-alternatives --config php

8. PHP 升级 升级当前 PHP 8.5 的已安装软件包:


sudo apt update
sudo apt install --only-upgrade 'php8.5-*'

如果同时安装了 PHP 8.4,需要单独升级:


sudo apt install --only-upgrade 'php8.4-*'

升级后检查:


php -v
php -m
sudo systemctl status php8.5-fpm

--- 三、安装 MySQL 1. 安装 MySQL


sudo apt update
sudo apt install -y mysql-server

设置开机启动并启动:


sudo systemctl enable --now mysql

查看状态:


sudo systemctl status mysql

查看版本:


mysql --version

Ubuntu 26.04 官方软件源提供 MySQL 8.4 系列。 2. MySQL 安全初始化 执行:


sudo mysql_secure_installation

建议按照以下方式设置: **第一项:启用密码强度验证** text Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: y **第二项:设置密码强度** text Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2 **第三项:设置 root 密码** 如果提示: text Skipping password set for root as authentication with auth_socket is used by default. 表示 MySQL root 默认使用系统 Socket 身份验证,不代表数据库没有 root 账号。 **第四项:删除匿名用户** text Remove anonymous users? y **第五项:禁止 root 远程登录** text Disallow root login remotely? y **第六项:删除 test 数据库** text Remove test database and access to it? y **第七项:重新加载权限** text Reload privilege tables now? y 完成初始化。 3. 登录 MySQL Ubuntu 默认通常使用 auth_socket 认证:


sudo mysql

如果需要使用密码认证,可以执行: sql ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '你的强密码'; FLUSH PRIVILEGES; 以后可以使用:


mysql -u root -p

注意:生产环境更推荐保留 root 的 Socket 认证方式,通过单独的数据库用户管理网站,避免应用程序直接使用 root。 4. 创建网站数据库 登录:


sudo mysql

创建数据库: sql CREATE DATABASE website DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 创建数据库用户: sql CREATE USER 'website_user'@'localhost' IDENTIFIED BY '替换成强密码'; 授权: sql GRANT ALL PRIVILEGES ON website.* TO 'website_user'@'localhost'; FLUSH PRIVILEGES; 退出: sql EXIT; 测试数据库连接:


mysql -u website_user -p website

注意:不要在网站程序中使用 MySQL root 账号。 5. MySQL 配置文件 查看配置文件搜索路径:


mysqld --help --verbose 2>/dev/null | grep -A 10 "Default options"

主要配置文件: text /etc/mysql/my.cnf /etc/mysql/mysql.cnf /etc/mysql/mysql.conf.d/mysqld.cnf 主配置文件:


sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

4GB 内存、2 核 CPU 的服务器,可以根据实际业务考虑以下基础配置: ini [mysqld] # 仅允许本机连接 bind-address = 127.0.0.1 # 字符集 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # InnoDB innodb_buffer_pool_size = 512M innodb_buffer_pool_instances = 1 # 最大连接数 max_connections = 100 # 慢查询 slow_query_log = 1 long_query_time = 2 slow_query_log_file = /var/log/mysql/mysql-slow.log 注意:以上是起始参考值,不是所有服务器的固定最优参数。修改前应确认对应 MySQL 版本支持相关参数。 重启:


sudo systemctl restart mysql

检查:


sudo systemctl status mysql

查看 MySQL 监听端口:


sudo ss -lntp | grep 3306

--- 四、安装 Redis 1. 安装 Redis 服务


sudo apt update
sudo apt install -y redis-server

设置开机启动:


sudo systemctl enable --now redis-server

查看状态:


sudo systemctl status redis-server

查看版本:


redis-server --version

2. Redis 配置文件 默认配置: text /etc/redis/redis.conf 编辑:


sudo vim /etc/redis/redis.conf

建议生产环境确认以下配置: ini # 只监听本机 bind 127.0.0.1 ::1 # 开启保护模式 protected-mode yes # 设置访问密码 requirepass 替换成足够长的随机密码 # 后台运行交给 systemd 管理 supervised systemd # 开启 RDB 持久化 save 900 1 save 300 10 save 60 10000 # 开启 AOF(根据业务需要选择) appendonly yes appendfsync everysec 注意: - Redis 不建议直接暴露到公网。 - 密码不要使用简单数字或常见字符串。 - Redis 的数据持久化策略应根据缓存、队列等业务需求选择。 重启:


sudo systemctl restart redis-server

3. 测试 Redis 如果配置了密码:


redis-cli --askpass ping

输入密码后,正常返回: text PONG 查看 Redis 信息:


redis-cli --askpass INFO

查看 Redis 运行状态:


sudo systemctl status redis-server

4. Redis 常用命令


sudo systemctl start redis-server
sudo systemctl stop redis-server
sudo systemctl restart redis-server
sudo systemctl reload redis-server
sudo systemctl status redis-server

--- 五、安装 Web 服务 这里提供两种方案:Caddy 和 Nginx。 两者都可以运行 PHP-FPM,但建议选择其中一种作为主要 Web 服务。 方案 A:安装 Caddy # 1. 添加官方软件源


sudo apt update

sudo apt install -y \
  debian-keyring \
  debian-archive-keyring \
  apt-transport-https \
  curl

导入 GPG 密钥:


curl -1sLf \
  'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
  | sudo gpg --dearmor \
  -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

添加软件源:


curl -1sLf \
  'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
  | sudo tee /etc/apt/sources.list.d/caddy-stable.list

设置权限:


sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list

安装:


sudo apt update
sudo apt install -y caddy

# 2. Caddy 服务管理


# 开机启动
sudo systemctl enable caddy
# 启动
sudo systemctl start caddy
# 停止
sudo systemctl stop caddy
# 重启
sudo systemctl restart caddy
# 平滑重载
sudo systemctl reload caddy
# 查看状态
sudo systemctl status caddy

# 3. Caddy 配置文件 默认配置文件: text /etc/caddy/Caddyfile 编辑:


sudo vim /etc/caddy/Caddyfile

配置 PHP 网站: caddyfile example.com { root * /var/www/example.com/public encode zstd gzip php_fastcgi unix//run/php/php8.5-fpm.sock file_server log { output file /var/log/caddy/example.com-access.log } } 将 `example.com` 替换成自己的域名。 说明: - Caddy 默认自动申请和续期 HTTPS 证书。 - 域名 DNS 必须正确指向服务器。 - 80、443 端口必须可以从公网访问。 - 网站目录应当存在。 - PHP-FPM Socket 必须正确。 创建日志目录:


sudo mkdir -p /var/log/caddy

创建网站目录:


sudo mkdir -p /var/www/example.com/public

# 4. 检查和重载配置 检查:


sudo caddy validate --config /etc/caddy/Caddyfile

重载:


sudo systemctl reload caddy

查看日志:


sudo journalctl -u caddy -f

--- 方案 B:安装 Nginx # 1. 安装 Nginx


sudo apt update
sudo apt install -y nginx

设置开机启动:


sudo systemctl enable nginx

启动:


sudo systemctl start nginx

查看状态:


sudo systemctl status nginx

查看编译参数:


nginx -V

# 2. Nginx 默认目录 | 路径 | 用途 | |---|---| | `/etc/nginx/nginx.conf` | 主配置文件 | | `/etc/nginx/sites-available/` | 站点配置存放目录 | | `/etc/nginx/sites-enabled/` | 已启用的站点 | | `/etc/nginx/conf.d/` | 扩展配置 | | `/var/www/html/` | 默认网站目录 | | `/var/log/nginx/access.log` | 访问日志 | | `/var/log/nginx/error.log` | 错误日志 | # 3. Nginx 常用命令


# 检查配置
sudo nginx -t

# 平滑重载
sudo systemctl reload nginx

# 重启
sudo systemctl restart nginx

# 停止
sudo systemctl stop nginx

# 启动
sudo systemctl start nginx

# 查看状态
sudo systemctl status nginx

# 查看错误日志
sudo tail -f /var/log/nginx/error.log

# 查看访问日志
sudo tail -f /var/log/nginx/access.log

--- 六、配置 PHP 网站站点 以下以域名 `example.com` 为例。 网站目录统一使用: text /var/www/example.com/ 网站入口目录: text /var/www/example.com/public/ 建议将项目代码与公开目录分离,避免 `.env`、配置文件等敏感文件被直接访问。 1. 创建网站目录


sudo mkdir -p /var/www/example.com/public

创建测试文件:


sudo vim /var/www/example.com/public/index.php

写入: php 设置权限:


sudo chown -R www-data:www-data /var/www/example.com

sudo find /var/www/example.com -type d -exec chmod 755 {} \;

sudo find /var/www/example.com -type f -exec chmod 644 {} \;

注意:实际部署时应根据项目写入需求调整目录权限,避免将所有代码目录都设置为可写。 2. Nginx 站点配置 创建配置文件:


sudo vim /etc/nginx/sites-available/example.com

写入以下配置: nginx server { listen 80; server_name example.com www.example.com; # 先用于 HTTP 测试 root /var/www/example.com/public; index index.php index.html index.htm; access_log /var/log/nginx/example.com-access.log; error_log /var/log/nginx/example.com-error.log; # 禁止访问隐藏文件 location ~ /\.(?!well-known).* { deny all; } # PHP 入口及伪静态 location / { try_files $uri $uri/ /index.php?$query_string; } # PHP-FPM location ~ \.php$ { try_files $uri =404; include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.5-fpm.sock; } # 静态资源缓存 location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|webp|woff|woff2)$ { expires 7d; access_log off; } } 启用站点:


sudo ln -s \
  /etc/nginx/sites-available/example.com \
  /etc/nginx/sites-enabled/example.com

如果默认站点不再需要,可以删除默认配置链接:


sudo rm -f /etc/nginx/sites-enabled/default

检查配置:


sudo nginx -t

重载:


sudo systemctl reload nginx

3. Nginx 配置 HTTPS 如果使用 acme.sh 管理 SSL 证书,假设证书路径为: text /etc/nginx/ssl/example.com/fullchain.pem /etc/nginx/ssl/example.com/privkey.pem 将站点配置调整为: nginx server { listen 80; server_name example.com www.example.com; location ^~ /.well-known/acme-challenge/ { root /var/www/example.com/public; } location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; http2 on; server_name example.com www.example.com; root /var/www/example.com/public; index index.php index.html index.htm; ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; access_log /var/log/nginx/example.com-access.log; error_log /var/log/nginx/example.com-error.log; location ~ /\.(?!well-known).* { deny all; } location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri =404; include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.5-fpm.sock; } location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|webp|woff|woff2)$ { expires 7d; access_log off; } } 检查:


sudo nginx -t

重载:


sudo systemctl reload nginx

注意:如果尚未申请证书,不能直接启用上述 HTTPS 配置,否则 Nginx 会因证书文件不存在而启动失败。 --- 七、Caddy 与 Nginx 的选择 | 对比项目 | Caddy | Nginx | |---|---|---| | 安装难度 | 简单 | 简单 | | 配置难度 | 较低 | 中等 | | HTTPS | 自动申请和续期 | 需要单独配置 | | PHP-FPM | 支持 | 支持 | | 反向代理 | 支持 | 支持 | | 静态文件 | 支持 | 支持 | | 生态成熟度 | 成熟 | 非常成熟 | | 复杂规则 | 支持 | 配置更灵活 | | 内存占用 | 较低 | 较低 | 个人博客、公司官网、ThinkPHP 网站等常规 PHP 应用,两者都可以满足需求。 如果希望减少 HTTPS 证书维护工作,推荐 Caddy。 如果已经有成熟的 Nginx 配置、运维脚本或复杂转发规则,继续使用 Nginx 更合适。 --- 八、防火墙配置 建议使用 UFW 管理服务器防火墙。 1. 安装 UFW


sudo apt install -y ufw

2. 开放 SSH


sudo ufw allow OpenSSH

如果 SSH 使用其他端口,例如 2222:


sudo ufw allow 2222/tcp

请先确认 SSH 新端口可以正常连接,再启用防火墙。 3. 开放 Web 端口 Caddy 或 Nginx 都需要:


sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

4. 启用防火墙


sudo ufw enable

查看规则:


sudo ufw status verbose

注意: - MySQL 3306 不建议对公网开放。 - Redis 6379 不建议对公网开放。 - PHP-FPM 默认使用本地 Socket,不需要开放公网端口。 - SSH 必须保留正确的访问规则。 --- 九、软件升级 Ubuntu 使用 APT 管理软件包。 1. 更新软件包列表


sudo apt update

2. 升级全部已安装软件


sudo apt upgrade -y

3. 单独升级软件 升级 Nginx:


sudo apt install --only-upgrade nginx

升级 Caddy:


sudo apt install --only-upgrade caddy

升级 MySQL:


sudo apt install --only-upgrade mysql-server

升级 Redis:


sudo apt install --only-upgrade redis-server

升级 PHP 8.5:


sudo apt install --only-upgrade 'php8.5-*'

4. 清理无用软件包


sudo apt autoremove -y
sudo apt autoclean

5. 查看可升级软件


apt list --upgradable

注意:生产环境升级前,建议先备份数据库和网站文件,并在测试环境验证 PHP 大版本升级的兼容性。 --- 十、常用服务管理命令汇总 PHP-FPM


sudo systemctl start php8.5-fpm
sudo systemctl stop php8.5-fpm
sudo systemctl restart php8.5-fpm
sudo systemctl reload php8.5-fpm
sudo systemctl status php8.5-fpm

MySQL


sudo systemctl start mysql
sudo systemctl stop mysql
sudo systemctl restart mysql
sudo systemctl status mysql

Redis


sudo systemctl start redis-server
sudo systemctl stop redis-server
sudo systemctl restart redis-server
sudo systemctl status redis-server

Nginx


sudo nginx -t
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl status nginx

Caddy


sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl start caddy
sudo systemctl stop caddy
sudo systemctl restart caddy
sudo systemctl reload caddy
sudo systemctl status caddy

--- 十一、服务器部署完成检查 以下命令可以快速检查整个环境。 1. 检查 PHP


php -v
php -m

2. 检查 PHP-FPM


sudo systemctl is-active php8.5-fpm

3. 检查 MySQL


sudo systemctl is-active mysql

mysql --version

4. 检查 Redis


sudo systemctl is-active redis-server

redis-server --version

5. 检查 Web 服务 使用 Nginx:


sudo nginx -t
sudo systemctl is-active nginx

使用 Caddy:


sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl is-active caddy