为什么要用Docker部署博客?
之前我部署博客,要先装Nginx、PHP、MySQL,还要一堆配置,折腾一天都搞不定。
用Docker,10分钟搞定,而且:
- 一键部署,不用配置环境
- 随时备份,移动服务器只需打包一个compose文件
- 多个博客互不干扰(一个容器一个博客)
- 版本升级安全,不会影响系统
准备工作
1. 服务器要求
- 至少1GB内存(WordPress+MySQL需要至少512MB)
- 20GB磁盘空间
- Ubuntu 20.04+ 或 CentOS 7+
2. 安装Docker和Compose
1 2 3 4 5 6 7 8 9
| apt update apt install -y docker.io docker-compose systemctl start docker systemctl enable docker
docker --version docker-compose --version
|
3. 防火墙放行
1 2 3 4 5 6 7 8 9
| ufw allow 80/tcp ufw allow 443/tcp ufw enable
firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --reload
|
创建WordPress项目
1. 创建项目目录
1 2
| mkdir -p ~/myblog cd ~/myblog
|
2. 创建docker-compose.yml
编辑 compose.yml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| version: '3.8'
services: wordpress: image: wordpress:latest container_name: myblog-wordpress restart: unless-stopped ports: - "80:80" environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: StrongPassword123! WORDPRESS_DB_NAME: wordpressdb volumes: - wordpress_data:/var/www/html depends_on: - db
db: image: mysql:5.7 container_name: myblog-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: RootPassword123! MYSQL_DATABASE: wordpressdb MYSQL_USER: wordpress MYSQL_PASSWORD: StrongPassword123! volumes: - mysql_data:/var/lib/mysql
phpmyadmin: image: phpmyadmin/phpmyadmin container_name: myblog-phpmyadmin restart: unless-stopped ports: - "8080:80" environment: PMA_HOST: db depends_on: - db
volumes: wordpress_data: mysql_data:
|
密码安全提示:
- 千万不要用我给的示例密码,改成复杂的!
- 至少16位,包含大小写、数字、符号
启动博客
1 2 3 4 5 6 7 8
| docker-compose up -d
docker-compose ps
docker-compose logs -f
|
等待1-2分钟,服务就会启动完成。
初始化WordPress
1. 访问网站
打开浏览器,访问 http://服务器IP
2. 选择语言
选择”简体中文”,点Continue
3. 填写网站信息
- 站点标题:你的博客名称(如”我的技术博客”)
- 用户名:后台登录用户名
- 密码:后台登录密码(记好!)
- 邮箱:你的邮箱
- 点”安装WordPress”
4. 登录
安装完成后,点”登录”,用刚才设置的用户名密码登录。
数据库管理(可选)
访问 http://服务器IP:8080 进入phpMyAdmin:
- 用户名:
wordpress
- 密码:
StrongPassword123!(compose.yml里设置的)
域名绑定
1. 准备域名
假设你已购买域名,如 blog.example.com
2. 修改compose.yml
把ports改成:
1 2 3
| ports: - "80:80" - "443:443"
|
3. 配置域名DNS
在域名服务商后台,添加A记录:
1
| blog.example.com → 你的服务器IP
|
等待DNS生效(10分钟到24小时)
4. 用域名访问
访问 http://blog.example.com
配置SSL证书(HTTPS)
方法1:使用Nginx反向代理 + Let’s Encrypt
创建Nginx配置
编辑 /etc/nginx/sites-available/blog.conf:
1 2 3 4 5 6 7 8 9 10 11 12
| server { listen 80; server_name blog.example.com;
location / { proxy_pass http://localhost:8080; 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; } }
|
修改compose.yml,WordPress端口改为8080:
1 2
| ports: - "127.0.0.1:8080:80"
|
启动Nginx:
1 2 3
| ln -s /etc/nginx/sites-available/blog.conf /etc/nginx/sites-enabled/ nginx -t systemctl reload nginx
|
申请Let’s Encrypt证书
1 2 3 4 5
| apt install -y certbot python3-certbot-nginx
certbot --nginx -d blog.example.com
|
按照提示输入邮箱,同意服务条款。
访问 https://blog.example.com,应该能看到小锁图标了!
备份和恢复
备份
1 2 3 4 5 6
| tar -czf backup_$(date +%Y%m%d).tar.gz compose.yml
docker run --rm -v myblog_wordpress_data:/data -v $(pwd):/backup alpine tar czf /backup/wordpress_data.tar.gz /data docker run --rm -v myblog_mysql_data:/data -v $(pwd):/backup alpine tar czf /backup/mysql_data.tar.gz /data
|
定时备份(添加到crontab):
1 2
| 0 3 * * * cd /root/myblog && docker run --rm -v myblog_wordpress_data:/data -v /root/backups:/backup alpine tar czf /backup/wordpress_$(date +\%Y\%m\%d).tar.gz /data
|
恢复
1 2 3 4 5 6 7
| cd ~/myblog docker-compose up -d
docker run --rm -v myblog_wordpress_data:/data -v $(pwd):/backup alpine tar xzf /backup/wordpress_data.tar.gz -C / docker run --rm -v myblog_mysql_data:/data -v $(pwd):/backup alpine tar xzf /backup/mysql_data.tar.gz -C /
|
常用维护命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| docker-compose ps
docker-compose logs -f wordpress docker-compose logs -f mysql
docker-compose restart docker-compose restart wordpress
docker-compose stop
docker-compose start
docker-compose down
docker-compose down -v
|
性能优化
1. 启用WordPress缓存
安装插件:
- WP Rocket(收费)
- W3 Total Cache(免费)
- Autoptimize(免费)
2. MySQL优化
在compose.yml的db环境变量中添加:
1 2 3 4
| environment: ... MYSQL_INNODB_BUFFER_POOL_SIZE: 256M MYSQL_INNODB_LOG_FILE_SIZE: 64M
|
3. 内存限制
添加到WordPress容器:
1 2 3
| wordpress: ... mem_limit: 512m
|
踩坑经验
坑1:上传文件大小限制
WordPress默认只允许2MB,修改php.ini:
在compose.yml添加:
1 2 3 4 5 6 7
| wordpress: ... environment: WORDPRESS_CONFIG_EXTRA: | define('WP_MEMORY_LIMIT', '256M'); @ini_set('upload_max_filesize', '100M'); @ini_set('post_max_size', '100M');
|
坑2:主题/插件自动更新失败
权限问题:
1
| docker exec -it myblog-wordpress chown -R www-data:www-data /var/www/html
|
坑3:SSL证书续期
Let’s Encrypt证书90天到期,添加定时任务:
1 2
| 0 3 1 * * certbot renew --quiet && systemctl reload nginx
|
坑4:更换域名后无法访问
在WordPress后台设置→常规修改URL,或直接修改数据库:
1
| docker exec -it myblog-mysql mysql -uroot -p wordpressdb
|
执行:
1
| UPDATE wp_options SET option_value='https://blog.example.com' WHERE option_name='siteurl' OR option_name='home';
|
扩展:多站点部署
要部署多个博客,创建不同目录:
1 2
| mkdir -p ~/blog2 ~/blog3
|
总结
- 准备工作:安装Docker和Compose,放行防火墙
- compose.yml:定义WordPress、MySQL、phpMyAdmin
- 一键启动:
docker-compose up -d
- 初始化:访问网站,填写信息,完成安装
- 域名绑定:DNS添加A记录,等待生效
- SSL证书:用Nginx反向代理 + Let’s Encrypt
- 备份:定期备份数据卷和compose文件
- 维护:用
docker-compose管理服务,查看日志、重启等
- 优化:安装缓存插件,调整MySQL参数,限制内存
- 坑挺多,耐心解决,WordPress部署一次,终身受益
下一篇:自动备份脚本实战。