一、技术栈概述
在当今互联网时代,快速搭建网站已成为企业和个人展示的重要需求。本文将介绍如何利用 WordPress + Docker + Nginx 的组合实现高效、安全的外网部署方案。
二、环境准备
- 服务器要求:
- Linux 操作系统(推荐 Ubuntu 20.04+ 或 CentOS 8+)
- 至少 2GB 内存
- Docker 和 Docker Compose 已安装
- 安装 Docker:
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
- 安装 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
七、安全加固建议
- 定期更新:保持 WordPress、插件和 Docker 镜像为最新版本
- 防火墙配置:仅开放必要的端口(80, 443)
- 数据库备份:定期备份 MySQL 数据卷
- 访问限制:通过 Nginx 限制管理后台访问IP
- 监控设置:配置容器资源使用监控
八、常见问题解决
- 502 Bad Gateway:检查 WordPress 容器是否正常运行
- 数据库连接错误:确认 MySQL 容器已启动且密码正确
- 证书续期问题:设置定时任务自动续期
0 0 * * * docker-compose run --rm certbot renew >> /var/log/certbot-renew.log
通过以上步骤,您已成功将 WordPress 通过 Docker 和 Nginx 部署到外网访问环境。这种架构不仅便于管理,还能轻松扩展和迁移,是现代化网站部署的理想选择。