运维复盘:WordPress 事故恢复与架构升级实战记录

  1. 事故背景
    现状:服务器上有运行中的 WordPress 和 MySQL 8.0 容器。

问题:/root/wordpress-app/ 目录下的 docker-compose.yml 丢失,导致无法对现有容器进行升级、维护或修改。

需求:

100% 还原配置文件。

解决站点健康中提示的“页面缓存”性能问题。

提升安全性(更换默认/已知密码)。

  1. 阶段一:逆向工程——找回配置
    由于容器还在运行,我们通过 Docker 内部信息反推配置。

找回密码:通过 docker inspect wordpress_app | grep WORDPRESS_DB_PASSWORD 获取了连接密码。

定位数据卷:通过 docker inspect 确认了数据卷名为 wordpress-app_wp_data 和 wordpress-app_db_data。

重构 YAML:

关键点:在 volumes 部分必须标记 external: true。这告诉 Docker:“卷已经存在了,直接挂载就好,千万别给我创建新的空卷”,否则数据会丢失。

  1. 阶段二:性能飞跃——引入双层缓存
    为了解决 WordPress 提示的“页面缓存”告警,我们实施了架构升级。

架构图示
操作步骤
修改配置:在 docker-compose.yml 中新增 redis 服务。

配置注入:在 WordPress 环境变量中加入 WORDPRESS_CONFIG_EXTRA,自动将 Redis 链接信息写入 wp-config.php。

应用变更:执行 docker compose up -d。此时 WordPress 容器被“Recreated”(重建),但由于数据卷是外部挂载的,文章和图片毫发无损。

插件激活:

WP Super Cache:实现页面级静态化(解决站点健康告警)。

Redis Object Cache:实现数据库查询缓存(提升后台操作速度)。

  1. 阶段三:安全加固——修改数据库密码
    修改已运行中的 MySQL 密码不能只改配置文件,必须遵循“锁钥匙同步”原则。

关键流程:
手动换锁:进入容器内部修改 MySQL 用户表。

Bash

docker exec -it wordpress_db mysql -u root -p旧密码
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘新密码’;
FLUSH PRIVILEGES;
同步钥匙:将 docker-compose.yml 中的两处密码同步修改为新密码。

重启生效:执行 docker compose up -d,让 WordPress 带着新钥匙重新连接数据库。

  1. 核心:最终版生产环境 docker-compose.yml
    YAML

name: wordpress-app

services:
db:
image: mysql:8.0
container_name: wordpress_db
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: “你的新密码”
volumes:
– wordpress-app_db_data:/var/lib/mysql

redis:
image: redis:6-alpine
container_name: wordpress_redis
restart: always

wordpress:
image: wordpress:latest
container_name: wordpress_app
restart: always
ports:
– “8080:80”
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: “你的新密码”
WORDPRESS_CONFIG_EXTRA: |
define( ‘WP_REDIS_HOST’, ‘redis’ );
define( ‘WP_REDIS_PORT’, 6379 );
volumes:
– wordpress-app_wp_data:/var/www/html
depends_on:
– db
– redis

volumes:
wordpress-app_wp_data:
external: true
wordpress-app_db_data:
external: true

  1. 经验与教训 (Best Practices)
    配置文件是灵魂:一定要备份 docker-compose.yml 到云端或 Git。

External 是护身符:只要使用了外部卷(External Volumes),容器随便怎么删,数据永远在宿主机磁盘上。

缓存是刚需:对于 WordPress,WP Super Cache + Redis 是标配,能极大延长服务器寿命。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理