WordPress 基于 Docker 和 Nginx 的外网部署指南

来自:素雅营销研究院

头像 方知笔记
2025年07月04日 20:37

一、技术栈概述

在当今互联网时代,快速搭建网站已成为企业和个人展示的重要需求。本文将介绍如何利用 WordPress + Docker + Nginx 的组合实现高效、安全的外网部署方案。

二、环境准备

  1. 服务器要求
  • Linux 操作系统(推荐 Ubuntu 20.04+ 或 CentOS 8+)
  • 至少 2GB 内存
  • Docker 和 Docker Compose 已安装
  1. 安装 Docker
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
  1. 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

三、Docker Compose 配置

创建 docker-compose.yml 文件:

version: '3'

services:
wordpress:
image: wordpress:latest
container_name: wp-app
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: yourpassword
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wp_data:/var/www/html
depends_on:
- db

db:
image: mysql:5.7
container_name: wp-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: yourpassword
volumes:
- ./db_data:/var/lib/mysql

nginx:
image: nginx:latest
container_name: wp-nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx_conf:/etc/nginx/conf.d
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
depends_on:
- wordpress

四、Nginx 反向代理配置

nginx_conf 目录下创建 wordpress.conf

server {
listen 80;
server_name yourdomain.com;
server_tokens off;

location /.well-known/acme-challenge/ {
root /var/www/certbot;
}

location / {
return 301 https://$host$request_uri;
}
}

server {
listen 443 ssl;
server_name yourdomain.com;

ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

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;
}

location ~ /.well-known/acme-challenge {
allow all;
root /var/www/certbot;
}
}

五、SSL 证书配置

使用 Certbot 获取 Let’s Encrypt 证书:

docker run -it --rm --name certbot \
-v "./certbot/conf:/etc/letsencrypt" \
-v "./certbot/www:/var/www/certbot" \
certbot/certbot certonly \
--webroot -w /var/www/certbot \
--email your@email.com \
--agree-tos \
--no-eff-email \
-d yourdomain.com

六、启动服务

docker-compose up -d

七、安全加固建议

  1. 定期更新:保持 WordPress、插件和 Docker 镜像为最新版本
  2. 防火墙配置:仅开放必要的端口(80, 443)
  3. 数据库备份:定期备份 MySQL 数据卷
  4. 访问限制:通过 Nginx 限制管理后台访问IP
  5. 监控设置:配置容器资源使用监控

八、常见问题解决

  1. 502 Bad Gateway:检查 WordPress 容器是否正常运行
  2. 数据库连接错误:确认 MySQL 容器已启动且密码正确
  3. 证书续期问题:设置定时任务自动续期
0 0 * * * docker-compose run --rm certbot renew >> /var/log/certbot-renew.log

通过以上步骤,您已成功将 WordPress 通过 Docker 和 Nginx 部署到外网访问环境。这种架构不仅便于管理,还能轻松扩展和迁移,是现代化网站部署的理想选择。