从空服务器开始。
首次安装显示交互菜单。Nginx、SQL 数据库和主 PHP 由主安装流程选择,额外服务单独安装。
确认环境与 root 权限
使用全新的 Ubuntu 22.04 LTS、amd64 / x86_64 服务器。amd64 和 x86_64 是同一架构的两个名称。
cat /etc/os-release
uname -m
sudo -i下载并安装主环境
在全新服务器上以 root 执行下面的下载、校验和安装命令。
wget https://pub-2ea34f95a2324956a95f065b9335af1b.r2.dev/onmp0.1.3-dev.tar.gz -O onmp0.1.3-dev.tar.gz && wget https://pub-2ea34f95a2324956a95f065b9335af1b.r2.dev/onmp0.1.3-dev.sha256 -O onmp0.1.3-dev.sha256 && grep ' onmp0.1.3-dev.tar.gz$' onmp0.1.3-dev.sha256 | sha256sum -c - && tar zxf onmp0.1.3-dev.tar.gz && cd onmp0.1.3-dev && ./install.sh onmp按菜单选择 Nginx、数据库和 PHP。设置 SQL root 密码时输入不回显,直接回车生成随机密码。
组件首次编译需要一些时间,以终端输出为准。安装完成后保留 onmp0.1.3-dev/ 目录,不要删除或移动。
安装额外服务与扩展
下方选择只生成额外组件的命令,不会在浏览器中执行安装。Redis 和 MongoDB 选定版本后会提示设置密码。
onmp install redis
onmp install mongodb 8.0
onmp php-extension redis
onmp php-extension mongodb
onmp statusMongoDB 新安装账号:onmp;认证数据库:admin;角色:root。已有安装继续保留原账号和密码。
多 PHP 与工具版本
onmp install mphp 8.3
onmp php-extension redis /usr/local/php8.3
onmp php-extension mongodb /usr/local/php8.3
onmp install node 22
onmp install pnpm 11
onmp install composer 2.10.30.1.2 的主 PHP 8.4.26 / 额外 PHP 8.3.35 曾完成共存测试,但这两个旧补丁已受本次漏洞影响,不应继续选用。新版本验收状态见下载页和更新记录。
检查状态,开始管理
onmp status
onmp redis check
onmp mongodb check
onmp vhost add
onmp vhost list
onmp database add
onmp database list服务配置、数据和日志的位置可在 配置目录 中查找。MongoDB 跨大版本和 SQL 升级需要独立迁移流程,当前开发版不直接覆盖已有数据库。
Laravel Reverb 与 Ably
基础 Reverb 无需 Swoole。0.1.2 新安装的 PHP CLI 已允许常驻服务监听端口,PHP-FPM 继续使用原来的函数限制。
cd /home/wwwroot/你的站点
# 在站点用户身份下执行,按项目选择一种方案:
php artisan install:broadcasting --reverb
# 或使用 Ably:
php artisan install:broadcasting --ablyReverb 需配置进程管理和 Nginx WebSocket 转发;安装包内示例:conf/example/reverb-example.conf。Ably 需要你自己的应用密钥,示例命令使用 Laravel 的 Pusher 兼容方案。配置流程见 Laravel 官方广播文档。
旧安装可在更新脚本后执行 onmp php-cli enable。不要在已经安装的环境上重新执行完整安装器。
已有服务器:升级每个 PHP 实例
本版升级入口只支持同一 PHP 分支的补丁升级:8.2 → 8.2.35、8.3 → 8.3.36、8.4 → 8.4.27、8.5 → 8.5.12。跨分支升级请另建 PHP 实例,完成应用和扩展验证后再迁移站点。
本版升级流程的测试范围见更新记录;生产环境仍需独立备份和项目验证。
1. 保留旧环境,准备独立的新脚本目录
先备份每个 PHP 实例的 etc/php.ini、etc/php-cli.ini、etc/php-fpm.conf、conf.d/ 和第三方扩展。保留原 ONMP 管理目录、onmp.conf 和 .state/。
下载两份 0.1.3-dev 配套文件到服务器的同一目录,校验后解压到一个新建的独立目录:
grep ' onmp0.1.3-dev.tar.gz$' onmp0.1.3-dev.sha256 | sha256sum -c - &&
upgrade_dir=$(mktemp -d ./onmp-upgrade.XXXXXX) &&
tar zxf onmp0.1.3-dev.tar.gz -C "$upgrade_dir" &&
cd "$upgrade_dir/onmp0.1.3-dev"如果旧 onmp.conf 有自定义编译设置,将它复制到当前新包目录的 onmp.conf,确认设置符合现有环境。不要在已有服务器运行 install.sh 或 setup.sh。
2. 使用新包内的升级脚本
保持在上一步进入的新包目录。主 PHP 执行:
sudo bash ./upgrade.sh php额外 PHP 实例在新包目录另行执行,并按提示选择目标实例与对应补丁版本:
sudo bash ./upgrade.sh mphp这里直接调用新包的升级脚本,避免原 onmp 命令仍指向旧脚本。本流程不会自动迁移旧的 onmp 命令链接,管理命令显示的包版本也可能仍是旧版。
3. 验证版本、扩展与应用
同分支补丁升级会保留现有 CLI / FPM 配置、conf.d/ 与 Composer,并只停止和启动目标 PHP 实例;增加失败回滚以恢复原实例及对应服务。实机验证范围仍以上方进度说明为准。
补丁升级默认只处理 Redis / MongoDB 两种第三方模块;其他 PECL 扩展与旧插件需要单独评估、重新编译和迁移,不承诺全部自动兼容。
以主 PHP 和每个 /usr/local/php8.x/bin/php 的实际版本、配置、扩展加载及对应 PHP-FPM 的网站请求作为验收依据,不以 onmp --version 单独判断 PHP 是否修复。重启使用旧二进制的队列、Reverb 和其他常驻进程,具体应用服务名由项目决定。
4. 备份、失败目录与升级日志
路径中的“时间戳”为本次升级开始时间,格式是 YYYYMMDDHHMMSS。8.x 替换为实际额外 PHP 分支,例如 8.3。
| 实例 / 用途 | 路径 | 保留规则 |
|---|---|---|
| 主 PHP原实例备份 | /usr/local/oldphp<时间戳> | 升级成功后仍保留原实例备份。 |
| 主 PHP失败的新实例 | /usr/local/failedphp<时间戳> | 仅在升级失败且已产生新安装时出现。 |
| 主 PHP升级日志 | /root/upgrade_onmp_php<时间戳>.log | 按本次时间戳查找。 |
| 多 PHP原实例备份 | /usr/local/mphp-8.x-backup<时间戳> | 升级成功后仍保留对应实例备份。 |
| 多 PHP失败的新实例 | /usr/local/mphp-8.x-failed<时间戳> | 仅在升级失败且已产生新安装时出现。 |
| 多 PHP升级日志 | /root/upgrade_mphp<时间戳>.log | 按本次时间戳查找。 |
升级或回滚失败时,先查看对应日志并保留上述目录,确认原实例、失败实例和服务状态后再处理。不要盲目删除或移动备份目录,也不要反复执行完整安装。
仅更新网页、替换 ONMP 脚本、执行 apt upgrade 或调整 PHP 配置,都不等于已经安装修复后的 PHP。