ganesh-vilje's picture
Deploy to Hugging Face Main
f8f02c0
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 "=========================================="