导语:搭建一个属于自己的独立博客,是很多技术人探索互联网与记录思考的起点。然而,传统的 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 年免维护!
操作流程:
- 打开并登录 Cloudflare 控制台,进入你的域名管理页。
- 在左侧菜单中展开 【SSL/TLS】,点击 【源服务器 (Origin Server)】。
- 点击 【创建证书 (Create Certificate)】。
- 保持参数默认即可:
- 密钥类型 (Key type):
RSA (2048) - 主机名列表 (Hostnames):包含你的主域名与泛子域名(如
blog.example.com或*.example.com) - 有效期 (Validity):
15 年 (15 years)
- 密钥类型 (Key type):
- 点击右下角 【创建】,页面将展示两段文本:
- 将 源证书 (Origin Certificate) 文本完整复制,保存为服务器上的
~/wordpress/ssl/cert.pem。 - 将 私钥 (Private Key) 文本完整复制,保存为服务器上的
~/wordpress/ssl/key.pem。
- 将 源证书 (Origin Certificate) 文本完整复制,保存为服务器上的
- 最后,回到 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 缓存引擎:
- 登录 WordPress 管理后台。
- 依次点击:【插件】 -> 【安装插件】。
- 搜索关键词:
Redis Object Cache。 - 点击 【现在安装】,安装完成后点击 【启用】。
- 进入后台左侧:【设置】 -> 【Redis】,点击醒目的 【Enable Object Cache】 按钮。
当看到界面显示 Status: Connected,客户端显示亮绿色的连接状态时,恭喜你——你的专属高性能博客已全面落成!此时无论是高并发访问还是日常后台操作,都能获得丝般顺滑的流畅体验 🚀。