Featured image of post WordPress 博客快速部署:官方镜像 + 数据持久化 + 反向代理

WordPress 博客快速部署:官方镜像 + 数据持久化 + 反向代理

WordPress 官方容器化部署、数据卷持久化、Nginx 反代、HTTPS 终结、备份策略

WordPress 是全球最流行的内容管理系统,官方市场份额常年第一(全球网站 40%+ 跑 WordPress)。虽然静态博客(Hugo/Jekyll)现在很火,但 WordPress 的"开箱即用 + 插件生态 + 后台可视化编辑"对新人和企业站仍是首选。这篇文章讲清楚 WordPress 官方镜像容器化部署、数据持久化、Nginx 反代、备份策略。

阅读对象:想用 WordPress 快速搭博客/企业站、又不想 LAMP 手工搭环境的同学
覆盖范围:WordPress 容器化部署、数据卷持久化、Nginx 反代、HTTPS、备份

一、为什么是 WordPress(容器化)

传统 LAMP 部署 WordPress:

  • 装 Apache/Nginx + PHP + MySQL
  • 配置 PHP-FPM / 虚拟主机
  • 改 wp-config.php 数据库连接
  • 装主题、插件、调权限

每台新机器都要重新走一遍。容器化的好处:

  • 一致性:开发、测试、生产用同一镜像
  • 可移植:服务器迁移只需打包数据卷
  • 升级简单docker pull wordpress:latest 一行就升级
  • 隔离:和宿主机其他服务不冲突

When to use:需要"内容运营"团队(不熟技术)自己发文章、装插件,WordPress 是首选。如果只是写技术博客,Hugo / Jekyll 等静态博客更省心。

二、容器化部署

2.1 最简启动(SQLite 数据)

1
2
3
docker run -d --restart=always --name wordpress -p 8864:80 \
  -v /home/project/wordpress/data:/var/www/html \
  wordpress

数据卷 /var/www/html:WordPress 全部文件(核心代码 + 上传的媒体 + 主题插件)。挂出来才能持久化。

访问 http://{{HOST}}:8864 进入 WordPress 安装向导。

2.2 配合 MySQL 部署(推荐生产)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: "3"
services:
  mysql:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: {{REDACTED}}
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: {{REDACTED}}
    volumes:
      - mysql_data:/var/lib/mysql
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  wordpress:
    image: wordpress:latest
    restart: always
    depends_on:
      - mysql
    ports:
      - 8864:80
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: {{REDACTED}}
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp_data:/var/www/html

volumes:
  mysql_data:
  wp_data:

utf8mb4:MySQL 5.7+ / 8.0 必须用 utf8mb4 字符集,emoji 和中文才不乱码。 depends_on:等 MySQL 起来再启 WordPress(但只保证容器启动顺序,不等 MySQL 完全就绪——WordPress 启动时会重试连接)。

2.3 初始账号

WordPress 安装向导里设置:

  • 站点标题
  • 管理员用户名 / 密码(不要admin
  • 管理员邮箱

生产环境必改

  • 用户名不要用 admin(机器人会暴力破解)
  • 密码 16+ 位,大小写+数字+符号
  • 邮箱用企业域名(找回密码用)

三、Nginx 反代 + HTTPS

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
server {
    listen 80;
    server_name blog.example.com;

    # HTTP 跳 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name blog.example.com;

    ssl_certificate     /www/cert/blog.example.com/fullchain.pem;
    ssl_certificate_key /www/cert/blog.example.com/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;

    # WordPress 上传文件可能很大
    client_max_body_size 100m;

    location / {
        proxy_pass http://127.0.0.1:8864;
        proxy_set_header Host              $http_host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WordPress 永久链接(pretty permalinks)需要
        try_files $uri $uri/ /index.php?$args;
    }

    # 静态资源直接走 Nginx(性能优化)
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        proxy_pass http://127.0.0.1:8864;
        proxy_cache_valid 200 30d;
        expires 30d;
    }
}

try_files 关键:WordPress 用"文章名"做 URL(如 /2019/03/hello-world/),Nginx 必须 fallback 到 index.php,否则 404。 client_max_body_size:WordPress 上传主题/插件可能 50MB+,默认 1M 会 413。

四、WordPress 后台必备设置

4.1 永久链接

Settings → Permalinks → Post name/%postname%/)。别用默认的 ?p=123,SEO 友好需要路径式 URL。

4.2 媒体上传大小

  • Nginx:client_max_body_size 100m(如上)
  • PHP:容器内 php.iniwp-config.php 加:
    1
    2
    
    @ini_set('upload_max_size', '100M');
    @ini_set('post_max_size', '100M');
    

4.3 安全加固

  • 改默认管理员用户名(不要 admin
  • 强密码 + 二次验证(Google Authenticator 插件)
  • 限制登录失败次数(Limit Login Attempts Reloaded 插件)
  • 关闭文件编辑(wp-config.phpdefine('DISALLOW_FILE_EDIT', true);
  • 隐藏 WordPress 版本号(很多 security 插件有这个功能)

4.4 推荐插件

类别插件用途
SEOYoast SEO / Rank Math元信息、sitemap、社交分享
缓存WP Super Cache / W3 Total Cache静态化提速
安全Wordfence / SucuriWAF、登录保护、扫描
备份UpdraftPlus / BackWPup自动备份到 OSS/S3
主题Astra / GeneratePress轻量、快、自定义强
编辑器Classic Editor / Gutenberg编辑器选择

五、备份策略

5.1 备份什么

  • 数据库mysqldump):所有文章、用户、配置
  • 数据卷wp_data):主题、插件、上传的媒体
  • wp-config.php:数据库连接等关键配置

