2020 年把博客迁进 Docker(见上一篇《Typecho 迁移至 Docker》),abiosoft/caddy:php 一把梭跑了五年多。Caddy v1 停更、PHP 7.3 停支持,这次趁着重构把整栈升到最新:Typecho 1.3.0 + PHP 8.2 + Caddy v2。

备份(能回滚才敢动手)

tar czf /root/backup-pre-upgrade/www.tar.gz -C /home/caddy www
cp /home/caddy/www/usr/*.db /root/backup-pre-upgrade/

复制站点,原站一字不动

cp -a /home/caddy/www /home/caddy/www-new

替换 Typecho 核心(保留 usr/ 和 config.inc.php)

cd /home/caddy/www-new
rm -rf admin var install build index.php install.php changelog.txt license.txt
unzip typecho.zip -d /home/caddy/www-new

容器网络与 PHP 8.2

docker network create webnet
docker run -d --name php82 --restart unless-stopped --network webnet \
  -v /home/caddy/www-new:/home/www php:8.2-fpm-alpine

Caddyfile v2

{
    email [email protected]
}
hantu.win {
    root * /home/www
    encode gzip
    php_fastcgi php82:9000
    file_server
    header Strict-Transport-Security "max-age=31536000;"
    log {
        output file /home/logs/hantu_win.log
        format console
    }
}
www.hantu.win, blog.hantu.win {
    redir https://hantu.win{uri} permanent
}

切换(停旧起新,证书 ACME 自动签发)

docker stop caddy && docker rename caddy caddy-old
docker run -d --name caddy2 --restart unless-stopped --network webnet \
  -p 80:80 -p 443:443 \
  -v /home/caddy/caddy2/Caddyfile:/etc/caddy/Caddyfile \
  -v /home/caddy/www-new:/home/www \
  -v /home/caddy/logs:/home/logs \
  -v /home/caddy/caddy2-data:/data \
  caddy:2-alpine

踩坑:Alpine 容器的 www-data 是 uid 82

前台一切正常,登录后台报 Database Query Error。查了半天是权限:php:8.2-fpm-alpine 里的 www-data 是 uid 82(Debian 系是 33),数据库文件属主不对,读得了写不了。

chown -R 82:82 /home/caddy/www-new/usr

2009 年的老 SQLite 库被 1.3.0 直接读起来了,零迁移。内存反而比旧栈省了 20M,回滚方案:docker stop caddy2 && docker start caddy-old。

标签: none

添加新评论