WordPress 建站实战 1️⃣:基于 Docker + Nginx + Redis + Cloudflare 搭建高性能专属博客

导语:搭建一个属于自己的独立博客,是很多技术人探索互联网与记录思考的起点。然而,传统的 LAMP/LNMP 裸机安装往往面临依赖冲突、环境迁移繁琐以及性能瓶颈等痛点。本文将带大家通过 Docker 容器化全家桶,配合 Redis 内存对象缓存、Nginx 高性能反代 以及 Cloudflare SSL/TLS 完全(严格)加密,一步步从零构建一套安全、丝滑且易于迁移的现代化 WordPress 站点。


一、 技术架构全景图

在敲击命令行前,我们先建立起整套系统的架构认知。为什么选择这套“组合拳”?

┌─────────────────┐       HTTPS 加密流量       ┌────────────────────────┐
│   访客浏览器     │ ────────────────────────> │  Cloudflare CDN 边缘    │
└─────────────────┘                           └───────────┬────────────┘
                                                          │ SSL Full Strict 回源
                                                          ▼
                                              ┌────────────────────────┐
                                              │   Nginx 反代容器 (:443) │
                                              └───────────┬────────────┘
                                                          │ 反向代理转发
                                                          ▼
                                              ┌────────────────────────┐
                                              │  WordPress 核心 (:80)   │
                                              └─────┬────────────┬─────┘
                                                    │            │
                                 MySQL 数据持久化    │            │ 页面 / 查询高速缓存
                                                    ▼            ▼
                                            ┌───────────┐    ┌───────────┐
                                            │ MySQL 5.7 │    │   Redis   │
                                            └───────────┘    └───────────┘
  • WordPress 核心:负责文章呈现与内容管理。
  • MySQL 5.7:轻量稳定的数据底座。
  • Redis:充当 WordPress 的对象缓存层,将常用的 SQL 查询与页面元数据常驻内存,博客页面实现秒级开箱。
  • Nginx 反代:充当源站第一道门面,终结 SSL、处理大文件上传、支持 HTTP/2。
  • Cloudflare Origin CA:借助 Cloudflare 提供的 15 年超长免费源站证书,与 CDN 构成端到端 Full (Strict) 高强度加密保护。

二、 准备工作:标准化目录结构

良好的目录规整习惯是日后优雅维护的基础。登录你的 VPS 终端,在主目录下创建项目专用文件夹:

mkdir -p ~/wordpress/ssl
cd ~/wordpress

我们整套站点的标准化目录结构规划如下:

wordpress/
├── docker-compose.yml   # 容器编排主控清单
├── nginx.conf           # Nginx 前端反代配置
├── uploads.ini          # PHP 上传大小与执行耗时微调
└── ssl/                 # Cloudflare 专属证书存放目录
    ├── cert.pem         # 源站证书 (Origin Certificate)
    └── key.pem          # 证书私钥 (Private Key)

三、 第一步:申请 Cloudflare 15 年免费源站证书

很多朋友建站习惯使用 Let’s Encrypt 证书,但需要每 3 个月做一次续签维护。既然我们的站点托管在 Cloudflare 后,直接使用官方提供的 Origin Server(源站证书) 才是最优解——一次生成,长达 15 年免维护!

操作流程:

  1. 打开并登录 Cloudflare 控制台,进入你的域名管理页。
  2. 在左侧菜单中展开 【SSL/TLS】,点击 【源服务器 (Origin Server)】。
  3. 点击 【创建证书 (Create Certificate)】。
  4. 保持参数默认即可:
    • 密钥类型 (Key type):RSA (2048)
    • 主机名列表 (Hostnames):包含你的主域名与泛子域名(如 blog.example.com 或 *.example.com)
    • 有效期 (Validity):15 年 (15 years)
  5. 点击右下角 【创建】,页面将展示两段文本:
    • 将 源证书 (Origin Certificate) 文本完整复制,保存为服务器上的 ~/wordpress/ssl/cert.pem。
    • 将 私钥 (Private Key) 文本完整复制,保存为服务器上的 ~/wordpress/ssl/key.pem。
  6. 最后,回到 Cloudflare 的 【SSL/TLS】 -> 【概述】,将加密模式切换为 【完全(严格)/ Full (strict)】。

⚠️ 注意:私钥离开此页面后将无法再次查看,请务必妥善保存。


四、 第二步:编写容器编排配置(docker-compose.yml)

在 ~/wordpress 目录下创建 docker-compose.yml,通过此文件统一管理数据库、缓存、PHP 核心及前端代理四个容器。

