一、为什么两台 Web 节点要尽量保持一致¶
在负载均衡架构里,web01 和 web02 都可能接收到用户请求。
因此原笔记在部署时采用的思路非常明确:
- 两台 Web 的运行用户统一
- PHP 环境统一
- Nginx 配置统一
- 代码结构统一
- 上传目录挂载同一份 NFS 共享
如果这几项不一致,就很容易出现:
- 某一台机器能访问,另一台不能
- 上传文件只在单节点存在
- 代码版本不同步
二、web01 先做完整主节点部署¶
原笔记先在 web01 上完成完整部署,再把结果同步到 web02。
2.1 创建统一站点用户¶
useradd -u 1999 -s /sbin/nologin -M www
id www
这里的重点是后续:
- PHP-FPM 用
www - Nginx 用
www - 站点目录属主也用
www
这样权限管理会简单很多。
2.2 安装并配置 PHP-FPM¶
原笔记使用 Webtatic 的 PHP 7.2 仓库,然后安装了一整套 PHP 运行依赖,包括:
php72w-fpmphp72w-mysqlndphp72w-gdphp72w-mbstringphp72w-opcachephp72w-pecl-redis
安装完成后启动:
systemctl enable php-fpm
systemctl start php-fpm
接着修改 /etc/php-fpm.d/www.conf:
user = www
group = www
然后重启:
systemctl restart php-fpm
这一步确保 PHP 处理进程与站点目录权限一致。
2.3 安装并配置 Nginx¶
原笔记同样在 web01 上安装 Nginx,并把 /etc/nginx/nginx.conf 中的运行用户改为:
user www;
随后创建动态站点配置:
server {
listen 80;
server_name blog.oldboylinux.cn;
root /app/code/blog;
error_log /var/log/nginx/blog-error.log notice;
access_log /var/log/nginx/blog-access.log main;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_buffering on;
fastcgi_buffers 64 64k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
这个配置的核心是:
- 默认首页改成
index.php .php请求通过 FastCGI 转给127.0.0.1:9000
之后执行:
nginx -t
systemctl restart nginx php-fpm
mkdir -p /app/code/blog/
三、在 web01 上先完成 WordPress 代码落地¶
原笔记先把 WordPress 代码解压到:
/app/code/blog/
示例:
unzip WordPress-master.zip
mv WordPress-master/* /app/code/blog/
chown -R www.www /app/code/blog/
然后通过本地 hosts 把:
192.168.1.20 blog.oldboylinux.cn
指向 web01,在浏览器里先完成首次安装向导,包括:
- 进入
Let's go - 填写数据库信息
- 运行安装
- 创建后台管理员账号
这个顺序很合理,因为先在单节点把应用本身装通,再做第二台节点同步,会更容易排错。
四、为什么上传目录要单独挂 NFS¶
原笔记把 WordPress 的上传目录单独拿出来处理:
mkdir -p /app/code/blog/wp-content/uploads
yum install nfs-utils -y
mount -t nfs 172.16.1.24:/nfs/wordpress /app/code/blog/wp-content/uploads/
验证:
df -h | grep wp
然后在 web01 上创建测试文件,再去 NFS 主机上检查。
如果文件能在 NFS 服务端看到,就说明挂载成功。
这个设计的意义非常直接:
- WordPress 程序代码可以复制
- 但用户上传内容必须共享
否则用户从某个节点上传的图片,切换到另一节点访问时就可能找不到。
五、web02 如何快速和 web01 保持一致¶
原笔记在 web02 上沿用了与 web01 基本相同的做法:
- 创建
www用户 - 安装并配置 PHP-FPM
- 把 PHP-FPM 的运行用户改成
www - 安装 Nginx,并把 Nginx 用户改成
www
不同之处主要是:
5.1 直接复用 web01 的配置文件¶
从 web01 把站点配置同步到 web02:
scp blog.oldboylinux.cn.conf 192.168.1.22:`pwd`
5.2 直接复用 web01 的 WordPress 代码¶
原笔记在 web01 上打包代码,但排除了上传目录内容:
tar zcf ~/wordpress-no-uploads.tar.gz . --exclude=/app/code/blog/wp-content/uploads/*
scp ~/wordpress-no-uploads.tar.gz 192.168.1.22:~
然后在 web02 解压:
tar xf wordpress-no-uploads.tar.gz -C /app/code/blog/
这里排除上传目录是合理的,因为上传内容本来就会通过 NFS 共享。
5.3 在 web02 上同样挂载 NFS¶
yum install nfs-utils -y
mount -t nfs 172.16.1.24:/nfs/wordpress /app/code/blog/wp-content/uploads/
验证方法和 web01 一样:
在 web02 上创建测试文件,再去 NFS 主机上确认是否写入成功。
六、这套部署方式为什么适合做 WordPress 集群¶
原笔记虽然是分步演示,但背后的架构思路其实很完整:
- 程序代码在两台 Web 上保持一致
- 上传目录统一挂到同一个 NFS
- 数据库统一使用远端 MariaDB
- Web 处理进程统一使用
www
这样后面再接入负载均衡时,两台节点对用户来说就更接近“同一套站点的两个入口”。
七、小结¶
双 Web 节点部署 WordPress 的关键,不是简单把代码复制两份,而是先统一运行环境,再把“可复制内容”和“必须共享内容”区分开:
- PHP-FPM 与 Nginx 统一到
www - 代码通过打包或同步复制
- 上传目录通过 NFS 共享
只要把这三层关系理顺,后面的负载均衡接入就会顺畅很多。