运维、备份与恢复
所有命令都应在包含 docker-compose.yml 的 TG Vault 项目目录执行。
更新
更新只需执行安装脚本:
./deploy/install.sh
安装脚本会自动获取最新代码、构建并启动服务,同时保留数据库和文件。已有地址直接按 Enter 保留即可。
健康检查
docker compose ps
curl -fsS http://127.0.0.1:51947/livez
curl -fsS http://127.0.0.1:51947/readyz
curl -I http://127.0.0.1:47832/
/livez:后端进程存活。/readyz:数据库、存储和安全密钥已就绪。- Web 入口:前端容器能够提供静态资源。
查看日志:
docker compose logs --tail=200 backend
docker compose logs --tail=100 frontend postgres
docker compose logs -f backend
常用操作
docker compose restart
docker compose stop
docker compose start
docker compose down
docker compose down 默认不会删除 named volumes。不要添加 -v,除非明确要永久删除 PostgreSQL、文件、密钥和 Telegram session。
备份
一次可恢复的备份必须来自同一维护窗口,并包含:
- PostgreSQL custom-format dump
file-storage卷中的完整/data- 版本、时间和 SHA-256 manifest
使用仓库脚本:
chmod +x deploy/backup.sh deploy/restore-verify.sh
BACKUP_DIR=./backups ./deploy/backup.sh
脚本会先检查目标空间,然后在数据库 dump 与文件卷归档期间停止 backend,避免上传、删除或 Telegram 后台写入跨越两个快照;结束或失败退出时会恢复 backend。
备份包含内部密钥、第三方存储凭据和 Telegram session。生成后应立即加密、限制权限并复制到异地;不要把
backups/ 提交到 Git。
恢复前验证
在隔离环境运行只读验证:
./deploy/restore-verify.sh ./backups/<backup-directory>
验证脚本会检查 manifest 与归档结构,但不能代替完整恢复演练。定期在隔离 Compose 项目中验证:
- 数据库 schema 和关键行数
/data/secrets可读- 已保存存储账户可以解密
- Web 管理的 Telegram Bot 凭据和用户 session 可解密
/readyz可以通过- 文件预览和下载链路可用
Docker 空间清理
先查看:
docker system df
docker system df -v
优先清理不会删除 named volumes 的资源:
docker builder prune -f
docker image prune -f
docker container prune -f
docker network prune -f
需要更大范围时,先确认镜像可重新构建并已有有效备份,再考虑:
docker image prune -a -f
不要对 TG Vault 服务器随意运行
docker system prune --volumes、docker volume prune 或 docker compose down -v。卷中包含数据库、文件、密钥和 session;误删后只能从备份恢复。
故障排查
backend 不健康
docker compose ps
docker compose logs --tail=250 backend
curl -i http://127.0.0.1:51947/livez
curl -i http://127.0.0.1:51947/readyz
livez=200、readyz=503 通常表示数据库、默认存储或安全密钥没有就绪。
PostgreSQL 连接失败
docker compose exec postgres pg_isready -U tgvault -d tgvault
docker compose logs --tail=200 postgres
HTTPS、CORS 或 OAuth 失败
核对:
- Web/API DNS 与证书
- Nginx upstream 是否是
127.0.0.1:47832和127.0.0.1:51947 VITE_API_URL、CORS_ORIGIN是否填写正确- 修改 API 地址后是否重新运行安装脚本
- OAuth 平台登记的回调地址是否精确一致
上传大文件失败
检查反向代理请求体限制、proxy_request_buffering、读写超时、临时磁盘、分片限制和后端日志。WebDAV 目标还应检查无活动与总上传超时。