在 TencentOS Server 3.1 (TOS 3.1) 上部署 PHP 8.2 + php-fpm,最稳妥且符合生产环境规范的做法是利用 Remi RPM Repository。
虽然 TOS 基于 CentOS/RHEL 体系,但官方源中的 PHP 版本通常较旧(如 7.x 或 8.0/8.1)。要稳定使用 PHP 8.2,必须引入第三方高质量 RPM 源。以下是经过验证的、去除了废话的生产级安装步骤。
前置准备:清理环境
如果你之前通过 yum install php 安装过旧版本的 PHP,或者残留了配置文件,请先清理,避免冲突。
# 停止可能存在的旧服务
systemctl stop php-fpm nginx httpd
# 卸载旧版 PHP 及相关模块(谨慎操作,确认无业务依赖)
yum remove php php-cli php-common php-mysqlnd php-pdo php-gd php-mbstring -y
# 清理缓存
yum clean all
第一步:配置 Remi 源
Remi 是 Linux 社区维护的高质量 PHP RPM 源,支持多版本共存。我们需要启用 EPEL 和 Remi 源。
- 安装 EPEL 和 Remi 仓库
# 安装 EPEL 释放库
sudo yum install epel-release -y
# 安装 Remi 仓库
# TOS 3.1 兼容 RHEL 8/CentOS 8,因此使用 el8 版本
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
- 启用 PHP 8.2 模块流 (Module Stream)
RHEL/CentOS 8+ 系列系统使用 dnf module 来管理多版本软件。我们需要重置默认 PHP 模块并启用 Remi 提供的 PHP 8.2。
# 禁用默认的 PHP 模块(如果存在)
sudo dnf module disable php -y
# 启用 Remi 的 PHP 8.2 模块
sudo dnf module enable remi-php82 -y
注意:执行上述命令后,dnf repolist 可以看到 remi-php82 相关的包已激活。
第二步:安装 PHP 8.2 及常用扩展
直接安装核心包以及开发中常用的扩展。你可以根据实际需求增删扩展名。
sudo yum install php php-fpm php-cli php-json php-common php-mysqlnd php-zip php-devel php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-intl php-opcache -y
关键点说明:
php-fpm: FastCGI Process Manager,Nginx/Apache 的后端处理器。php-mysqlnd: MySQL Native Driver,连接 MySQL/MariaDB 的核心驱动。php-opcache: 开启 OPcache 提升性能,PHP 8.2 默认未完全开启,需确保配置文件中opcache.enable=1。php-mbstring: 处理多字节字符串(中文等),必备。php-intl: 国际化支持,部分框架(如 Laravel)需要。
第三步:配置 php-fpm
- 检查配置文件
主配置文件位于 /etc/php.ini,FPM 池配置文件位于 /etc/php-fpm.d/www.conf。
# 查看当前 PHP 版本
php -v
# 预期输出: PHP 8.2.x (cli) ...
# 查看 FPM 状态
systemctl status php-fpm
- 优化
www.conf(针对 Nginx 场景)
大多数用户搭配 Nginx 使用。编辑 /etc/php-fpm.d/www.conf:
; 用户和用户组改为 nginx (如果后端是 Nginx)
user = nginx
group = nginx
; 监听方式
listen = /run/php-fpm/www.sock
; socket 权限设置,确保 Nginx 能访问
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
如果你使用 Apache,则保持 user = apache 和 listen = 127.0.0.1:9000。
- 全局
php.ini基础优化
编辑 /etc/php.ini,调整以下关键参数以适应生产环境:
[Date]
date.timezone = Asia/Shanghai
[OPcache]
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0 ; 生产环境建议关闭,更新代码时重启 fpm 即可
opcache.revalidate_freq=2
[PHP]
expose_php = Off
max_execution_time = 300
memory_limit = 256M
post_max_size = 64M
upload_max_filesize = 64M
第四步:启动与开机自启
# 启动 php-fpm
sudo systemctl start php-fpm
# 设置开机自启
sudo systemctl enable php-fpm
# 验证运行状态
sudo systemctl status php-fpm
第五步:Nginx 配合测试
假设你已经安装了 Nginx,创建一个测试文件 /usr/share/nginx/html/info.php:
<?php
phpinfo();
?>
在 Nginx 站点配置 (/etc/nginx/conf.d/default.conf 或自定义 conf) 中添加如下 location 块:
server {
listen 80;
server_name your_domain_or_ip;
root /usr/share/nginx/html;
index index.html index.php;
location ~ .php$ {
fastcgi_pass unix:/run/php-fpm/www.sock; # 对应 www.conf 中的 listen 路径
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
重载 Nginx 并访问 http://your_ip/info.php。如果看到 PHP 8.2 的信息页面,说明安装成功。
常见问题排查 (Troubleshooting)
-
Permission Denied on Socket
- 现象:Nginx 报 502 Bad Gateway,日志提示无法连接
/run/php-fpm/www.sock。 - 解决:检查
www.conf中的listen.owner和listen.group是否与 Nginx 运行用户一致。同时检查 SELinux 状态。如果开启了 SELinux,可能需要执行:setsebool -P httpd_can_connect_webserver on # 或者更精确地设置上下文 restorecon -Rv /run/php-fpm/
- 现象:Nginx 报 502 Bad Gateway,日志提示无法连接
-
找不到扩展
- 现象:
php -m看不到pdo_mysql或gd。 - 解决:确认安装时是否包含了对应的
-devel或具体扩展包。有时需要单独安装php-pecl-*包。
- 现象:
-
Composer 安装失败
- PHP 8.2 对某些旧版 Composer 插件可能有兼容性要求。建议升级 Composer 到最新稳定版:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php composer-setup.php --install-dir=/usr/local/bin --filename=composer php -r "unlink('composer-setup.php');"
- PHP 8.2 对某些旧版 Composer 插件可能有兼容性要求。建议升级 Composer 到最新稳定版:
总结
在 TencentOS Server 3.1 上使用 PHP 8.2,核心在于 启用 Remi 源的 Module Stream。这种方法比从源码编译更安全、更易维护,且能获得安全更新补丁。对于云服务器生产环境,务必开启 OPcache 并合理配置 www.conf 的用户权限,以避免常见的权限和安全问题。
云技术博客