麒麟V10生产环境WordPress部署与分布式迁移完全指南
🤣 一篇不正经但很管用的生产环境实战教程
"看完这篇文章,你就从'啥也不会'变成了'哇你好厉害'"
📖 劝退环节~哈哈
你好啊!点进来看这篇文章,说明你和我一样,想搞一个正经的网站——但又不想看那种满屏术语、读三行就犯困的教程。
我懂你,所以这篇文章会有点不一样:
-
该正经的地方不正经,该幽默的地方不幽默(毕竟生活已经够苦了,哈哈哈~)
我会带你从一个空荡荡的服务器,一步步搭出一个能抗住流量、不怕图片丢失、用户登录不怕掉线的正经网站。
看完这篇文章你会得到:
-
一台跑着WordPress的服务器(单机版)
-
一个由5台服务器组成的豪华集群(分布式版)
-
一堆你可以拿去吹牛的知识点
-
若干深夜排障时会用到的救命命令
阅读时间:大概够你喝两杯咖啡
难度系数:⭐⭐⭐(三颗星,真的不难)
装逼系数:⭐⭐⭐⭐⭐(五颗星,学会了你就是公司最靓的仔)
⚠️ 友情提示:本文基于麒麟V10系统(国产操作系统之光)。如果你用的是CentOS、RHEL、AlmaLinux、Rocky Linux,照样能用,别慌。
🤔 在开始之前,先花5分钟搞懂这些概念(不然你会哭)
我知道你很急,但你先别急,先搞懂这几个东西是干啥的,不然做到一半你会回来翻这一节的。
什么是LNMP?(装逼必备基础知识)
LNMP不是榴莲牛奶披萨,而是四个软件的缩写:
| 字母 | 全称 | 中文名 | 打个你能听懂的比方 |
|---|---|---|---|
| L | Linux | 操作系统 | 房子的地基和框架 |
| N | Nginx | 反向代理服务器 | 前台小哥,负责迎客 |
| M | MySQL/MariaDB | 数据库 | 仓库管理员,管货的 |
| P | PHP | 脚本语言 | 厨师,负责做饭 |
整个流程是这样的:
-
你在浏览器输入网址 → 就像你走到一家餐厅门口
-
Nginx(前台小哥)问:"您好几位?想吃点啥?"
-
如果需要做饭,小哥喊:"后厨,来个客!"
-
PHP(厨师)开始炒菜,需要食材就去问MySQL(仓库管理员)
-
PHP把炒好的菜(HTML页面)交给Nginx
-
Nginx把菜端给你(浏览器)
简单吧?就是这么回事。
为什么要把一台服务器拆成五台?(老板问起来你要会答)
刚开始你开了个小面馆,你一个人又当老板又当厨师又当服务员,忙得过来,后来生意火了,你一个人忙不过来了——客人等太久,面煮糊了,收银还找错钱。
这时候你就需要:
| 架构 | 啥意思 | 什么时候用 |
|---|---|---|
| 单机 | 一台服务器干所有活 | 日访问量<1000,比如你自己的博客 |
| 分布式 | 数据库一台、存储一台、Web好几台 | 日访问量>10000,比如公司官网 |
打个比方:
-
单机 = 你一个人开小面馆
-
分布式 = 你开了个连锁餐厅:有人专门和面、有人专门炒菜、有人专门收银、有人专门端盘子
一句话总结:单机是"一个人累死",分布式是"一群人一起干活,谁也不累"。
生产环境的三大"潜规则":
这几条是我踩过坑之后才明白的,你直接记住就行:
-
永远不要在白天搞事情
-
选凌晨3-5点,用户都在睡觉,你搞砸了也没人知道
-
双11、618这种日子,打死不能动
-
-
动手之前先备份,备份,备份
-
重要的事情说三遍
-
你以为"我就改一下没事的" → 然后你就出事了
-
-
先在测试环境玩一遍
-
就像你要上台表演,得先彩排吧?
-
别在正式服务器上直接试,那是找刺激
-
🎯 第一部分:单机部署——从一台空服务器到WordPress上线
场景:你有一台崭新的、啥也没有的服务器,要从零开始把它变成一台能跑WordPress的机器。
难度:⭐⭐(跟着敲就行,不需要动脑子)
步骤一:怎么连上服务器
你需要一个SSH工具,SSH就是安全的远程连接方式,简单来说就是让你能坐在家里操控远在机房的服务器。
推荐工具:
-
Windows:Xshell(好用但收费)、Putty(免费但丑)、Windows Terminal(微软官方,颜值高)
-
Mac/Linux:直接打开终端(Terminal)
连接命令(把IP换成你的服务器IP):
ssh root@123.45.67.89
然后输入密码。注意:输入密码的时候屏幕上啥也不显示,这是正常的,不是键盘坏了。
步骤二:先做两件"前戏"(别想歪)
连上服务器后,先做两个小事情,就像饭前洗手一样:
# 1. 更新软件包列表(就像去超市之前先看看有什么打折)
yum update -y
这个-y的意思是"别再问我了,我确定、一定以及肯定要更新",不用手动按Y。
# 2. 看看时间对不对
date
如果时间不对,执行:
timedatectl set-timezone Asia/Shanghai
为什么要调时间? 时间不对会有两个后果:
-
HTTPS证书会报错(浏览器说"这个网站不安全")
-
出问题了看日志,时间全乱了,你根本不知道先发生什么后发生什么
步骤三:防火墙——服务器的门卫大爷
防火墙就像小区门卫,控制谁能进来、从哪个门进来。
为了快速部署,我们先关掉防火墙(仅限内网环境):
systemctl stop firewalld # 门卫大爷下班了
systemctl disable firewalld # 以后也别来了
⚠️ 如果你的服务器有公网IP(谁都能访问),千万别关防火墙! 应该这样做:
# 给门卫大爷说:80号和443号门可以让客人进,其他门不行
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
# 看看哪些门开放了
firewall-cmd --list-ports
什么是端口? 把服务器想象成一栋大楼,端口就是不同的门:
-
80号门:专门给普通网页(HTTP)进出
-
443号门:专门给加密网页(HTTPS)进出
-
3306号门:专门给数据库(MySQL)进出,这个门保安把守很严
步骤四:安装Nginx——招聘前台小哥
Nginx就是前台接待员,所有客人来了先找他。
# 安装Nginx
yum install nginx -y
装完了得让他上班:
systemctl start nginx # 小哥,开始上班!
systemctl enable nginx # 以后服务器重启了,小哥也能自动来上班
systemctl status nginx # 看看小哥在不在工位上
验证一下:打开浏览器,输入你的服务器IP。如果看到"Welcome to nginx",恭喜你,前台小哥已经就位了!
步骤五:安装MySQL——招聘仓库管理员
MySQL(其实是MariaDB,它俩差不多,就像可口可乐和百事可乐)负责存数据:文章、用户、评论,全都归他管。
# 安装数据库
yum install mariadb mariadb-server -y
# 让仓管上班
systemctl start mariadb
systemctl enable mariadb
⚠️ 这一步很重要:给仓管定规矩(初始化数据库)
mysql_secure_installation
这个脚本会问你几个问题,我翻译成人话:
| 问题 | 人话翻译 | 该怎么回答 |
|---|---|---|
| Enter current password for root | 当前root密码是啥? | 刚装完没有密码,直接回车 |
| Set root password? | 要不要设置root密码? | 必须Y,然后输入一个你自己能记住但别人猜不到的密码 |
| Remove anonymous users? | 要不要删掉匿名用户? | Y,不能让陌生人随便进仓库 |
| Disallow root login remotely? | 禁止root远程登录? | Y,root权限太大,只能在本地用 |
| Remove test database? | 删掉测试数据库? | Y,留着没用还危险 |
| Reload privilege tables? | 重新加载权限表? | Y,让刚才的设置生效 |
什么是强密码? 至少12位,包含大小写字母+数字+符号。比如:MyWp@2024#Good,别用123456,那是把钥匙挂在门上。
步骤六:安装PHP——招聘厨师
WordPress是用PHP写的,所以需要一个PHP厨师来"炒菜"。
# 安装PHP和一堆扩展(扩展就是厨师的专用工具)
yum install php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-zip -y
这些扩展都是干什么的? 好比厨师的专用厨具:
| 扩展 | 厨具类比 | 没有它会怎样 |
|---|---|---|
| php | 厨师本人 | WordPress完全没法运行 |
| php-fpm | 厨师长,管理其他厨师 | Nginx不知道怎么找厨师 |
| php-mysqlnd | 去仓库拿货的小推车 | 连不上数据库,网站报错 |
| php-gd | 切菜刀 | 上传图片后做不出缩略图 |
| php-xml | 擀面杖 | RSS订阅、站点地图不能用 |
| php-mbstring | 能处理中文的菜谱 | 中文文章可能乱码 |
| php-json | 打包外卖的盒子 | 古腾堡编辑器会出问题 |
| php-zip | 保鲜膜 | 没法在线装插件和主题 |
# 看看厨师来了没
php -v
步骤七:让Nginx和PHP手拉手干活
Nginx自己不会执行PHP代码,他得把PHP相关的请求转交给PHP-FPM(厨师长)。
# 让厨师长上班
systemctl start php-fpm
systemctl enable php-fpm
配置Nginx,告诉前台小哥遇到PHP文件该找谁:
vim /etc/nginx/conf.d/wordpress.conf
把下面的内容贴进去,我会逐行进行解释的,不要害怕~:
# 这是一个"站点配置",告诉Nginx怎么处理这个网站
server {
# 监听80号门(HTTP端口)
listen 80;
# 这个网站绑定的域名(_表示"谁来都行")
# 如果你有真实域名,改成 server_name www.你的域名.com;
server_name _;
# 网站文件放在哪里(根目录)
root /var/www/html;
# 默认首页:用户访问目录时,优先找哪个文件
index index.php;
# 处理普通请求(比如 https://你的网站/about)
location / {
# 按顺序尝试找文件:
# $uri = 用户请求的路径
# $uri/ = 如果没文件,试试看是不是目录
# /index.php?$args = 都找不到,交给WordPress的入口文件处理
# 这行看不懂没关系,记住是WordPress的标准配置就行
try_files $uri $uri/ /index.php?$args;
}
# 处理PHP文件(比如 https://你的网站/wp-admin/admin-ajax.php)
location ~ \.php$ {
# 把PHP请求转发给PHP-FPM(厨师长)
# 127.0.0.1:9000 就是本机的9000号门
fastcgi_pass 127.0.0.1:9000;
# 默认首页文件
fastcgi_index index.php;
# 告诉PHP-FPM要执行哪个PHP文件
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 导入一堆标准配置(不用管,知道是标配就行)
include fastcgi_params;
}
}
保存退出后,检查一下有没有写错:
nginx -t
如果看到syntax is ok和test is successful,说明没问题。然后:
systemctl restart nginx # 让配置生效
步骤八:下载WordPress(把菜买回来)
# 进入网站根目录
cd /var/www/html
# 下载WordPress(中文版,看得懂)
wget https://cn.wordpress.org/latest-zh_CN.tar.gz
# 解压(把压缩包打开)
tar -xzf latest-zh_CN.tar.gz
# 把文件移到根目录
mv wordpress/* .
# 清理战场(删掉没用的)
rm -rf wordpress latest-zh_CN.tar.gz
⚠️ 设置权限(非常重要!不然后面会哭)
# 把所有文件的主人改成nginx用户
chown -R nginx:nginx /var/www/html
# 目录设置755权限(主人可以随便玩,别人只能看)
find /var/www/html -type d -exec chmod 755 {} \;
# 文件设置644权限(主人可以改,别人只能看)
find /var/www/html -type f -exec chmod 644 {} \;
为什么权限这么重要?
| 权限数字 | 啥意思 | 谁有这权限 |
|---|---|---|
| 7 (rwx) | 可以读、写、执行 | 主人(nginx用户) |
| 5 (r-x) | 可以读、执行,但不能写 | 主人的朋友(nginx组) |
| 4 (r--) | 只能读 | 其他人 |
如果权限不对,你会遇到这些问题:
-
上传图片失败 → "无法创建目录"
-
安装插件失败 → "无法写入文件"
-
更新失败 → "需要FTP凭证"
步骤九:创建数据库(给WordPress准备仓库)
# 登录数据库(输入之前设的root密码)
mysql -u root -p
进去之后,执行这些SQL(我会逐句解释):
-- 创建一个叫"wordpress"的数据库
-- utf8mb4是支持emoji的编码,比如😀这种表情
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 创建一个专门给WordPress用的用户(不让它用root,安全)
-- IDENTIFIED BY 后面换成你自己的密码
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY '你的强密码';
-- 授权:这个用户只能用wordpress数据库,别的地方不能去
GRANT ALL PRIVILEGES ON wordpress.* TO 'wp_user'@'localhost';
-- 让授权生效
FLUSH PRIVILEGES;
-- 退出
EXIT;
给你一个可以直接复制粘贴的版本(记得改密码):
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'Wp@2024#Good';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
步骤十:网页上完成安装(快成功了!)
-
打开浏览器,输入你的服务器IP(比如
http://123.45.67.89) -
选择语言:简体中文(应该不会有人选English吧)
-
填写数据库信息:
| 问题 | 答案 | 备注 |
|---|---|---|
| 数据库名 | wordpress | 就是刚才创建的 |
| 用户名 | wp_user | 刚才创建的用户 |
| 密码 | 你设的密码 | 别填错了 |
| 数据库主机 | localhost | 数据库和网站在一台机器上 |
| 表前缀 | wp_ | 默认就行,也可以改成别的 |
-
点击"提交" → 如果看到"现在开始安装",恭喜你成功了
-
填写站点信息:
| 问题 | 建议 |
|---|---|
| 站点标题 | 你网站的名字,随便起 |
| 用户名 | 管理员账号,别用admin(太容易被猜) |
| 密码 | 强密码!WordPress会帮你生成一个 |
| 电子邮件 | 你的邮箱,找回密码用 |
-
点击"安装WordPress" → 等几秒钟
-
登录后台:
http://你的IP/wp-admin
🎉 恭喜!你从0到1搭好了一个WordPress网站!
🚀 第二部分:从单机到分布式——人生苦短,我要搞大
场景:你的网站突然火了(可能是你写了一篇《如何优雅地吃泡面》),访问量暴涨,单机开始卡了,老板说:"小张,赶紧解决一下!"
解决方案:把一台服务器拆成5台!
难度:⭐⭐⭐⭐(需要集中注意力,但还是能跟上的)
架构全景图(看起来很唬人)

机器清单(你需要5台服务器)
| 角色 | IP地址 | 配置 | 干啥的 | 外号 |
|---|---|---|---|---|
| 负载均衡器 | 10.0.0.10 | 2核4G | 把请求分给下面三台 | "前台主管" |
| Web 01 | 10.0.0.7 | 4核8G | 处理网站请求 | "打工仔1号" |
| Web 02 | 10.0.0.8 | 4核8G | 处理网站请求 | "打工仔2号" |
| Web 03 | 10.0.0.9 | 4核8G | 处理网站请求 | "打工仔3号" |
| NFS存储 | 10.0.0.20 | 2核4G+大硬盘 | 放用户上传的图片 | "共享文件夹" |
| MySQL | 10.0.0.30 | 4核8G+SSD | 放文章和用户数据 | "大仓库" |
| Redis | 10.0.0.40 | 2核4G | 缓存 + 登录状态 | "便利贴" |
注意:这些IP是我编的,你要换成你服务器的真实IP。
迁移前必做:停服+备份(血的教训)
# 1. 停服!不让任何人写入新数据
systemctl stop nginx php-fpm
# 2. 备份数据库
mysqldump -uroot -p --all-databases | gzip > /tmp/all_dbs_$(date +%Y%m%d).sql.gz
# 3. 备份网站文件
tar -czf /tmp/wordpress_$(date +%Y%m%d).tar.gz /var/www/html/
# 4. 备份配置文件(万一搞错了还能恢复)
tar -czf /tmp/config_$(date +%Y%m%d).tar.gz /etc/nginx /etc/php-fpm.d /etc/my.cnf
第一步:数据库搬家(给仓库找个大房子)
1.1 在新数据库服务器上装MySQL
# SSH登录到10.0.0.30
ssh root@10.0.0.30
# 安装(和之前一样)
yum install mariadb mariadb-server -y
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation # 别忘了这个
1.2 把数据传过去
# 在旧服务器上执行(把备份传过去)
scp /tmp/all_dbs_*.sql.gz root@10.0.0.30:/root/
scp = Secure Copy,安全的复制文件,就像快递,把文件从一台服务器寄到另一台。
1.3 在新服务器上导入数据
# 在新数据库服务器上执行
gunzip < /root/all_dbs_*.sql.gz | mysql -uroot -p
# 创建一个WordPress专用用户(不让它用root)
mysql -uroot -p -e "CREATE USER 'wordpress'@'10.0.0.%' IDENTIFIED BY 'Wp@2024#Good';"
# 给这个用户授权
mysql -uroot -p -e "GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'10.0.0.%';"
# 刷新权限
mysql -uroot -p -e "FLUSH PRIVILEGES;"
注意:10.0.0.% 里的%是通配符,意思是"10.0.0.x网段的所有IP都能来连接"。
第二步:搭建Redis——买一沓便利贴
Redis是什么?就是个超快的便利贴系统,你把东西写在便利贴上,贴在冰箱上,下次要看直接看冰箱,不用去仓库翻箱倒柜。
Redis的两个作用:
-
缓存数据库查询:不用每次都去翻仓库,快很多。
-
共享登录状态:用户在三台打工仔机器上都能保持登录。
# SSH登录到10.0.0.40
ssh root@10.0.0.40
# 安装Redis
yum install redis -y
systemctl start redis
systemctl enable redis
配置Redis(很重要):
vim /etc/redis.conf
找到并修改这些配置:
# 原来:bind 127.0.0.1
# 改成:0.0.0.0(意思是"谁都能来,但必须带密码")
bind 0.0.0.0
# 设置密码(不加密码,你家的便利贴谁都能看)
requirepass Redis@2024#Good
# 限制最大内存(不给Redis吃光服务器)
maxmemory 512mb
# 内存满了就扔掉最不常用的东西
maxmemory-policy allkeys-lru
# 保存到硬盘(重启不丢数据)
appendonly yes
重启Redis:
systemctl restart redis
# 测试一下
redis-cli -h 127.0.0.1 -p 6379
> AUTH Redis@2024#Good
> PING
# 应该返回 PONG
> exit
第三步:搭建NFS——共享文件夹
问题来了:三台打工仔机器,用户上传的图片存在哪里?
如果存在Web01,用户在Web02访问就看不到图片。
解决方案:NFS(网络文件系统),就是一个共享文件夹,三台机器都能访问。
# SSH登录到10.0.0.20
ssh root@10.0.0.20
# 安装NFS
yum install nfs-utils -y
# 创建共享目录
mkdir -p /nfs/wordpress/uploads
# 设置权限
chown -R nginx:nginx /nfs/wordpress/uploads
配置NFS:
vim /etc/exports
添加这一行:
# 格式:共享目录 允许访问的网段(权限)
/nfs/wordpress/uploads 10.0.0.0/24(rw,sync,no_subtree_check,no_root_squash)
参数解释:
| 参数 | 人话意思 |
|---|---|
| rw | 可以读写(不能只读,不然没法上传图片) |
| sync | 直接写硬盘,不拖欠(安全第一) |
| no_subtree_check | 别管那么多子目录,越快越好 |
| no_root_squash | root用户的权限保留 |
启动NFS:
systemctl start nfs-server
systemctl enable nfs-server
第四步:在打工仔机器上挂载NFS
每台Web服务器都要做:
# 安装NFS客户端
yum install nfs-utils -y
# 创建挂载点
mkdir -p /var/www/html/wp-content/uploads
# 挂载
mount -t nfs 10.0.0.20:/nfs/wordpress/uploads /var/www/html/wp-content/uploads
# 验证(看看有没有挂载成功)
df -h | grep nfs
设置开机自动挂载:
echo "10.0.0.20:/nfs/wordpress/uploads /var/www/html/wp-content/uploads nfs defaults,_netdev 0 0" >> /etc/fstab
第五步:配置三台打工仔机器
每台Web服务器都得装环境:
yum install nginx php php-fpm php-mysqlnd php-redis php-gd php-xml php-mbstring -y
systemctl start nginx php-fpm
systemctl enable nginx php-fpm
把WordPress代码传过去:
# 在旧服务器打包
tar -czf /tmp/wordpress_code.tar.gz -C /var/www/html .
# 传到三台机器
scp /tmp/wordpress_code.tar.gz root@10.0.0.7:/tmp/
scp /tmp/wordpress_code.tar.gz root@10.0.0.8:/tmp/
scp /tmp/wordpress_code.tar.gz root@10.0.0.9:/tmp/
# 解压(每台都要)
ssh root@10.0.0.7 "tar -xzf /tmp/wordpress_code.tar.gz -C /var/www/html/"
最关键的一步:修改wp-config.php
vim /var/www/html/wp-config.php
改成这样(三台机器要一模一样):
<?php
// ========== 数据库配置(指向大仓库)==========
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', 'Wp@2024#Good');
define('DB_HOST', '10.0.0.30'); // 数据库服务器IP
// ========== Redis配置(指向便利贴)==========
define('WP_REDIS_HOST', '10.0.0.40');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'Redis@2024#Good');
define('WP_REDIS_DATABASE', 0);
// ========== 密钥(去这里拿:https://api.wordpress.org/secret-key/1.1/salt/)==========
// 三台机器必须一样!!!
define('AUTH_KEY', '把你从上面链接拿到的字符串贴这里');
define('SECURE_AUTH_KEY', '把你从上面链接拿到的字符串贴这里');
define('LOGGED_IN_KEY', '把你从上面链接拿到的字符串贴这里');
define('NONCE_KEY', '把你从上面链接拿到的字符串贴这里');
define('AUTH_SALT', '把你从上面链接拿到的字符串贴这里');
define('SECURE_AUTH_SALT', '把你从上面链接拿到的字符串贴这里');
define('LOGGED_IN_SALT', '把你从上面链接拿到的字符串贴这里');
define('NONCE_SALT', '把你从上面链接拿到的字符串贴这里');
// ===========================================
$table_prefix = 'wp_';
define('WP_DEBUG', false);
require_once(ABSPATH . 'wp-settings.php');
第六步:配置负载均衡器(前台主管)
# SSH登录到10.0.0.10
ssh root@10.0.0.10
# 安装Nginx
yum install nginx -y
systemctl start nginx
systemctl enable nginx
编写负载均衡配置:
vim /etc/nginx/conf.d/load-balancer.conf
# 定义打工仔小组
upstream wordpress_backend {
# 最少连接数算法(谁闲着就分配给谁)
least_conn;
# 三台打工仔机器
server 10.0.0.7:80 max_fails=3 fail_timeout=30s;
server 10.0.0.8:80 max_fails=3 fail_timeout=30s;
server 10.0.0.9:80 max_fails=3 fail_timeout=30s;
# 黏性cookie:让同一个用户总是去同一台机器
sticky cookie srv_id expires=1h domain=.你的域名.com;
}
server {
listen 80;
server_name 你的域名.com;
location / {
# 转发给打工仔小组
proxy_pass http://wordpress_backend;
# 保留客户信息(重要!)
proxy_set_header Host $host; # 客户访问的域名
proxy_set_header X-Real-IP $remote_addr; # 客户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 经过的代理链
proxy_set_header X-Forwarded-Proto $scheme; # http还是https
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
nginx -t
systemctl restart nginx
第七步:把旧图片搬到NFS
# 在旧服务器打包
tar -cf /tmp/uploads_backup.tar /var/www/html/wp-content/uploads/
# 传到NFS服务器
scp /tmp/uploads_backup.tar root@10.0.0.20:/tmp/
# 在NFS服务器解压
ssh root@10.0.0.20 "tar -xf /tmp/uploads_backup.tar -C /nfs/wordpress/uploads/ --strip-components=5"
# 设置权限
ssh root@10.0.0.20 "chown -R nginx:nginx /nfs/wordpress/uploads"
第八步:装Redis插件
登录WordPress后台(现在通过负载均衡器的IP访问):
-
插件 → 安装新插件
-
搜索 "Redis Object Cache"
-
安装 → 启用
-
设置 → Redis → Enable Object Cache
第九步:验证(别急着庆祝,先检查)
验证清单:
# 1. 数据库
mysql -h 10.0.0.30 -u wordpress -p -e "SELECT 1"
# 2. NFS
echo "test" > /var/www/html/wp-content/uploads/test.txt
# 去另一台Web服务器看:cat /var/www/html/wp-content/uploads/test.txt
# 3. Redis
redis-cli -h 10.0.0.40 -a Redis@2024#Good PING
# 返回 PONG
# 4. 打开浏览器访问 http://10.0.0.10
# 能打开就成功了!
第十步:切换DNS
一切正常后,把域名解析改成负载均衡器的IP(10.0.0.10)。
等DNS生效(可能几分钟到几小时),你的分布式WordPress就正式上线了!
🔧 常见翻车现场
Q1:麒麟V10离线环境怎么装软件?
# 挂载ISO镜像
mount -o loop Kylin-Server-V10.iso /mnt
# 创建本地源
cat > /etc/yum.repos.d/local.repo << EOF
[local]
name=Local Repository
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
# 刷新并安装
yum clean all
yum makecache
yum install nginx -y
Q2:图片裂了,显示不出来?
症状:网页上有文字,但图片位置是个裂开的图标。
抢救:
mount | grep nfs # 看看NFS挂载了没
ls -la /var/www/html/wp-content/uploads/ # 看权限
showmount -e 10.0.0.20 # 看NFS服务器共享了啥
Q3:登录后刷一下就掉线了?
症状:刚登录进后台,刷新一下,又让你登录。
可能原因:Redis没干活。
抢救:
redis-cli -h 10.0.0.40 -a Redis@2024#Good PING # 能通吗
php -m | grep redis # PHP Redis扩展装了没
grep WP_REDIS /var/www/html/wp-config.php # 配置写对了吗
Q4:502 Bad Gateway?
症状:白屏,写着"502 Bad Gateway"。
翻译:前台小哥(Nginx)找了半天找不到厨师(PHP-FPM)。
抢救:
systemctl status php-fpm # 厨师在不在
systemctl restart php-fpm # 把厨师叫醒
Q5:数据库连不上?
症状:"Error establishing a database connection"
抢救:
systemctl status mariadb # 数据库活着吗
netstat -tlnp | grep 3306 # 端口开了吗
telnet 10.0.0.30 3306 # 网络通吗
mysql -h 10.0.0.30 -u wordpress -p -e "SELECT 1" # 用户密码对吗
📋 上线前的"灵魂拷问"清单
-
数据库能连上吗?(试过了没)
-
三台Web的wp-config.php一样吗?(不一样会死得很惨)
-
NFS挂载好了吗?(新上传的图片另一台能看到吗)
-
Redis里有session吗?(
redis-cli KEYS "*session*") -
通过负载均衡器能访问吗?(直接IP能打开吗)
-
登录后刷新不掉线吗?(用浏览器试过了没)
-
服务器重启后服务能自动起来吗?(
reboot一下试试?)
🔄 万一翻车了怎么办?(回滚方案)
啥都别说了,直接切回旧服务器:
# 1. 停掉负载均衡器
ssh root@10.0.0.10 "systemctl stop nginx"
# 2. 启动旧服务器
ssh root@旧服务器IP "systemctl start nginx mariadb php-fpm"
# 3. 把域名解析改回旧服务器IP
等用户那边缓存的DNS更新了,就都恢复正常了。
🎁 彩蛋:一些让你少熬夜的技巧
-
永远开启错误日志
error_log /var/log/nginx/error.log debug;出问题了看日志,别自己瞎猜。
-
配置好了先测试再上线
nginx -t # 检查配置有没有写错 -
备份!备份!备份!重要的事情说三遍,一个月备份一次也好过没有备份。
-
改配置之前先备份原文件
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.$(date +%Y%m%d)改坏了可以快速恢复。
最后送你三句话:
-
服务器出问题了不要慌,日志会告诉你答案。
-
生产环境操作,能不动就不动,非动不可就备份。
-
免费的才是最贵的(指熬夜排障的时间)。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)