Desk 的新版本会发布到 Docker 镜像 ghcr.io/modelriver/desk 和 GitHub 仓库。更新只需一条命令或点一下,每种方式也都可以按计划自动更新。
更新会改变什么
- 数据保持不变。 文章、笔记、设置、品牌设置和对话都不会受影响。
- 数据库会自动更新。 新版本启动时会自动完成所需的数据库变更。
- 大版本跨度更新前先备份。 数据库更新后不支持退回旧版本,所以请先复制数据目录。
- 大版本由你决定。
1镜像标签会跟随所有 1.x 版本,2.x 版本不会自动到来。要固定在某个确切版本,请使用完整标签,如1.0.1。
立即更新或定期更新
| 部署方式 | 立即更新 | 定期更新 |
|---|---|---|
| Ubuntu 服务器 | sudo desk-update | 用 root 的 cron 定期运行它(见下文) |
| Docker Compose | docker compose pull && docker compose up -d | cron(见下文) |
| Fly.io | fly deploy | 定时运行 fly deploy 的任务(见下文) |
| Render | Manual Deploy → Deploy latest reference | 定时调用部署钩子的任务 |
| Railway | Redeploy | Settings → Image Auto Updates |
| 手动部署 | git pull && npm ci && npm run build,然后重启 | 用 cron 定期运行 |
用 cron 每周更新(Docker Compose)
每周一 04:00,在 docker-compose.yml 所在目录中:
0 4 * * 1 cd /path/to/desk && docker compose pull -q && docker compose up -d
用 crontab -e 添加。如需每月更新,改用 0 4 1 * *。
用 GitHub Actions 每周更新(Fly.io)
用 fly tokens create deploy 创建部署令牌,在存放 fly.toml 的仓库中把它保存为仓库密钥 FLY_API_TOKEN,然后添加 .github/workflows/update-desk.yml:
1name: Update Desk2on:3 schedule:4 - cron: '0 4 * * 1'5 workflow_dispatch:6jobs:7 deploy:8 runs-on: ubuntu-latest9 steps:10 - uses: actions/checkout@v411 - uses: superfly/flyctl-actions/setup-flyctl@master12 - run: flyctl deploy --remote-only13 env:14 FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}同样的计划也可以改为调用 Render 的部署钩子:把最后两个步骤换成 run: curl -fsS -X POST "${{ secrets.RENDER_DEPLOY_HOOK }}",并把钩子 URL 保存为 RENDER_DEPLOY_HOOK。
Ubuntu 服务器
setup-server.sh 会安装 desk-update,更新时不需要记住任何选项:
sudo desk-update --check # 查看已安装的版本和最新版本sudo desk-update # 更新到当前主版本的最新发布sudo desk-update 1.1.1 # 更新到指定版本,更新或更旧都可以sudo desk-update --rollback # 回到上次更新之前的版本每次更新会:
- 先备份:把
/var/lib/desk和/etc/desk保存到/var/backups/desk,并在 Desk 继续运行的同时生成一份一致的数据库副本。保留最近 3 份。 - 在正在运行的版本旁边构建新版本(位于
/opt/desk.next)。下载或构建失败时会在此停止,不做任何改动。 - 切换并重启,只停机几秒钟。原来的版本保留为
/opt/desk.prev。 - 检查是否正常响应。 新版本 30 秒内没有响应时,会自动切回原来的版本。
发布版本来自你安装时使用的代码仓库。新的主版本不会自动安装,需要你明确指定。设置、数据、nginx 和 HTTPS 都不会被改动。
每周一 04:00 自动更新,用 sudo crontab -e 添加:
0 4 * * 1 /usr/local/bin/desk-update
恢复备份时,请把它解压到一个空目录(不要直接解压到 /),在 Desk 停止时复制回去。先删除旧数据库的 -wal 和 -shm 文件,以免它们被重放到恢复后的数据库上:
sudo systemctl stop desksudo mkdir /tmp/desk-restore && sudo tar -xzf /var/backups/desk/FILE.tgz -C /tmp/desk-restoresudo rsync -a /tmp/desk-restore/var/lib/desk/ /var/lib/desk/sudo rm -f /var/lib/desk/desk.db-wal /var/lib/desk/desk.db-shmsudo install -o desk -g desk -m 640 /tmp/desk-restore/desk.db /var/lib/desk/desk.dbsudo systemctl start desk备份中还包含 etc/desk/env,需要时可以用它恢复设置。
Desk 1.1.2 之前安装的服务器还没有 desk-update。先从服务器上的代码仓库副本中获取一次,之后就可以一直使用它:
cd ~/desk && git pull && sudo install -m 755 deploy/update.sh /usr/local/bin/desk-update更新之后
打开后台 → 设置 → System(仅管理员可见):页面会显示正在运行的版本。General 标签页会显示能否连接 ModelRiver。