博客栈再升级:Typecho 1.3.0 + PHP 8.2 + Caddy v2
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。