本页记录 2026-11-10 现场核实的部署信息。公网域名的 DNS 地址可能是反向代理地址,不能据此判断应用源站。
| 项目 | 当前配置 |
|---|---|
| 公网入口 | https://task.fastrd.io |
| 实际源站 SSH | ssh root@47.110.133.67 |
| 项目目录 | /home/dev/FastTask |
| 配置文件 | /home/dev/FastTask/.env |
| 数据库 | /home/dev/FastTask/data/fasttask.db |
| 附件、音频 | /home/dev/FastTask/data/attachments、/home/dev/FastTask/data/audio |
| 应用监听 | 127.0.0.1:10000 |
| 服务管理 | dev 用户级 systemd:fasttask.service |
| 备份目录 | /home/dev/FastTask-backups |
| 当前程序版本 | 0.1.0-gantt,构建提交 60ebca7bc86e2782497125d44251f0b0780354d5 |
| 当前网页版本 | 工作台主题及入口修复 a53395b(发布源码 9794eb5) |
| 数据库版本 | 24 |
读取服务状态:
ssh root@47.110.133.67 'runuser -u dev -- env XDG_RUNTIME_DIR=/run/user/$(id -u dev) systemctl --user status fasttask.service --no-pager'生成一致性数据库备份时,使用源站当前版本的程序:
cd /home/dev/FastTask
runuser -u dev -- ./bin/fasttask backup --output /home/dev/FastTask-backups/<本次备份目录>/production.db
runuser -u dev -- ./bin/fasttask backup --verify /home/dev/FastTask-backups/<本次备份目录>/production.db先创建由 dev 用户拥有的备份目录。运行中的 SQLite 使用应用备份命令或 SQLite backup API,不直接复制数据库主文件。
用户完成测试站验收后授权更新生产。北京时间 20:29:38 发布已验收的前端产物(a53395b),发布源码提交 9794eb5;生产源码使用 fast-forward 同步,后续仅同步发布文档。
发布前归档旧网页,并通过现有应用生成、校验一致性数据库备份。使用 Linux renameat2(RENAME_EXCHANGE) 原子交换网页目录,保留旧版带内容哈希的资源供尚未刷新的客户端使用。服务进程 PID 未变,后端二进制与生产配置哈希校验一致;未修改 sidecar 构建,未运行数据库迁移。
备份目录:/home/dev/FastTask-backups/workbench-release-20261110,仅属主可访问,包含旧网页归档、production.db、原网页目录 previous-web-dist、前后状态与资源清单、发布及公网检查记录。
公网健康检查正常,JS/CSS、主题初始化脚本和 Service Worker 哈希与测试站构建一致。公网 HTML 在现有代理注入访问统计脚本后其余内容一致。真实浏览器验证了生产登录、旧 PWA 更新提示及刷新、主题与亮暗切换、整行入口及键盘操作、手机无横向溢出,未发现浏览器异常。
仅回滚本次网页发布:
python3 /home/dev/FastTask-backups/workbench-release-20261110/rollback.py脚本校验当前网页版本后原子恢复旧网页,保留当前数据库和运行进程,不恢复数据库备份。若之后又发布其他网页版本,脚本会拒绝覆盖,需要先核实当前版本。回滚后检查公网 /health/ready 及页面。
用户完成测试站验收后授权发布。生产于北京时间 11:58:46 开始更新,11:58:47 恢复就绪。源站使用独立工作树构建 Go 程序,网页使用通过测试的构建;随后更新原目录中的程序及网页,保留原生产配置、数据库、附件、音频和 Node sidecar。
发布前发现源站有未提交的 FastCAS 服务鉴权修复,已保留并以 0363493 纳入仓库,再与甘特图一同测试发布。原工作树补丁、未跟踪源码及 Git stash 均保留。
本次备份目录:/home/dev/FastTask-backups/gantt-release-20261110,仅属主可访问,包含:
runtime.tar.gz:旧程序、网页、生产.env及 sidecar 构建。production.db:停服后生成且校验通过的第 23 版一致性数据库。data-files.tar.gz:同一时点的附件和音频;另备份 systemd 单元及原源码改动。migration-verification.json、doctor.txt和发布日志:迁移及组件检查结果。rollback.sh:恢复本次发布前的程序、网页、配置和数据库,并重启服务。
迁移先在副本演练,再对生产执行。服务启动前逐行比较 40 张表的 14,762 行原有数据,内容一致;仅增加第 24 版迁移记录和两个空日期列。完整性检查为 ok,外键问题为 0。公网版本、资源哈希、登录入口、鉴权拒绝、浏览器渲染及 sidecar 健康检查通过。
需要立即回退本次发布时,在源站执行:
bash /home/dev/FastTask-backups/gantt-release-20261110/rollback.sh该脚本恢复到上述备份时点,先把当前数据库及程序移入备份目录下的 failed-runtime-*。发布后若已有新业务写入,应先评估数据恢复范围。源码保留在发布提交;旧源码改动可从补丁和保存的 stash 找回。
| 项目 | 当前配置 |
|---|---|
| 公网入口 | https://task.fast.0x535a.cn |
| 主机 | 当前工作机 debian13-sz,内网 10.22.33.15 |
| 容器 | fasttask |
| Compose 项目 | fasttask-test |
| Compose 定义 | deployments/compose.test.yml |
| 当前镜像 | fasttask:workbench-controls-test-20261110(前端 a53395b,沿用甘特图测试后端) |
| 端口映射 | 10.22.33.15:10000 → 容器 10000 |
| 独立数据目录 | /root/dockerData/fasttask-gantt-20261110 |
| 部署参数 | /root/repo/FRD/FastTask/backups/workbench-controls-test-20261110/compose.env |
| 独立环境配置 | /root/repo/FRD/FastTask/backups/gantt-test-20261110/test.env |
测试环境使用专用 Compose 配置;它要求显式提供镜像、测试环境文件和数据目录,并固定测试公开地址及关闭通知。根目录 .env 中保留了生产配置,不能把它作为测试部署参数使用。
docker compose \
--env-file backups/workbench-controls-test-20261110/compose.env \
-f deployments/compose.test.yml up -d账号和独立测试密码保存在本机 backups/gantt-test-20261110/access.txt,该目录不进入版本控制。测试副本使用本地账号密码登录,数据账号保留原标识;测试密码与生产密码独立。
前端修复提交 a53395b,镜像 fasttask:workbench-controls-test-20261110。部署前备份位于测试数据目录的 backups/before-workbench-controls-20261110.db,已通过应用校验。
真实公网浏览器验证了旧 PWA 收到更新提示并刷新、两个入口的文字与整行空白点击、Enter/Escape 键操作、亮暗切换及经典主题往返。测试服务健康正常,后端及数据版本保持一致。
回退到上一版工作台界面:
docker compose \
--env-file backups/workbench-controls-test-20261110/rollback.env \
-f deployments/compose.test.yml up -d本轮仅更新前端,使用 deployments/docker/web-test.Dockerfile 和 web/dist 构建上下文;镜像 io.fastrd.fasttask.web-revision 标签为 5c54e3c。基础镜像为 fasttask:gantt-test-20261110(镜像 ID 1fa5d5ca20d42361f638aaaad4ba0605ae513419f914ad39d16ccc8a626a34f8),后端二进制、配置和数据目录保持一致。
部署前通过应用的 SQLite 备份命令生成并校验:
/root/dockerData/fasttask-gantt-20261110/backups/before-workbench-20261110.db
回滚前端使用保留的旧镜像和部署参数:
docker compose \
--env-file backups/workbench-test-20261110/rollback.env \
-f deployments/compose.test.yml up -d本轮不涉及数据库迁移,回滚无需恢复数据库,因此可保留验收期间的测试数据。部署后检查测试公网 /health/ready、前端资源和实际登录页面;/health/version 仍显示基础镜像后端版本 0.1.0-gantt-test,前端版本以镜像标签为准。
旧测试容器 fasttask-before-gantt-20261110 已停止保留,原数据目录 /root/dockerData/fasttask 保留原状。本次使用新的数据目录,无需把已迁移的数据库交回旧程序。
docker stop fasttask
docker rename fasttask fasttask-gantt-rollback-held
docker rename fasttask-before-gantt-20261110 fasttask
docker start fasttask执行后检查测试公网 /health/ready 和 /health/version。回滚前先确认保留容器存在,且待使用的容器名称没有冲突。