升级、回滚与卸载
Job Radar 从一个 git 检出目录运行。发布版本是签名的 git 标签 vX.Y.Z(见更新日志)。如果你只是使用它,请停留在发布标签上,从一个标签升级到下一个;main 是开发分支,两次发布之间可能变化。
升级到某个发布版本
Section titled “升级到某个发布版本”git status # 必须是干净的(data/ 和 .env 被 git 忽略,没有关系)scripts/ops/deploy.sh --ref v2.0.0 --dry-run # 先看它会做什么,不改任何东西scripts/ops/deploy.sh --ref v2.0.0 # 正式升级把 v2.0.0 换成你想要的版本(git fetch --tags && git tag --list 'v*' 列出所有版本)。先读那个版本的更新日志:它会写明你是否需要手动做什么。
--ref 可以是标签或分支。检出会停在那个提交上(对标签来说 git 称之为 detached HEAD,这是正常的)。不加 --ref 时脚本跟随 main。
部署默认不验证签名。加 --verify 会先对标签运行 git verify-tag,无效就停止。它用的是随仓库发布的维护者公钥 signing-key.pub(allowed_signers 格式;指纹 SHA256:HHRRfExpbUjcK0/pdc5E1qf94ogkREVkt9+1VP58JQc,SECURITY.md 里也有);你自己用 git config gpg.ssh.allowedSignersFile 设置的公钥列表优先。有签名密钥时发布会签名,见 RELEASING.md。手动检查:git -c gpg.format=ssh -c gpg.ssh.allowedSignersFile=docs/signing-key.pub tag -v v2.0.0。
部署脚本做了什么
Section titled “部署脚本做了什么”按顺序执行,遇到第一个失败的步骤就停下:
- 预检:git、docker、node、pnpm 已安装,Docker 正在运行。
- 检出:获取标签和分支并切换到
--ref(检出目录不干净时拒绝运行)。 - 按锁文件安装依赖。
- 配置:创建
data/目录,复制你还没有的配置文件,迁移格式有变化的配置文件(原件保存在data/config/.backup/)。 - 备份:数据库在运行时先做一个
pre-deploy备份到data/backups/。备份失败会中止升级。 - 构建镜像。
- 排空并重启:有限时间内等待正在运行的周期结束,然后重建容器并等待它们健康。
- 清理 Docker 构建缓存和悬空镜像(不动数据卷)。
- 迁移数据库(runner 启动时也会做)。有待执行的迁移时会先做一份
premigrate备份,备份失败就不迁移。 - ai-worker:重装或重启主机 AI worker 服务:macOS 上是 launchd 代理,Linux 上是 systemd 用户单元
job-radar-ai-worker.service(没有 systemd 用户管理器时不安装任何东西,脚本会说明)。 - doctor:
pnpm run doctor报告需要关注的事项。
细节和选项见 deploy.zh.md。
Linux:从容器以 root 运行的旧版本升级
Section titled “Linux:从容器以 root 运行的旧版本升级”web、runner 和 jobspy 容器现在以普通用户运行,即 .env 里的 PUID:PGID(默认 1000:1000),不再是 root。旧版本写进
data/ 和 .auth/ 的文件可能属于 root,容器就写不了它们了。升级前做一次(在项目目录里):
id -u; id -g # 你的 id# 写进 .env: PUID=<id -u> PGID=<id -g>sudo chown -R "$(id -u):$(id -g)" data .auth # .auth 只有登录过 LinkedIn 才有然后按上面的步骤升级。升级后 pnpm run doctor 会检查(data.ownership:data/ 或 .auth/ 下有不属于 PUID 的东西就提醒)。
macOS 不受影响(Docker Desktop 会映射文件归属)。
回到上一个标签:
scripts/ops/deploy.sh --ref <previous tag>这只会回退代码。如果你离开的那个版本应用过数据库迁移,旧代码可能不认识新数据库;此时还要恢复升级时自动做的 pre-deploy 备份(这会覆盖数据库):
ls -lh data/backups | grep pre-deployscripts/ops/restore.sh data/backups/<那个 pre-deploy 备份> --target jobradar --yes恢复会把被替换的库保留为 jobradar_before_restore_<时间戳>,所以可以撤销;命令见 backup-restore.zh.md 第 4 节。runner 在迁移前做的 premigrate 备份同样可用。
如果你离开的那个版本迁移过某个配置文件,旧代码会认为它“太新”(pnpm run doctor 的 config.layers 会提示):把 data/config/.backup/<时间戳>/ 里的原件复制回 data/config/。
更多见 deploy.zh.md(第 5 节)和 backup-restore.zh.md。要重新跟随 main:git switch main && scripts/ops/deploy.sh。
这会把 Job Radar 从机器上移除。此操作不可逆:数据库、你的个人画像、配置和登录状态都会被删除。先做最后一次备份并复制到别处(scripts/ops/backup.sh,再复制 data/backups/;如果以后可能回来,也保留 data/profile/ 和 data/config/)。
在项目目录执行:
# 1. 主机 AI worker(macOS launchd 代理或 Linux systemd 用户单元);--purge-logs 同时删除它的日志scripts/ops/uninstall-ai-worker.sh --purge-logs
# 2. 停止并移除容器和网络docker compose -p job-radar down
# 3. 删除数据库卷(所有已存的职位、申请和 AI 结果)——无法撤销docker volume rm jobradar-pg
# 4. 删除本地数据、密钥和日志rm -rf data .auth .envrm -rf ~/Library/Logs/job-radar # macOS:launchd 捕获的日志(如果还在)(Linux 上单元的输出在 journal 里)
# 5. 最后删除检出目录本身cd .. && rm -rf job-radar如果你改过 compose 项目名(schedule.yaml 的 doctor.compose_project),请用那个名字代替 job-radar。可选:docker image prune 删除构建出的镜像。为本项目设置过的登录自启 Docker、电源设置或 Tailscale(host-setup.zh.md)需要你手动撤销;claude / codex 的命令行登录属于你自己,会保留。
本页同步自产品库 Joevonlong/job-radar@2947f47 的 docs/。Job Radar 与任何招聘网站均无关联。代码采用 AGPL-3.0-only 许可。