entrypoint.sh 1004 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/bin/sh
  2. set -eu
  3. DATA_DIR=${APP_DATA_DIR:-/app/data}
  4. BACKUP_DIR=${APP_BACKUP_DIR:-$DATA_DIR/backups}
  5. DATABASE_FILE=${APP_DATABASE_FILE:-$DATA_DIR/okr-performance.db}
  6. umask 027
  7. case ",${SPRING_PROFILES_ACTIVE:-}," in
  8. *,prod,*)
  9. JWT_SECRET=${APP_JWT_SECRET:-}
  10. if [ "${#JWT_SECRET}" -lt 32 ]; then
  11. echo "错误:生产环境 APP_JWT_SECRET 长度必须至少 32 字符。" >&2
  12. echo "请复制 .env.example 为 .env,设置随机密钥后重新启动。" >&2
  13. exit 1
  14. fi
  15. ;;
  16. esac
  17. mkdir -p "$DATA_DIR" "$BACKUP_DIR"
  18. WRITE_PROBE="$DATA_DIR/.write-probe-$$"
  19. if ! touch "$WRITE_PROBE" 2>/dev/null; then
  20. echo "错误:数据库目录不可写:$DATA_DIR" >&2
  21. echo "请确认宿主机目录存在且 Docker 对其拥有写权限。" >&2
  22. exit 1
  23. fi
  24. rm -f "$WRITE_PROBE"
  25. if [ -f "$DATABASE_FILE" ]; then
  26. echo "使用现有 SQLite 数据库:$DATABASE_FILE"
  27. else
  28. echo "未发现 SQLite 数据库,将由应用执行首次初始化:$DATABASE_FILE"
  29. fi
  30. exec "$@"