一、技術(shù)棧概述
在當今互聯(lián)網(wǎng)時代,快速搭建網(wǎng)站已成為企業(yè)和個人展示的重要需求。本文將介紹如何利用 WordPress + Docker + Nginx 的組合實現(xiàn)高效、安全的外網(wǎng)部署方案。
二、環(huán)境準備
- 服務器要求:
- Linux 操作系統(tǒng)(推薦 Ubuntu 20.04+ 或 CentOS 8+)
- 至少 2GB 內(nèi)存
- 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 配置
創(chuàng)建 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
目錄下創(chuàng)建 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)
- 數(shù)據(jù)庫備份:定期備份 MySQL 數(shù)據(jù)卷
- 訪問限制:通過 Nginx 限制管理后臺訪問IP
- 監(jiān)控設(shè)置:配置容器資源使用監(jiān)控
八、常見問題解決
- 502 Bad Gateway:檢查 WordPress 容器是否正常運行
- 數(shù)據(jù)庫連接錯誤:確認 MySQL 容器已啟動且密碼正確
- 證書續(xù)期問題:設(shè)置定時任務自動續(xù)期
0 0 * * * docker-compose run --rm certbot renew >> /var/log/certbot-renew.log
通過以上步驟,您已成功將 WordPress 通過 Docker 和 Nginx 部署到外網(wǎng)訪問環(huán)境。這種架構(gòu)不僅便于管理,還能輕松擴展和遷移,是現(xiàn)代化網(wǎng)站部署的理想選擇。