把博客塞进 Docker 的好处是换机器时只需要搬一个 docker-compose.yml 和数据卷。下面是我用了两年的最小组合。

三个容器,各司其职

容器作用注意
nginx静态资源与反代只暴露 80/443
php-fpm跑 Typecho与 nginx 共享代码目录
mysql数据数据卷必须独立挂载

关键配置

services:
  web:
    image: nginx:alpine
    volumes:
      - ./site:/var/www/html:ro
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro

三件事最容易踩坑:

  • 权限:php-fpm 的 www-data 必须能读 usr/uploads,否则后台上传直接 500。
  • 时区:容器默认 UTC,评论时间会差 8 小时,记得挂 /etc/localtime。
  • 上传大小:client_max_body_size 和 upload_max_filesize 两处都要改。

HTTPS

证书用 acme.sh 申请,续期后 docker compose exec web nginx -s reload 即可,不需要重启整个栈。

备份

数据库和 usr/uploads 分两个任务:数据库每天 mysqldump,附件每周 rsync 一次。备份脚本写进 cron,别指望手动。