当前项目版本:MVP0.5.5 / v0.5.5。当前开发总结为统一现状入口;本页旧版本与日期属于历史记录。

← 返回项目主页

后台运维指南

当前游戏版本:MVP0.5.2(v0.5.2)。当前开发总结。

数据库连接、Docker 操作、备份恢复与常见问题。

按 2026年10月11日 本机配置整理 · 命令仅供复制到终端执行,网页不执行管理操作。

VMware Windows 连接指南 →

先进入工程目录

先打开 OrbStack,再打开终端。以下命令都在工程根目录执行;换电脑时调整目录。

进入本机工程

cd /Users/liujingjie/AI-PRO/sanguo-cards

数据库连接信息

下面是当前本机的配置。密码保存在本机私有文件中,网页不显示密码值。

数据库类型PostgreSQL 17(本机核对:17.11)
数据库名称sanguo
数据库用户sanguo
API 容器内连接地址db:5432
电脑上的数据库端口未开放。不能直接用 localhost:5432 连接当前数据库。
数据库容器sanguo-backend-db-1(Compose 服务名:db)
API 容器sanguo-backend-api-1(Compose 服务名:api)
后台网页 / APIhttp://localhost:18080/ → API 容器 8080
可选 VMware 地址172.16.163.1:18080(本机已启用;配置键 VMWARE_BIND_IP)
数据卷sanguo-backend_postgres_data
本机密码文件Backend/.local/secrets/postgres_password
容器密码文件/run/secrets/db_password
本机端口配置Backend/.local/compose.env
备份目录Backend/.local/backups/
下载包目录Backend/.local/downloads/v0.5.2/(只读提供下载)

打开数据库终端

进入 psql 后输入 \q 退出。该方式不需要把数据库端口暴露到电脑。

docker compose --env-file Backend/.local/compose.env -f compose.yaml exec db psql -U sanguo -d sanguo

只读确认连接

这条只读命令已在本机验证。

docker compose --env-file Backend/.local/compose.env -f compose.yaml exec -T db psql -U sanguo -d sanguo -c 'SELECT current_database(), current_user, version();'

需要 DBeaver 或 TablePlus 图形连接时,要先单独配置仅绑定本机的端口;当前网页没有更改数据库端口或密码。

日常操作 · 推荐入口

优先使用项目自带的管理脚本。它限定操作本项目,并保留已有密码、配置和数据库卷。

启动或更新后台

构建镜像、启动两个服务,并等待就绪。启动后刷新主页。

python3 Backend/manage.py start

查看运行状态

API 与 db 应显示 healthy。

python3 Backend/manage.py status

查看最近日志

只输出最近 80 行;日志可能包含运行信息,不要直接公开整份日志。

python3 Backend/manage.py logs

停止后台

停止 API 和数据库容器,账号数据保留。停止后网页和游戏云端服务暂时不可用。

python3 Backend/manage.py stop

生成数据库备份

生成带 UTC 时间戳的 .dump 文件,保存到 Backend/.local/backups/,成功后打印路径。备份包含账号与会话资料,请保存在私有位置。

python3 Backend/manage.py backup

Docker Compose · 直接命令

下面与管理脚本使用同一份 Compose 配置。日常启动使用上面的脚本更方便。

启动全部后台服务

docker compose --env-file Backend/.local/compose.env -f compose.yaml up -d --build --wait --wait-timeout 180

列出容器状态

docker compose --env-file Backend/.local/compose.env -f compose.yaml ps

查看 API 日志

docker compose --env-file Backend/.local/compose.env -f compose.yaml logs --tail 80 api

持续跟随 API 日志

按 Ctrl+C 退出日志查看,服务继续运行。

docker compose --env-file Backend/.local/compose.env -f compose.yaml logs --tail 80 -f api

查看数据库日志

docker compose --env-file Backend/.local/compose.env -f compose.yaml logs --tail 80 db

只更新 API 与网页

替换 API 容器,数据库容器继续运行;更新时 API 会短暂不可用。新的网页随后部署并自动列入主页。

docker compose --env-file Backend/.local/compose.env -f compose.yaml build api
docker compose --env-file Backend/.local/compose.env -f compose.yaml up -d --no-build --no-deps --wait --wait-timeout 90 api

停止两个服务

保留数据库数据卷。不要使用 down -v 或删除 postgres_data 卷,这会删除账号数据。

docker compose --env-file Backend/.local/compose.env -f compose.yaml stop

检查后台是否可用

只读健康检查

成功时返回 status: ready、database: connected。

curl --fail http://localhost:18080/health/ready

正在检查当前服务…

备份与恢复

常规备份使用上面的 backup 命令。先检查备份内容,再恢复到新的空数据库进行核对;这里的示例不会替换正在使用的 sanguo 数据库。

查看备份文件列表

ls -lh Backend/.local/backups/*.dump

只读查看备份目录内容

替换为实际 .dump 路径;这里只读取备份,不恢复数据。

db_backup_path='Backend/.local/backups/替换为实际备份文件.dump'
docker compose --env-file Backend/.local/compose.env -f compose.yaml exec -T db pg_restore --list < "$db_backup_path"

恢复到独立的新数据库

先修改备份路径,并选择尚不存在的数据库名称。这是操作示例,本次没有执行恢复,也没有修改玩家进度。

db_restore_name='sanguo_restore_20261011'
db_backup_path='Backend/.local/backups/替换为实际备份文件.dump'
test -f "$db_backup_path" && \
docker compose --env-file Backend/.local/compose.env -f compose.yaml exec -T db createdb -U sanguo "$db_restore_name" && \
docker compose --env-file Backend/.local/compose.env -f compose.yaml exec -T db pg_restore -U sanguo -d "$db_restore_name" --exit-on-error < "$db_backup_path"

只读检查独立恢复库

db_restore_name='sanguo_restore_20261011'
docker compose --env-file Backend/.local/compose.env -f compose.yaml exec -T db psql -U sanguo -d "$db_restore_name" -c "SELECT current_database(); SELECT count(*) AS public_tables FROM information_schema.tables WHERE table_schema = 'public';"

正式替换游戏数据库前,应先停止写入、额外备份当前数据并确认恢复方案。备份不包含数据库角色密码;不要把恢复示例直接指向当前 sanguo 数据库。

常见问题

主页打不开
先启动 OrbStack,进入工程目录执行 start,再检查 status。网页随 API 运行,不需要 18081 临时服务。
数据库没有连接
先看 db 是否 healthy,再查看数据库日志与 API 日志。不要删除数据卷或重新生成已有密码。
修改网页后看不到变化
执行“只更新 API 与网页”,完成后刷新浏览器。
下载链接返回 404
本机下载包应位于 Backend/.local/downloads/v0.5.2/。主页本机下载无需 GitHub 登录,GitHub 发布页仍需仓库访问权限。
重启后账号是否丢失
stop、start 和 API 重建都会保留 PostgreSQL 命名数据卷;删除卷或覆盖恢复会影响数据。