name: Deploy Beta (NATIVE) on: push: branches: - beta jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout Code uses: https://github.com/actions/checkout@v4 - name: Generate CloudWatch Config Locally run: | mkdir -p tmp cat << 'EOF' > tmp/amazon-cloudwatch-agent.json { "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "metrics": { "metrics_collected": { "disk": { "measurement": ["used_percent"], "metrics_collection_interval": 60, "resources": ["/"] }, "mem": { "measurement": ["mem_used_percent"], "metrics_collection_interval": 60 } } }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/home/ubuntu/crmbackend/logs/app.log", "log_group_name": "/crm-backend/app", "log_stream_name": "{instance_id}", "retention_in_days": 30 }, { "file_path": "/home/ubuntu/crmbackend/logs/error.log", "log_group_name": "/crm-backend/error", "log_stream_name": "{instance_id}", "retention_in_days": 30 }, { "file_path": "/home/ubuntu/crmbackend/logs/requests.log", "log_group_name": "/crm-backend/requests", "log_stream_name": "{instance_id}", "retention_in_days": 30 }, { "file_path": "/home/ubuntu/crmbackend/logs/gunicorn-access.log", "log_group_name": "/crm-backend/gunicorn-access", "log_stream_name": "{instance_id}", "retention_in_days": 30 }, { "file_path": "/home/ubuntu/crmbackend/logs/gunicorn-error.log", "log_group_name": "/crm-backend/gunicorn-error", "log_stream_name": "{instance_id}", "retention_in_days": 30 } ] } } } } EOF - name: Package Application run: | tar -czf app.tar.gz --exclude=.git --exclude=tmp . - name: Deploy to Beta EC2 run: | apk add --no-cache openssh-client aws-cli mkdir -p ~/.ssh echo "${{ secrets.BETA_EC2_SSH_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa # Copy app archive and configuration files scp -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa app.tar.gz tmp/amazon-cloudwatch-agent.json crm-backend.service configure_nginx_proxy.py ${{ secrets.BETA_EC2_USERNAME }}@${{ secrets.BETA_EC2_HOST }}:/tmp/ # Execute deployment commands on remote server ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa ${{ secrets.BETA_EC2_USERNAME }}@${{ secrets.BETA_EC2_HOST }} << 'EOF' set -e # ── 2. Install Host Dependencies ────────────────────────────── sudo apt-get update sudo apt-get install -y python3-pip python3-venv python3-dev default-libmysqlclient-dev pkg-config libpq-dev build-essential # ── 3. Extract codebase to target directory ─────────────────── sudo mkdir -p /home/ubuntu/crmbackend sudo chown -R ubuntu:ubuntu /home/ubuntu/crmbackend tar -xzf /tmp/app.tar.gz -C /home/ubuntu/crmbackend # ── 4. Set up python virtual environment & dependencies ──────── cd /home/ubuntu/crmbackend mkdir -p logs python3 -m venv venv ./venv/bin/pip install --upgrade pip ./venv/bin/pip install -r requirements.txt # ── 5. Configure environment variables ───────────────────────── echo "DEBUG=0" > .env echo "USE_SQLITE=False" >> .env echo "CRM_DB_NAME=crmmanagement" >> .env echo "CRM_DB_USER=vignesh" >> .env echo "CRM_DB_PASSWORD=vtechnosoft@123A" >> .env echo "CRM_DB_HOST=127.0.0.1" >> .env echo "CRM_DB_PORT=5432" >> .env echo "SELLER_DB_NAME=sellerprofile" >> .env echo "SELLER_DB_USER=vignesh" >> .env echo "SELLER_DB_PASSWORD=vtechnosoft@123A" >> .env echo "SELLER_DB_HOST=127.0.0.1" >> .env echo "SELLER_DB_PORT=5432" >> .env echo "CUSTOMER_DB_NAME=customerwebsite" >> .env echo "CUSTOMER_DB_USER=vignesh" >> .env echo "CUSTOMER_DB_PASSWORD=vtechnosoft@123A" >> .env echo "CUSTOMER_DB_HOST=127.0.0.1" >> .env echo "CUSTOMER_DB_PORT=5432" >> .env echo "PRODUCT_DB_NAME=productprofile" >> .env echo "PRODUCT_DB_USER=vignesh" >> .env echo "PRODUCT_DB_PASSWORD=vtechnosoft@123A" >> .env echo "PRODUCT_DB_HOST=127.0.0.1" >> .env echo "PRODUCT_DB_PORT=5432" >> .env # ── 6. Run Database Migrations ───────────────────────────────── ./venv/bin/python manage.py migrate --noinput ./venv/bin/python manage.py migrate --database=seller_db --noinput ./venv/bin/python manage.py migrate --database=product_db --noinput ./venv/bin/python manage.py migrate --database=customer_db --noinput # ── 7. Configure and restart Systemd service ─────────────────── sudo mv /tmp/crm-backend.service /etc/systemd/system/crm-backend.service sudo systemctl daemon-reload sudo systemctl enable crm-backend sudo systemctl restart crm-backend # ── 8. Configure CloudWatch Agent ────────────────────────────── sudo mv /tmp/amazon-cloudwatch-agent.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \ -a fetch-config -m ec2 -s \ -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json # ── 9. Configure Nginx Proxy for /crm ────────────────────────── python3 /tmp/configure_nginx_proxy.py # ── 10. Cleanup tmp files ─────────────────────────────────────── rm -f /tmp/app.tar.gz /tmp/configure_nginx_proxy.py EOF