搜索全站
网站迁移 8 分钟阅读

Alibaba Cloud Linux 3 与 CentOS 7 部署 WordPress 的差异与迁移要点

CentOS 7 已停止维护,迁移到 Alibaba Cloud Linux 3 时部署 WordPress 会有不少变化:yum 换 dnf、PHP 版本源、SELinux 上下文、firewalld 配置方式。本文逐项对比两者差异,给出可直接执行的部署命令与迁移清单,以及 SELinux 导致无法写入、无法发信的真实案例。

U
UFO_PF 2023-07-09 · 阅读 8 分钟
Al 网站迁移
阅读提示
本文约 3,103 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:CentOS 7 停服之后,很多站点被迫换系统

CentOS 7 在 2024 年 6 月已 EOL,不再有安全更新。依旧跑在 CentOS 7 上的 WordPress 站点,即使 WordPress 本身在更新,底层系统也在裸奔。

阿里云给出的替代是 Alibaba Cloud Linux 3(兼容 RHEL 8/9 生态),腾讯云有 TencentOS,华为云有 EulerOS。它们的共性是从 yum 走向 dnf、从 SysVinit 走向 systemd、默认开启 SELinux。看清这些变化,迁移才不会卡在奇怪的地方。

原理分析:差异到底在哪几层

层面 CentOS 7 Alibaba Cloud Linux 3
包管理 yum(Python 2) dnf(兼容 yum 命令)
默认 PHP 5.4(需第三方源) 8.x(AppStream 模块)
防火墙 iptables / firewalld firewalld + nftables 后端
安全模块 SELinux(多为关闭) SELinux(默认 enforcing)
数据库 MySQL 5.7 / MariaDB 5.5 MariaDB 10.x / MySQL 8
初始化 systemd(但服务名老旧) systemd

最大的坑是 SELinux。CentOS 7 上一堆教程第一句就是 setenforce 0,很多人迁移后照做,结果在新系统上 WordPress 依然写不了文件——因为文件的安全上下文(context)不对,不是开关的问题。

保姆级实操

第一步:安装 Nginx

sudo dnf update -y
sudo dnf install -y nginx
sudo systemctl enable --now nginx

第二步:安装 PHP 8.2(模块流)

sudo dnf module list php
sudo dnf module enable php:8.2 -y
sudo dnf install -y php-fpm php-mysqlnd php-curl php-gd php-mbstring \
  php-xml php-zip php-intl php-opcache

注意扩展名:php-mysql 在 RHEL 8+ 上叫 php-mysqlnd,少装这个会直接”建立数据库连接时出错”。

第三步:安装 MariaDB

sudo dnf install -y mariadb-server
sudo systemctl enable --now mariadb
sudo mysql_secure_installation

第四步:放行防火墙

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

第五步:部署 WordPress 并设置 SELinux 上下文

这是与 CentOS 7 最关键的区别。文件放在 /var/www/mimangfei.com:

sudo mkdir -p /var/www/mimangfei.com
sudo curl -sL https://wordpress.org/latest.tar.gz | sudo tar xz --strip-components=1 -C /var/www/mimangfei.com

sudo chown -R nginx:nginx /var/www/mimangfei.com
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/mimangfei.com(/.*)?"
sudo restorecon -Rv /var/www/mimangfei.com

httpd_sys_rw_content_t 表示”Web 服务可读写”,只有设了这个上下文,WordPress 才能在 SELinux enforcing 下写 wp-content。

第六步:允许网络连接(发信、更新)

SELinux 默认禁止 Web 服务发起外部网络连接,会导致后台更新、SMTP 发信失败:

sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_can_sendmail 1

第七步:PHP-FPM 配置

/etc/php-fpm.d/www.conf:

user = nginx
group = nginx
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
pm = dynamic
pm.max_children = 40
pm.start_servers = 6
pm.min_spare_servers = 4
pm.max_spare_servers = 12
pm.max_requests = 500
sudo systemctl enable --now php-fpm

常见踩坑与失败案例

  1. 前台 403 Forbidden —— SELinux 上下文不对。用 ls -Z /var/www/mimangfei.com 看是否为 httpd_sys_content_t,不是就 restorecon。
  2. 后台能开,但无法安装插件、无法上传 —— 需要 httpd_sys_rw_content_t(读写)而不是 httpd_sys_content_t(只读)。
  3. SMTP 发信失败,日志无 PHP 错误 —— SELinux 拦了出站连接,httpd_can_network_connect 没开。这在新手上极常见,排查方向完全不对。
  4. 案例:从 CentOS 7 迁移后,站点前台正常但上传图片报”无法写入磁盘”。查权限 755/644 都没问题,最后 ausearch -m AVC -ts recent 才看到 SELinux 拒绝记录。一句 restorecon 解决。
  5. semanage 命令不存在 —— 需要 sudo dnf install -y policycoreutils-python-utils。
  6. MySQL 8 认证插件不兼容 —— MySQL 8 默认 caching_sha2_password,老版本 PHP 不支持。要么改回 mysql_native_password,要么用 MariaDB。

总结

从 CentOS 7 到 Alibaba Cloud Linux 3,包管理的变化只是表面,真正让人翻车的是 SELinux 默认开启和 PHP 模块流(module stream) 这两个新机制。迁移时建议的顺序是:先在新机器上完整部署并验证站点可用 → 用 WP-CLI 或 mysqldump 迁移数据 → 切 DNS 观察 48 小时 → 旧机保留快照一周再释放。不要关 SELinux,正确做法是配好上下文,它拦住的攻击远比它带来的麻烦多。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。