#!/usr/bin/env bash set -euo pipefail # ε―η”¨ζ³•οΌš # ./deploy.sh # ./deploy.sh feature/docker deploy_branch="${1:-main}" repo_dir="/opt/openisle/OpenIsle" compose_file="${repo_dir}/docker/docker-compose.yaml" env_file="${repo_dir}/.env" project="openisle" echo "πŸ‘‰ Enter repo..." cd "$repo_dir" echo "πŸ‘‰ Syncing code & switching to branch: $deploy_branch" git fetch --all --prune git checkout -B "$deploy_branch" "origin/$deploy_branch" git reset --hard "origin/$deploy_branch" echo "πŸ‘‰ Ensuring env file: $env_file" if [ ! -f "$env_file" ]; then echo "❌ ${env_file} not found. Create it based on .env.example (with domains)." exit 1 fi export COMPOSE_PROJECT_NAME="$project" # δΎ› compose 内各 service ηš„ env_file 使用 export ENV_FILE="$env_file" echo "πŸ‘‰ Validate compose..." docker compose -f "$compose_file" --env-file "$env_file" config >/dev/null echo "πŸ‘‰ Pull base images (for image-based services)..." docker compose -f "$compose_file" --env-file "$env_file" pull --ignore-pull-failures echo "πŸ‘‰ Build images ..." # 前端 + OpenSearch ιƒ½ζ˜―θ‡ͺε»Ίι•œεƒοΌ›--pull ζ›΄ζ–°ε…ΆεŸΊη‘€ι•œεƒ docker compose -f "$compose_file" --env-file "$env_file" \ build --pull \ --build-arg NUXT_ENV=production \ frontend_service mcp echo "πŸ‘‰ Recreate & start all target services (no dev profile)..." docker compose -f "$compose_file" --env-file "$env_file" \ up -d --force-recreate --remove-orphans --no-deps \ mysql redis rabbitmq websocket-service springboot frontend_service mcp echo "πŸ‘‰ Current status:" docker compose -f "$compose_file" --env-file "$env_file" ps echo "πŸ‘‰ Pruning dangling images..." docker image prune -f echo "βœ… Stack deployed at $(date)"