2019 年初,一位运维工程师觉得每次手动搭 LNMP 环境太折腾,顺手写了个一键脚本自己用。六年后的 260520 版本,这个项目已经覆盖了 Nginx、PHP、MySQL 等核心组件的多个版本并行安装——最新一次更新把 Nginx 推到了 1.30.1,PHP 8.5 系列一口气补到了 8.5.6,MySQL 也同步跟进 8.0.46 和 8.4.9。
这次更新值得关注的不是版本号本身,而是 PHP 8.4 和 8.5 多个小版本同时维护的策略,以及多版本 PHP 共存的安装方式。
版本更新一览
260520 版涉及的具体版本:
| 组件 | 更新版本 |
|---|---|
| Nginx | 1.30.1 |
| PHP | 8.2.31、8.3.31 |
| PHP | 8.4.18 → 8.4.21(4 个小版本) |
| PHP | 8.5.3 → 8.5.6(4 个小版本) |
| MySQL | 8.0.46、8.4.9 |
PHP 8.4 和 8.5 各保留了多个小版本包,这意味着你可以按需选择特定补丁版本,而不是被强制升级到最新。对于生产环境来说,这种粒度控制很实用——某个小版本如果引入了行为变化,你可以暂时停留在上一个已知稳定的版本。
快速安装与多版本 PHP 共存
wlnmp 的核心优势之一是支持同一台机器上安装多个 PHP 版本,各自独立运行。下面是完整的安装流程。
基础安装
# 下载并执行安装脚本(支持 CentOS 7/8、RHEL、Rocky、AlmaLinux 等)
curl -o wlnmp.sh https://wlnmp.cn/install.sh && bash wlnmp.sh
脚本会先配置 wlnmp 的 yum 源,之后就可以像普通软件包一样按需安装:
# 安装 Nginx 1.30
yum install wnginx-1.30.1
# 安装 PHP 8.5.6(最新)
yum install wphp-8.5.6
# 同时安装 PHP 8.3,用于老项目兼容
yum install wphp-8.3.31
# 安装 MySQL 8.4
yum install wmysql-8.4.9
多版本 PHP 的启停管理
安装多个 PHP 版本后,各版本的 systemd 服务名会带版本号后缀,互不冲突:
# 启动 PHP 8.5 的 FPM
systemctl start php8.5-fpm
systemctl enable php8.5-fpm
# 启动 PHP 8.3 的 FPM
systemctl start php8.3-fpm
systemctl enable php8.3-fpm
# 查看两个版本各自的监听端口或 socket
ss -tlnp | grep php-fpm
默认配置下,不同 PHP 版本会监听不同的 Unix socket 路径(如 /tmp/php8.5-fpm.sock 和 /tmp/php8.3-fpm.sock),Nginx 通过 fastcgi_pass 指向不同 socket 即可实现按站点分配 PHP 版本。
Nginx 按站点指定 PHP 版本
这是一个典型的多版本共存配置——两个站点分别跑 PHP 8.5 和 PHP 8.3:
# /usr/local/nginx/conf/vhost/new-app.conf
server {
listen 80;
server_name new-app.example.com;
root /data/www/new-app;
index index.php;
location ~ \.php$ {
fastcgi_pass unix:/tmp/php8.5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# /usr/local/nginx/conf/vhost/legacy-app.conf
server {
listen 80;
server_name legacy-app.example.com;
root /data/www/legacy-app;
index index.php;
location ~ \.php$ {
fastcgi_pass unix:/tmp/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
配置完成后重载 Nginx:
nginx -t && nginx -s reload
这样同一台机器上,新项目用 PHP 8.5 的新特性(如属性钩子、不对称可见性),老项目继续跑 PHP 8.3 不用改代码,互不干扰。
PHP 8.5 小版本选择的实际考量
260520 版同时提供了 PHP 8.5.3 到 8.5.6 四个包。生产环境该选哪个?
一般原则:选最新小版本。 PHP 小版本(x.y.Z 中的 Z)主要是 bug 修复和安全补丁,不引入功能变更,8.5.6 是最安全的选项。
需要停留的情况: 如果你刚在某个小版本上完成了完整测试,还没来得及验证更新版本,可以暂时不升级。比如你的 CI 流程在 8.5.3 上跑通了全量测试,8.5.4 刚发布两天,先不动是合理的。
# 查看当前已安装的 PHP 版本
/usr/local/php8.5/bin/php -v
# 指定版本安装(而非默认最新)
yum install wphp-8.5.3
MySQL 8.0 与 8.4 的选择
这次更新同时提供了 MySQL 8.0.46 和 8.4.9。两者的关系不是简单的"新取代旧":
- MySQL 8.0.x:长期维护的 LTS 线,适合已经在 8.0 上跑的生产库,升级小版本风险极低。
- MySQL 8.4.x:创新发布线,包含新特性(如 MySQL 9 的部分特性前移),适合新项目或需要特定功能的场景。
# 稳妥选择:MySQL 8.0 LTS
yum install wmysql-8.0.46
# 新项目想试新特性:MySQL 8.4
yum install wmysql-8.4.9
# 安装后初始化
systemctl start mysql
systemctl enable mysql
# 验证版本
mysql -V
如果你现有数据库在 8.0 上稳定运行,没有明确需求驱动,没必要跳到 8.4。8.4 的部分默认行为有变化(如认证插件默认改为 caching_sha2_password),迁移需要额外适配。
上手检查清单
在 CentOS/RHEL 系列机器上用 wlnmp 部署前,建议走一遍这个流程:
- 确认系统版本——wlnmp 支持 CentOS 7/8、Rocky、AlmaLinux,不支持 Ubuntu/Debian。
- 规划 PHP 版本组合——列出每个站点需要的 PHP 版本,避免装了不用。
- 先装 Nginx,再装 PHP——Nginx 的配置模板依赖 PHP socket 路径,顺序装更顺畅。
- MySQL 选线——已有库选 8.0,新项目可以考虑 8.4。
- 装完后跑一遍
systemctl status——确认所有服务正常启动,再推配置。
# 一键检查所有 wlnmp 服务状态
systemctl status nginx php8.5-fpm php8.3-fpm mysql --no-pager
wlnmp 从 2019 年走到现在,维护节奏稳定,版本覆盖面越来越宽。260520 这次的重点不是某个单一组件的大升级,而是多版本并存策略的延续——这在实际运维中比"最新版一刀切"更管用。