DJM CMS 的发布目录采用 releases/<版本> 加 current 软链接的结构。升级时新增一个版本目录,验证通过后再切换软链接,回滚只需要把链接切回去。
1. 升级前备份
- 数据库:SQLite 复制
storage/database/djm.sqlite;MySQL 使用数据库自带备份工具。也可以在后台执行 SQLite 备份。 - 文件:至少备份
shared/configs、shared/storage、shared/themes、shared/plugins。 - 记录当前版本:
./current/bin/cms version。
mkdir -p /root/backup
cp shared/storage/database/djm.sqlite /root/backup/djm-$(date +%F).sqlite
tar -czf /root/backup/shared-$(date +%F).tar.gz shared/configs shared/storage shared/themes shared/plugins
2. 下载并解压新版本
cd /tmp
curl -fSL -o update.zip \
"https://cloud.duojumi.com/api/public/v1/cms/releases/1.0.153/download?channel=stable&os=linux&arch=amd64"
unzip -q update.zip -d update
mv update/releases/1.0.153 /www/wwwroot/cms.example.com/releases/
3. 切换版本
cd /www/wwwroot/cms.example.com
ln -sfn releases/1.0.153 current
chown -R www:www releases/1.0.153
export DJM_CONFIG=$PWD/shared/configs/app.yaml
./current/bin/cms doctor
doctor 会检查连接、主题与目录结构。SQLite 模式下迁移检查仍会输出 MySQL 专用的 information_schema 警告,可忽略;以 /health/ready 和页面访问为准。确认无问题后,在宝塔 Go 项目里重启服务。
4. 验证
curl -fsS http://127.0.0.1:23280/health/ready
curl -fsS https://cms.example.com/ | head -5
再走一遍登录后台、打开列表与详情、保存一篇内容,确认写入链路正常。
5. 回滚
cd /www/wwwroot/cms.example.com
ln -sfn releases/1.0.118 current
# 在宝塔 Go 项目里重启服务
./current/bin/cms version
如果新版本已经执行了不可逆迁移,回滚前需要先恢复对应数据库文件备份。生产环境升级前建议在预发站点完整验证主题、插件和自定义模板。
讨论