前言
在当今互联网时代,拥有一个个人博客或企业网站已成为标配。WordPress作为全球最受欢迎的内容管理系统(CMS),以其易用性和丰富的插件生态著称。而Docker作为容器化技术的代表,能够帮助我们快速部署应用并保持环境一致性。本文将详细介绍如何使用Docker部署WordPress,并通过HTTPS保障网站安全。
准备工作
在开始之前,请确保您的系统已安装以下组件:
- Docker引擎(版本18.06.0+)
- Docker Compose(版本1.25.0+)
- 一个可用的域名(用于配置HTTPS)
使用Docker Compose部署WordPress
- 创建docker-compose.yml文件
version: '3.8'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
volumes:
db_data:
wordpress_data:
- 启动服务
docker-compose up -d
等待几分钟后,访问您的服务器IP地址,您应该能看到WordPress的安装界面。
配置HTTPS安全连接
为了保障网站安全,我们需要为WordPress配置HTTPS。这里我们使用Let’s Encrypt免费证书,并通过Nginx作为反向代理。
- 修改docker-compose.yml
version: '3.8'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
expose:
- "80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./certbot/www:/var/www/certbot
- ./certbot/conf:/etc/letsencrypt
depends_on:
- wordpress
certbot:
image: certbot/certbot
volumes:
- ./certbot/www:/var/www/certbot
- ./certbot/conf:/etc/letsencrypt
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
volumes:
db_data:
wordpress_data:
- 创建nginx.conf文件
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
return 301 https://$host$request_uri;
}
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
}
server {
listen 443 ssl;
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;
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;
}
}
}
- 获取SSL证书
docker-compose run --rm certbot certonly --webroot --webroot-path /var/www/certbot --dry-run -d yourdomain.com -d www.yourdomain.com
如果测试成功,去掉--dry-run
参数重新运行获取真实证书。
- 重启服务
docker-compose down && docker-compose up -d
配置WordPress使用HTTPS
- 登录WordPress后台
- 进入”设置”->“常规”
- 将”WordPress地址(URL)“和”站点地址(URL)“中的http改为https
- 点击”保存更改”
常见问题解决
- 证书续期失败
- 确保域名解析正确
- 检查防火墙是否开放80和443端口
- 查看certbot容器的日志
- 混合内容警告
- 安装”Really Simple SSL”插件自动修复
- 或手动更新数据库中的http链接为https
- 性能优化
- 添加缓存插件如WP Super Cache
- 考虑使用Redis作为对象缓存
结语
通过Docker部署WordPress并配置HTTPS,我们不仅获得了便捷的部署方式,还确保了网站的安全性。这种方案易于维护和扩展,适合个人博客到中小型企业网站的各种场景。随着容器化技术的普及,这种部署方式将成为WordPress部署的标准实践之一。