diff --git a/scripts/deploy-prod.sh b/scripts/deploy-prod.sh index 65f35a5..ca3a9ca 100755 --- a/scripts/deploy-prod.sh +++ b/scripts/deploy-prod.sh @@ -127,14 +127,13 @@ validate_env() { exit 1 fi - local app_env caddy_domain caddy_email mysql_dsn redis_addr storage_endpoint admin_base_path + local app_env caddy_domain caddy_email mysql_dsn redis_addr storage_endpoint app_env="$(require_env APP_ENV)" caddy_domain="$(require_env CADDY_DOMAIN)" caddy_email="$(require_env CADDY_EMAIL)" mysql_dsn="$(require_env MYSQL_DSN)" redis_addr="$(require_env REDIS_ADDR)" storage_endpoint="$(require_env STORAGE_ENDPOINT)" - admin_base_path="$(require_env VITE_ADMIN_BASE_PATH)" require_env MYSQL_DATABASE >/dev/null require_env MYSQL_ROOT_PASSWORD >/dev/null require_env MYSQL_USER >/dev/null @@ -174,14 +173,6 @@ validate_env() { log_error "STORAGE_ENDPOINT 仍指向本机,请改为 http://minio:9000" exit 1 fi - if [[ ! "${admin_base_path}" =~ ^/[A-Za-z0-9][A-Za-z0-9._-]*$ ]]; then - log_error "VITE_ADMIN_BASE_PATH 必须是单段路径,例如 /manage-7x9k2p,当前值:${admin_base_path}" - exit 1 - fi - if [[ "${admin_base_path}" == "/admin" || "${admin_base_path}" == "/m" || "${admin_base_path}" == "/api" ]]; then - log_error "VITE_ADMIN_BASE_PATH 不能使用 ${admin_base_path},请改成不公开的后台入口" - exit 1 - fi if awk -F= '/^[A-Z0-9_]+=/{ if ($0 ~ /=(change-|保持你的|你的)/) found=1 } END { exit found ? 0 : 1 }' "${BACKEND_ENV}"; then log_error "backend/.env 里还有占位值,请先替换后再部署" exit 1 @@ -189,16 +180,18 @@ validate_env() { } compose() { - docker compose -f "${COMPOSE_FILE}" "$@" + docker compose --env-file "${BACKEND_ENV}" -f "${COMPOSE_FILE}" "$@" +} + +compose_user_cmd() { + printf "docker compose --env-file backend/.env -f deploy/docker-compose.prod.yml" } export_caddy_env() { export CADDY_DOMAIN export CADDY_EMAIL - export VITE_ADMIN_BASE_PATH CADDY_DOMAIN="$(require_env CADDY_DOMAIN)" CADDY_EMAIL="$(require_env CADDY_EMAIL)" - VITE_ADMIN_BASE_PATH="$(require_env VITE_ADMIN_BASE_PATH)" } public_url() { @@ -240,7 +233,10 @@ wait_service_healthy() { sleep 1 done - log_error "${label} 启动超时,请执行:docker compose -f deploy/docker-compose.prod.yml logs ${service}" + log_error "${label} 启动超时" + log_warn "最近 ${service} 日志:" + compose logs --tail=120 "${service}" || true + log_error "可继续执行:$(compose_user_cmd) logs ${service}" exit 1 } @@ -350,7 +346,7 @@ main() { wait_http_ready log_success "部署完成:$(public_url)" - log "常用命令:docker compose -f deploy/docker-compose.prod.yml logs -f caddy backend" + log "常用命令:$(compose_user_cmd) logs -f caddy backend" if [[ "${FOLLOW_LOGS}" == "1" ]]; then compose logs -f backend