Parcourir la source

增加部署sh脚本

xueyiming il y a 2 semaines
Parent
commit
606a0b6b41
1 fichiers modifiés avec 80 ajouts et 0 suppressions
  1. 80 0
      deploy.sh

+ 80 - 0
deploy.sh

@@ -0,0 +1,80 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+# Usage:
+#   ./deploy.sh                 # deploy master
+#   ./deploy.sh master          # deploy master
+#   ./deploy.sh master --no-build
+#   ./deploy.sh master --no-cache
+
+BRANCH="${1:-master}"
+OPTION="${2:-}"
+
+PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+cd "$PROJECT_DIR"
+
+if [[ ! -f "docker-compose.yml" ]]; then
+  echo "ERROR: docker-compose.yml not found in $PROJECT_DIR"
+  exit 1
+fi
+
+if ! command -v docker >/dev/null 2>&1; then
+  echo "ERROR: docker is not installed."
+  exit 1
+fi
+
+COMPOSE_CMD=""
+if docker compose version >/dev/null 2>&1; then
+  COMPOSE_CMD="docker compose"
+elif command -v docker-compose >/dev/null 2>&1; then
+  COMPOSE_CMD="docker-compose"
+else
+  echo "ERROR: neither 'docker compose' nor 'docker-compose' is available."
+  exit 1
+fi
+
+if [[ ! -f ".env" ]]; then
+  if [[ -f ".env.example" ]]; then
+    cp .env.example .env
+    echo "INFO: .env not found, created from .env.example"
+    echo "INFO: please review .env values for production."
+  else
+    echo "ERROR: .env and .env.example are both missing."
+    exit 1
+  fi
+fi
+
+echo "==> Fetch latest code"
+git fetch --all
+git checkout "$BRANCH"
+git pull origin "$BRANCH"
+
+echo "==> Build and start containers"
+if [[ "$OPTION" == "--no-build" ]]; then
+  $COMPOSE_CMD up -d
+elif [[ "$OPTION" == "--no-cache" ]]; then
+  $COMPOSE_CMD build --no-cache
+  $COMPOSE_CMD up -d
+else
+  $COMPOSE_CMD up -d --build
+fi
+
+echo "==> Service status"
+$COMPOSE_CMD ps
+
+echo "==> Backend health check"
+if command -v curl >/dev/null 2>&1; then
+  set +e
+  HEALTH_OUTPUT="$(curl -sS --max-time 5 http://127.0.0.1:8000/demand/api/v1/health)"
+  CURL_CODE=$?
+  set -e
+  if [[ $CURL_CODE -eq 0 ]]; then
+    echo "$HEALTH_OUTPUT"
+    echo "Deploy done."
+  else
+    echo "WARN: backend health check failed, please inspect logs:"
+    echo "      $COMPOSE_CMD logs --tail=100 backend"
+  fi
+else
+  echo "WARN: curl not found, skip health check."
+fi