name: Build and Deploy with Docker Compose on EC2 on: push: branches: - develop2 jobs: build: runs-on: ubuntu-latest env: EC2_HOST: ec2-43-205-106-5.ap-south-1.compute.amazonaws.com EC2_USER: ubuntu EC2_SSH_KEY: | -----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAvdYRqBnqNUFFQcpNa+QlYoqUacoKECA1TaBT8KfBI8PU7PrF 84YmodBMGmmo4axYmR4Gzk6Q64BCdalEyWpIDKhFECVRtObYkD0whO6K5d6QqpE5 UmjkBkukg/xknbj5Ht3gCw6zunUeKgA67jqrEqAPy5t47AGr2M9FfgaQUE80BEI7 41s78aI8EgMVkDADH1nIveyzWrFtqAIuL/mGUPBm42SBhYP0MFGzO9AzuDcwGoCB pXIbkYJBJ4cCN3SrxBtJa+77THzwnbS3MwU0OZ+brQJjr0bDRL8ojdAg3QthCvZ1 72SUaGjzwYdF2McZYYz6Lo9iRU4rswxkLM4POQIDAQABAoIBAH1gqQCxPPI3TZqK FmAvqlFO3X6RJdxIqWu/fDDxWqpYaISri5mu/Eza2aiIKDYEMe/O2Qfg8+3WJA65 4Oh1/Wf+qr5jJ3enD1kUULs7IRl4yWsdxxIanJ9bzigtxfY1eLNeLt6esy1utKFg zYsRzHLcrBH5eP/Gis0C+A6oHyAqS4ZCRYaQr1IMxw4J9XaD6MTVap5gzmM+EELr rsp8XFNsn+9GXu6U3gnZCUEE2B+WwT0yT3JatUyZdYH21n8adWHi13ako94Aom/o qB7lSX4x0gYgFmH9x1OaMEkFuibLgQhHkBO3szWFTdnqNbGhuAI9VwXiksoBuPqw bVBfvRECgYEA649P5Z88lKiL2roim+Y5R4ZjEu9lhc7Bq2d1lnDf2mIQU66LwNzf FU3eITGmjdOds7MsVJBgHfHMX1jUdqYD3CGmB2uIrWWs260j98xyDk8hFP7xM7Pl PJuFn7scduX94Yq+zNqz983vRlAVzb0vKUicv/j0QtAeLqVrvOm81r8CgYEAzk8P XcK5AkHAwakoolo0oCZyj74i+6b5gjqETWzAucYtrROkLA8hYKGKSYRFdnTrDYUv /+pzM8fLQZPDmYPCyDpKtpoCK4j1sefFJjg+o/eg2iUHfBmjYZrbBcmnFTnaL33l PCQv33PvEhx88gpfydfZGzjup3xyhRsy4bEX0AcCgYB1Ee2YZlJaY4XWN+nZZ0sS ZBS7JWVkYgRYpnuHQCPQyinpHPdx65OnZ+K8xotLM1/OHn8qq/JJD5IN1P0K1qlW bxav2167JqwJJXyZu+73c5YydB32HzMPsw9u+jREVzudKzJ2Zz9IKf4ACO89KAfX UbItqpHi3sIRVr87zUK/ywKBgQC9PZH3zEzOQCgivBrUyW+qU3oUVjFaqrAF/80q BA7ImXt+XhzieUKBk8v4YYciAF83uKrt0U24+pR746Gw6Ea8SZQM6ToCWxAcD2At DbyPxO5cC0lRUWcneddb+Lv1YWq803t5biwniP2LnGwTzOZOjFrOeKuZIDMf23IR ydLw8wKBgQCeMiyPuRT4IkAaCvSxnIwzw4ezeEoasovymp+cvTS3Iisti0RpIY/E pTIbe/6doNouv06SUbwRvmtNzswhh6WXFTdb8JPrXeEfPNDN2bFvnJKmEw7QxJlM R82hB737GTw8uPhqQw61ow5rujBl2Imqc7wOLdiSsbzbFCX6LkIQqg== -----END RSA PRIVATE KEY----- steps: # 1. Checkout repo - name: Checkout code uses: actions/checkout@v4 # 5. Copy FULL project to EC2 - name: Copy project to EC2 uses: appleboy/scp-action@v0.1.7 with: host: ${{ env.EC2_HOST }} username: ${{ env.EC2_USER }} key: ${{ env.EC2_SSH_KEY }} source: '.' target: "~/prediqai/" overwrite: true # 2. Build Docker image - name: Build Docker Image run: | docker build . -t santhoshpoint9/point9:prediq-v2 echo "IMAGE_NAME=santhoshpoint9/point9:prediq-v2" >> $GITHUB_ENV # 3. Docker login - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: santhoshpoint9 password: A1b1c1d1## # 4. Push Docker image - name: Push Docker Image run: docker push $IMAGE_NAME # 6. Deploy with Docker Compose on EC2 - name: Deploy with Docker Compose on EC2 uses: appleboy/ssh-action@v1.2.1 with: host: ${{ env.EC2_HOST }} username: ${{ env.EC2_USER }} key: ${{ env.EC2_SSH_KEY }} envs: IMAGE_NAME script: | echo "==========================================" echo "Starting Docker Compose Deployment" echo "==========================================" # Navigate to project directory (only needs docker-compose.yml and .env) cd ~/prediqai || { echo "Project directory not found!"; exit 1; } echo "Current directory: $(pwd)" echo "Current user: $(whoami)" # Verify .env file exists if [ ! -f .env ]; then echo "ERROR: .env file not found!" echo "Please create .env file with required environment variables" exit 1 fi echo ".env file found ✓" # Stop old standalone container if it exists echo "Stopping old container prediq-backend-v2..." docker stop prediq-backend-v2 || true docker rm prediq-backend-v2 || true # Stop existing docker-compose containers echo "Stopping existing docker-compose containers..." docker compose down || true # Remove old containers and images echo "Removing old containers..." docker container prune -f # Pull/update service images (Redis, RabbitMQ, etc.) echo "Pulling service images..." docker compose pull # Start all services (no --build needed, using pre-built image) echo "Starting services with Docker Compose..." docker compose up -d # Wait for services to be healthy echo "Waiting for services to start..." sleep 15 # Check service status echo "==========================================" echo "Service Status:" echo "==========================================" docker compose ps # Verify containers are running echo "" echo "==========================================" echo "Running Containers:" echo "==========================================" docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" # Check Redis echo "" echo "Checking Redis..." docker exec prediqai-redis redis-cli ping || echo "Redis check failed" # Check RabbitMQ echo "" echo "Checking RabbitMQ..." docker exec prediqai-rabbitmq rabbitmq-diagnostics ping || echo "RabbitMQ check failed" # Check API health echo "" echo "Checking API health..." sleep 5 curl -f http://localhost:3004/health || curl -f http://localhost:3004/v1/health || echo "API health check failed" # Show recent logs echo "" echo "==========================================" echo "Recent API Logs:" echo "==========================================" docker compose logs --tail=50 api # Show Celery worker status echo "" echo "==========================================" echo "Celery Workers:" echo "==========================================" docker ps | grep celery # Clean up unused images echo "" echo "Cleaning up unused images..." docker image prune -f echo "" echo "==========================================" echo "Deployment Complete!" echo "==========================================" echo "Services:" echo " - API: http://${{ env.EC2_HOST }}:3004" echo " - Flower: http://${{ env.EC2_HOST }}:5555" echo " - RabbitMQ Management: http://${{ env.EC2_HOST }}:15672" echo "=========================================="