5.2 备份脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/bash
# backup-wordpress.sh
BACKUP_DIR=/backup/wordpress/$(date +%Y%m%d)
mkdir -p $BACKUP_DIR

# 数据库
docker exec mysql_container mysqldump -u wordpress -p{{REDACTED}} wordpress \
  | gzip > $BACKUP_DIR/db.sql.gz

# 数据卷
docker run --rm \
  -v wp_data:/data:ro \
  -v $BACKUP_DIR:/backup \
  alpine tar czf /backup/wp_data.tar.gz /data

echo "Backup done: $BACKUP_DIR"

生产环境:备份同步到 OSS / S3 / 异地机房,本地磁盘挂了不能恢复等于没备份

六、踩坑清单

  1. 上传 413——client_max_body_size 没调,或 PHP upload_max_filesize 太小
  2. 固定链接 404——Nginx try_files 没配,或者 .htaccess 没生效
  3. 中文乱码——MySQL 没用 utf8mb4 字符集,老库是 latin1
  4. 主题/插件升级失败——wp_data 没挂出来,容器升级后回到默认状态
  5. wp-admin 卡顿——没接 CDN/缓存,每次请求都打 WordPress
  6. 被刷登录——没装限流插件,admin 用户名太简单被暴力破解

七、2024+ 视角补充

本文写于 2019-03,2024-2026 这几年 WordPress 生态有显著变化:

WordPress 6.x 核心更新

  • 6.0-6.6(2022-2024)逐步把经典编辑器过渡到全站编辑(Full Site Editing, FSE)+ 块主题(Block Theme),传统 PHP 主题(如 Twenty 系列)模式正在被"块"取代
  • 6.5+ 引入站点字体加载 API(Site Fonts API),前端字体管理不再靠主题 hack
  • 6.6(2024-07)性能大幅提升:首屏 LCP 优化、字体切换不闪屏、插件加载顺序调优

PHP 版本要求:WordPress 6.5+ 最低要求 PHP 7.4强烈推荐 8.2+(性能提升 30%+)。wordpress:6-php8.3-apache 是 2024+ 生产推荐 tag。

容器化最佳实践更新

  • 官方镜像 wordpress 2024 年起改用 PHP 8.x + Apache 默认 tag,wordpress:latest 实际跑的是 6.6.x + PHP 8.3。旧的 wordpress:5-apache 还可拉但不收安全补丁
  • 多阶段构建:2024 年生产推荐用 FROM wordpress:6-php8.3-apache + 自定义 wp-content 主题/插件做多阶段,把不可变基础设施原则贯彻
  • 持久化命名约定:从 2019 年的 wp_data 卷,到 2024 年推荐 wp-contentwp-uploads 拆成独立卷——主题/插件更新不影响上传文件

Headless WordPress / WPGraphQL: 2023+ 越来越多团队把 WordPress 当 CMS-only 用(只走 WPGraphQL / REST API 输出 JSON),前端用 Next.js / Nuxt 渲染。好处:复用 WordPress 的后台编辑体验,前端享受现代 SPA/SSG 性能。WPGraphQL 插件 1.16+ 稳定。

反代 / HTTPS 实践变化

  • 2023 年起 certbot 推荐用 snap 或 docker 化部署(不再 apt install
  • Caddy 替代 Nginx 越来越流行:自动 HTTPS(Let’s Encrypt 自动续期)、Caddyfile 配置比 nginx.conf 简洁 50%
  • WordPress 6.5+ 自带 application passwords 替代传统 API token,更安全

现代化插件栈(2024 推荐)

类别旧推荐2024+ 推荐
缓存WP Super CacheWP Rocket(付费)或 LiteSpeed Cache(免费且强)
安全WordfenceSolid Security(原 iThemes)
SEOYoast SEORank Math(免费 + 高级功能)
静态化W3 Total CacheSimply Static(生成纯静态站点)
表单Contact Form 7WPForms / Fluent Forms

经验法则更新:内容运营团队 + 简单站点 → WordPress 6.6 + PHP 8.3 + MariaDB 11 + LiteSpeed Cache;纯写技术博客 → Hugo / Astro 仍是更省心选择;API 化集成业务 → Headless WordPress + Next.js

八、参考资料

  • WordPress 官方文档:https://wordpress.org/support/
  • WordPress 6.6 发布说明:https://wordpress.org/news/2024/07/
  • Docker Hub WordPress:https://hub.docker.com/_/wordpress
  • WordPress 永久链接:https://wordpress.org/support/article/using-permalinks/
  • WPGraphQL:https://www.wpgraphql.com/
  • 安全白皮书:https://wordpress.org/about/security/

下一步

使用 Hugo 构建
主题 StackJimmy 设计