努力
加油

TencentOS Server 3.1与PHP 8.2配合php-fpm的安装步骤是什么?

在 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 源。

  1. 安装 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
  1. 启用 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

  1. 检查配置文件

主配置文件位于 /etc/php.ini,FPM 池配置文件位于 /etc/php-fpm.d/www.conf。

# 查看当前 PHP 版本
php -v
# 预期输出: PHP 8.2.x (cli) ...

# 查看 FPM 状态
systemctl status php-fpm
  1. 优化 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。

  1. 全局 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)

  1. 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/
  2. 找不到扩展

    • 现象:php -m 看不到 pdo_mysql 或 gd。
    • 解决:确认安装时是否包含了对应的 -devel 或具体扩展包。有时需要单独安装 php-pecl-* 包。
  3. 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');"

总结

在 TencentOS Server 3.1 上使用 PHP 8.2,核心在于 启用 Remi 源的 Module Stream。这种方法比从源码编译更安全、更易维护,且能获得安全更新补丁。对于云服务器生产环境,务必开启 OPcache 并合理配置 www.conf 的用户权限,以避免常见的权限和安全问题。