services:
  # 1. 关系型数据库底座
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_password      # 请替换为你自定义的 root 密码
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: your_wordpress_password      # 请替换为你自定义的普通用户密码
    volumes:
      - ./db_data:/var/lib/mysql

  # 2. Redis 内存缓存加速器
  redis:
    image: redis:latest
    restart: always
    command: >
      redis-server 
      --appendonly yes 
      --requirepass your_redis_password 
      --maxmemory 512mb 
      --maxmemory-policy allkeys-lru
    ports:
      - "6379"
    volumes:
      - ./redis_data:/data
      - /etc/timezone:/etc/timezone:ro

  # 3. WordPress 核心应用容器
  wordpress:
    image: wordpress:latest
    restart: always
    depends_on:
      - db
      - redis
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: your_wordpress_password
      WORDPRESS_CONFIG_EXTRA: |
        /* Redis 核心缓存调优参数 */
        define('WP_REDIS_HOST', 'redis');
        define('WP_REDIS_PORT', '6379');
        define('WP_REDIS_PASSWORD', 'your_redis_password');
        define('WP_CACHE_KEY_SALT', 'your_salt_key');
        define('WP_CACHE', true);
      REDIS_HOST: redis
    volumes:
      - ./wp_content:/var/www/html/wp-content
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

  # 4. 前端 Nginx 网关
  nginx:
    image: nginx:latest
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/nginx/ssl:ro
    depends_on:
      - wordpress

五、 第三步:破解大文件上传瓶颈(uploads.ini)

WordPress 原生默认的 PHP 文件上传上限通常只有惨淡的 2MB,无论是传主题包还是大尺寸封面图,常常会触发令人头疼的 413 Request Entity Too Large 或“上传超时”错误。

在 ~/wordpress 目录下创建 uploads.ini,一举消除上传限制:

file_uploads = On
memory_limit = 256M
upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 300
max_input_time = 300

六、 第四步:Nginx 反向代理配置(nginx.conf)

作为直面外部流量的第一线,Nginx 负责加载 Cloudflare 源站证书,并透传真实的访问协议头。在 ~/wordpress 目录下创建 nginx.conf:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log combined;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    # 与 uploads.ini 保持一致,防止 Nginx 层拦截大附件
    client_max_body_size 128M;

    server {
        listen 443 ssl http2;
        server_name blog.example.com; # 替换为您自己的真实域名

        # 挂载的 Cloudflare 15 年证书
        ssl_certificate /etc/nginx/ssl/cert.pem;
        ssl_certificate_key /etc/nginx/ssl/key.pem;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;

        location / {
            proxy_pass http://wordpress:80;

            # 透传标准反代标头(防止 WordPress 陷入 301 重定向)
            proxy_set_header Host $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;

            # 延长反代超时,避免上传耗时任务中断
            proxy_connect_timeout 300;
            proxy_send_timeout 300;
            proxy_read_timeout 300;
            send_timeout 300;
        }
    }

    # HTTP 80 端口自动重定向到 HTTPS
    server {
        listen 80;
        server_name blog.example.com;
        return 301 https://$host$request_uri;
    }
}

七、 第五步:一键拉起与后台配置

所有配置文件就绪后,只需在 ~/wordpress 目录下执行启动命令:

docker compose up -d

等待容器镜像拉取并提示所有服务状态为 Started 后,打开浏览器访问你的专属域名:https://blog.example.com,便会看到熟悉的 WordPress 经典安装引导向导!

开启 Redis 极速对象缓存:

站点初始化完成后,我们只需最后一步点亮 Redis 缓存引擎:

  1. 登录 WordPress 管理后台。
  2. 依次点击:【插件】 -> 【安装插件】。
  3. 搜索关键词:Redis Object Cache。
  4. 点击 【现在安装】,安装完成后点击 【启用】。
  5. 进入后台左侧:【设置】 -> 【Redis】,点击醒目的 【Enable Object Cache】 按钮。

当看到界面显示 Status: Connected,客户端显示亮绿色的连接状态时,恭喜你——你的专属高性能博客已全面落成!此时无论是高并发访问还是日常后台操作,都能获得丝般顺滑的流畅体验 🚀。

上一篇 Docker 安装部署指南:Linux 服务器极速上手与环境配置实录
下一篇 WordPress 建站实战 2️⃣:基于 Docker + Nginx Proxy Manager 打造解耦型高性能博客
目录
keiomn

keiomn管理员

这个人很懒,什么都没有留下。

本月创作热力图

少
多