文件
workbuddy-portal/docker-compose.hostdir.yml
T
wangchuanli 3751dffef9 feat: 新增备份恢复与公网加固
- 新增备份管理页与 API:在线快照、自动周期备份、按份数清理、下载、一键恢复(恢复前自动兜底)
- 新增 /profile/export,普通用户可导出本人全部数据(不含 Cookie 明文)
- 修复 X-Forwarded-For 可伪造导致三道 IP 防线失效,统一走 client_ip() 取客户端地址
- 取消 admin123 硬编码默认口令,留空则生成随机初始口令并仅打印一次
- .dockerignore 排除 backups/ 并加构建期断言,防止密钥随镜像分发
- 新增会话版本号,改密/停用/删除及恢复备份后其他会话立即失效
- 新增容器资源上限、采集跨度硬顶 31 天、重操作最小间隔与并发 409
- 新增访问日志、HSTS 条件下发、口令黑名单、验证码抗模板匹配、instance.json 0600
- 版本号升至 1.4.0,同步更新 README、SECURITY、.env.example 与 compose 配置
2026-09-18 08:46:34 +08:00

26 行
1.4 KiB
YAML

# =============================================================================
# 可选叠加层:把数据 / 日志放到宿主机目录,而不是 Docker 命名卷。
#
# docker compose -f docker-compose.yml -f docker-compose.hostdir.yml up -d
#
# 好处:`./data/usage.sqlite` 直接可见,备份就是拷目录,宿主机的 manage.py 也能直接读。
#
# ⚠️ 只建议在 **Linux 宿主机** 上用(bind mount 与容器是同一个文件系统,
# SQLite 的 WAL / 文件锁语义正常)。
#
# ⚠️ **Windows + Docker Desktop 上不要用**:那里的绑定挂载走 9p(`path=C:\`),
# 宿主的 Windows 进程一旦访问过这个 WAL 库——哪怕只是 `manage.py status` 这种纯读——
# 容器侧下一次打开就会 `sqlite3.OperationalError: unable to open database file`,
# 而且**不会自愈**,必须 `docker compose restart portal`。
# 复现步骤与原理见 docs/DEPLOYMENT.md「Windows 绑定挂载的坑」。
# =============================================================================
services:
portal:
volumes:
- ${WB_HOST_DATA_DIR:-./data}:/app/data
- ${WB_HOST_LOG_DIR:-./logs}:/app/logs
# 备份同样落到宿主机目录(默认就是仓库里的 ./backups)。
# 叠加后 `wb_backups` 那个命名卷变成没人用的空卷,可以随手删掉:
# docker volume rm workbuddy-portal_wb_backups
- ${WB_HOST_BACKUP_DIR:-./backups}:/app/backups