passbolt必须使用系统级php-fpm而非phpenv管理的cli php,因phpenv不提供fpm进程、关键扩展(如gnupg/imagick)、web服务器集成及selinux等生产环境配置。

phpenv 本身不安装 Passbolt,它只是管理 PHP 版本的工具。Passbolt 是一个独立的 PHP Web 应用,需要在系统级 LEMP 环境(Linux + Nginx + MariaDB + PHP-FPM)中部署,phpenv 仅能帮你装好其中的 PHP 解释器和 CLI 环境——但不能替代 PHP-FPM、Web 服务器或数据库服务。
如果你强行用 phpenv 安装的 PHP 去跑 Passbolt,会卡在以下关键环节:
-
phpenv安装的是 CLI-only PHP,没有php-fpm进程管理器 - 缺少
opcache、mbstring、gmp、ldap(如需 AD 集成)等 Passbolt 强依赖扩展 - 不自动配置
php.ini中的upload_max_filesize、post_max_size、max_execution_time等关键项 - 无法生成 Nginx 或 Apache 的虚拟主机配置
所以:别试图用 phpenv “一键搭 Passbolt”——它不是 Docker,也不是 Laravel Valet。
Passbolt 必须用系统级 PHP-FPM,不是 phpenv 的 shims
Passbolt 的官方安装文档明确要求使用发行版包管理器安装 PHP(如 CentOS 的 Remi 仓库、Ubuntu 的 ondrej PPA),原因很实在:
-
php-fpm服务需由 systemd 管理(systemctl start php-fpm) - Web 服务器(Nginx/Apache)通过 Unix socket 或 TCP 连接
php-fpm,而phpenv的 shim 只响应终端命令,不提供监听进程 - 扩展如
imagick、gnupg(Passbolt 核心依赖)需编译进 FPM SAPI,不是 CLI SAPI
你可以在 phpenv 中装个 PHP 8.3 用来跑 composer install 或单元测试,但上线必须切回系统 PHP-FPM:
phpenv shell 8.3.13 composer install --no-dev --optimize-autoloader phpenv shell --unset # 切回系统默认 PHP(即 /usr/bin/php,对应 php-fpm)
正确搭配:phpenv + 系统 PHP-FPM
实际可行的分工是:
- 用
phpenv管理开发时的 CLI PHP(写 migration、跑 test、调试命令行脚本) - 用系统包管理器(
yum/apt)安装并启用php-fpm+ 扩展 - Passbolt 的
.env和 Nginx 配置全部指向系统 PHP-FPM socket(如/var/run/php-fpm/www.sock)
检查是否走对路:
ps aux | grep php-fpm —— 应看到 root 启动的 master 进程
curl -I http://localhost | grep Server —— 应看到 Nginx + PHP/8.x(来自 php-fpm -v,不是 php -v)
常见翻车点:extension_dir 和 extension 加载失败
Passbolt 启动时报 Class 'Gnupg' not found 或 imagick module is not loaded,往往是因为:
-
phpenv安装的 PHP 扩展路径($HOME/.phpenv/versions/8.3.13/lib/php/extensions/...)和系统php-fpm的extension_dir(通常是/usr/lib64/php/modules)完全不重叠 - 你在
~/.phpenv/versions/8.3.13/etc/php.ini里加了extension=gnupg,但php-fpm根本不读这个文件 - 正确做法是:用系统包装扩展(
yum install php-gnupg php-imagick),再确认/etc/php.d/下有对应 .ini 文件,且php-fpm -m | grep gnupg能输出
最省事的验证方式:
sudo systemctl restart php-fpm sudo -u nginx php -m | grep -E "(gnupg|imagick|gmp)"
最后一句实话:Passbolt 的复杂度不在 PHP 版本切换,而在 OpenPGP 密钥环初始化、GnuPG agent 配置、SELinux 上下文、Nginx rewrite 规则和数据库字符集(必须 utf8mb4_unicode_ci)。这些,phpenv 一个都管不了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











