进入本机工程
cd /Users/liujingjie/AI-PRO/sanguo-cards当前项目版本:MVP0.5.5 / v0.5.5。当前开发总结为统一现状入口;本页旧版本与日期属于历史记录。
当前游戏版本:MVP0.5.2(v0.5.2)。当前开发总结。
数据库连接、Docker 操作、备份恢复与常见问题。
按 2026年10月11日 本机配置整理 · 命令仅供复制到终端执行,网页不执行管理操作。
先打开 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) |
| 后台网页 / API | http://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 startAPI 与 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下面与管理脚本使用同一份 Compose 配置。日常启动使用上面的脚本更方便。
docker compose --env-file Backend/.local/compose.env -f compose.yaml up -d --build --wait --wait-timeout 180docker compose --env-file Backend/.local/compose.env -f compose.yaml psdocker compose --env-file Backend/.local/compose.env -f compose.yaml logs --tail 80 api按 Ctrl+C 退出日志查看,服务继续运行。
docker compose --env-file Backend/.local/compose.env -f compose.yaml logs --tail 80 -f apidocker compose --env-file Backend/.local/compose.env -f compose.yaml logs --tail 80 db替换 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 数据库。