这是一份基于云服务器实操验证的个人独立博客部署指南。方案采用 Docker Compose 实现组件隔离,通过 Nginx 统一代理并配置自动化 HTTPS 证书,兼顾了极高的稳定性和后期的免维护性。
核心架构概览
- 服务器OS: Ubuntu 22.04 LTS
- 部署环境: Docker + Docker Compose
- 核心组件: Nginx (反向代理) + WordPress (博客引擎) + MySQL 8.0 (数据库)
- 安全加密: Let’s Encrypt 免费自动续期 HTTPS 证书
阶段一:基础设施准备
- 配置云端防火墙 登录云服务商控制台,找到服务器的“防火墙”或“安全组”设置,务必添加规则放行 TCP 80 (HTTP) 和 TCP 443 (HTTPS) 端口。这是后续 Nginx 代理和申请证书的前提。
- 域名解析 (DNS) 在域名注册商后台,添加两条 A 记录(主机记录分别为
@和www),记录值填入云服务器的 公网 IP。等待生效即可。 - 优化底层拉取速度(国内机房必选) 如果你使用的是国内云服务器,建议配置云厂商的内网 Docker 镜像源(以提升
docker pull速度及稳定性),并将默认编辑器设置为完整版 Vim (/usr/bin/vim.basic)。
阶段二:目录规划与服务配置
在服务器中创建统一的博客数据卷目录,便于后期整体打包备份。
sudo mkdir -p /opt/blog-stack/{nginx/conf.d,mysql_data,html,certbot/www,certbot/conf}
cd /opt/blog-stack
1. 编写容器编排配置 (docker-compose.yml)
在 /opt/blog-stack 目录下创建 docker-compose.yml,定义我们的三大核心服务(数据库、WordPress主体、Nginx网关)。注意替换文件中的数据库密码。
services:
db:
image: mysql:8.0
container_name: blog_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_secure_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: your_secure_wp_password
volumes:
- ./mysql_data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
wordpress:
image: wordpress:latest
container_name: blog_wordpress
restart: always
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: your_secure_wp_password
WORDPRESS_DB_NAME: wordpress
volumes:
- ./html:/var/www/html
nginx:
image: nginx:alpine
container_name: blog_nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./html:/var/www/html
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
depends_on:
- wordpress
2. 编写 Nginx 初始配置
为了让 Let’s Encrypt 能够通过 80 端口验证域名所有权,需先配置一份仅包含 80 端口转发的初始规则。
创建并编辑 nginx/conf.d/default.conf:
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
# 用于 Let's Encrypt 证书验证的临时目录映射
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
# 将其他请求反向代理到 WordPress
location / {
proxy_pass http://wordpress:80;
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;
}
}
启动基础服务:
sudo docker compose up -d
阶段三:加密加固与服务上线
1. 申请 HTTPS 证书
确认 DNS 解析完全生效后(可通过 ping yourdomain.com 验证),执行以下命令临时拉取 Certbot 容器申请证书。注意替换你的域名和邮箱。
sudo docker run --rm -it \
-v /opt/blog-stack/certbot/conf:/etc/letsencrypt \
-v /opt/blog-stack/certbot/www:/var/www/certbot \
certbot/certbot certonly --webroot \
--webroot-path=/var/www/certbot \
-d yourdomain.com -d www.yourdomain.com \
--email your_email@example.com \
--agree-tos --no-eff-email
当屏幕出现 Successfully received certificate. 即代表签发成功。
2. 启用 HTTPS 并强制重定向
再次编辑 Nginx 配置文件 nginx/conf.d/default.conf,将 80 端口流量强制重定向至 443,并挂载刚刚申请好的证书。
# HTTP 强制跳转 HTTPS
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
# HTTPS 核心配置
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name yourdomain.com www.yourdomain.com;
# 证书路径映射
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# TLS 安全协议强化
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
client_max_body_size 50M;
location / {
proxy_pass http://wordpress:80;
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;
}
}
无缝重载 Nginx 生效:
sudo docker compose exec nginx nginx -s reload
3. 配置证书自动化续期
Let’s Encrypt 证书的有效期为 90 天,利用 Linux 定时任务实现免人工干预续签。 执行 sudo crontab -e,在末尾添加:
0 3 1 * * docker run --rm -v /opt/blog-stack/certbot/conf:/etc/letsencrypt -v /opt/blog-stack/certbot/www:/var/www/certbot certbot/certbot renew && docker exec blog_nginx nginx -s reload
(代表每月 1 号凌晨 3 点自动验证并重载 Nginx)
阶段四:网站初始化
打开浏览器,访问 https://yourdomain.com 即可进入 WordPress 著名的五分钟安装向导:
- Site Title (站点标题): 填写你的博客名称。
- Username (管理员账号): 务必避免使用
admin或root以防暴力破解,推荐使用个人英文 ID。 - Password (管理员密码): 建议使用高强度随机密码。
- Search engine visibility: 根据个人需求选择是否允许搜索引擎抓取。
配置完毕点击安装,即可登录后台开始探索!