chore(deploy): 数据库与各服务增加资源限制和优雅关闭保护

- postgres 增加 mem_limit/cpus/shm_size/stop_grace_period 与 PG
  性能参数(shared_buffers 等,env 可覆盖);backend/web 增加
  内存/CPU 限额与更长的优雅关闭宽限(生产与开发编排同步)
- ubuntu-deploy.sh 增加部署前磁盘空间预检,防止备份或迁移
  中途磁盘写满
- .env.server.example 补充资源变量;文档补充容器资源限制说明
This commit is contained in:
yml2213
2026-08-30 13:59:19 +08:00
parent 02c9de8b9c
commit 6dcdec43f1
5 changed files with 90 additions and 0 deletions
+27
View File
@@ -197,6 +197,32 @@ check_compose_config() {
docker compose config >/dev/null || fail "Docker Compose 配置校验失败。"
}
# 部署前磁盘空间预检:备份目录所在文件系统至少要有首份备份 + 现有备份量 2 倍的余量。
# 不足时直接失败,避免备份或迁移过程中磁盘写满导致数据库不可用。
ensure_disk_space() {
local backup_root="${PROJECT_ROOT}/backups"
local floor_kib=1048576 # 1GiB
local existing_kib=0 require_kib free_kib
mkdir -p "${backup_root}" 2>/dev/null || true
if [[ -d "${backup_root}" ]]; then
existing_kib="$(du -sk "${backup_root}" 2>/dev/null | awk '{print $1}' || true)"
existing_kib="${existing_kib:-0}"
fi
require_kib=$((existing_kib * 2))
[[ ${require_kib} -lt ${floor_kib} ]] && require_kib=${floor_kib}
free_kib="$(df -Pk "${PROJECT_ROOT}" 2>/dev/null | awk 'NR==2 {print $4}' || true)"
free_kib="${free_kib:-0}"
log "磁盘空间预检:可用 ${free_kib} KiB,备份目录已占用 ${existing_kib} KiB,要求至少 ${require_kib} KiB"
if [[ ${free_kib} -lt ${require_kib} ]]; then
fail "磁盘可用空间不足(可用 ${free_kib} KiB,需 ≥ ${require_kib} KiB)。请清理磁盘或调小 DB_BACKUP_KEEP 后重试。"
fi
}
pull_base_images() {
log "拉取基础镜像"
docker compose pull --ignore-buildable
@@ -482,6 +508,7 @@ main() {
validate_env_file
confirm_reset_database
ensure_data_dir
ensure_disk_space
deploy_stack
wait_for_health
print_applied_migrations