Spaces:
Runtime error
Runtime error
| 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 "==========================================" |