deploy.sh 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. # Usage:
  4. # ./deploy.sh # deploy master
  5. # ./deploy.sh master # deploy master
  6. # ./deploy.sh master --no-build
  7. # ./deploy.sh master --no-cache
  8. BRANCH="${1:-master}"
  9. OPTION="${2:-}"
  10. PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  11. cd "$PROJECT_DIR"
  12. if [[ ! -f "docker-compose.yml" ]]; then
  13. echo "ERROR: docker-compose.yml not found in $PROJECT_DIR"
  14. exit 1
  15. fi
  16. if ! command -v docker >/dev/null 2>&1; then
  17. echo "ERROR: docker is not installed."
  18. exit 1
  19. fi
  20. COMPOSE_CMD=""
  21. if docker compose version >/dev/null 2>&1; then
  22. COMPOSE_CMD="docker compose"
  23. elif command -v docker-compose >/dev/null 2>&1; then
  24. COMPOSE_CMD="docker-compose"
  25. else
  26. echo "ERROR: neither 'docker compose' nor 'docker-compose' is available."
  27. exit 1
  28. fi
  29. if [[ ! -f ".env" ]]; then
  30. if [[ -f ".env.example" ]]; then
  31. cp .env.example .env
  32. echo "INFO: .env not found, created from .env.example"
  33. echo "INFO: please review .env values for production."
  34. else
  35. echo "ERROR: .env and .env.example are both missing."
  36. exit 1
  37. fi
  38. fi
  39. echo "==> Fetch latest code"
  40. git fetch --all
  41. git checkout "$BRANCH"
  42. git pull origin "$BRANCH"
  43. echo "==> Build and start containers"
  44. if [[ "$OPTION" == "--no-build" ]]; then
  45. $COMPOSE_CMD up -d
  46. elif [[ "$OPTION" == "--no-cache" ]]; then
  47. $COMPOSE_CMD build --no-cache
  48. $COMPOSE_CMD up -d
  49. else
  50. $COMPOSE_CMD up -d --build
  51. fi
  52. echo "==> Service status"
  53. $COMPOSE_CMD ps
  54. echo "==> Backend health check"
  55. if command -v curl >/dev/null 2>&1; then
  56. set +e
  57. HEALTH_OUTPUT="$(curl -sS --max-time 5 http://127.0.0.1:8000/demand/api/v1/health)"
  58. CURL_CODE=$?
  59. set -e
  60. if [[ $CURL_CODE -eq 0 ]]; then
  61. echo "$HEALTH_OUTPUT"
  62. echo "Deploy done."
  63. else
  64. echo "WARN: backend health check failed, please inspect logs:"
  65. echo " $COMPOSE_CMD logs --tail=100 backend"
  66. fi
  67. else
  68. echo "WARN: curl not found, skip health check."
  69. fi