ubuntu26.04安装php环境
本文以 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