#!/bin/bash # Deploy script for JobPortal # Usage: ./deploy/deploy.sh [backend|frontend|all] set -e COMPONENT=${1:-all} echo "🚀 Deploying JobPortal ($COMPONENT)" deploy_backend() { echo "📦 Deploying backend to Fly.io..." cd backend # Set secrets if not already set if [ -n "$DATABASE_URL" ]; then flyctl secrets set DATABASE_URL="$DATABASE_URL" --stage fi if [ -n "$REDIS_URL" ]; then flyctl secrets set REDIS_URL="$REDIS_URL" --stage fi if [ -n "$SECRET_KEY" ]; then flyctl secrets set SECRET_KEY="$SECRET_KEY" --stage fi # Deploy flyctl deploy --remote-only echo "✅ Backend deployed!" echo " URL: https://jobportal-api.fly.dev" echo " Docs: https://jobportal-api.fly.dev/api/v1/docs" cd .. } deploy_frontend() { echo "📦 Deploying frontend to Vercel..." cd frontend # Deploy with Vercel CLI if command -v vercel &> /dev/null; then vercel --prod else echo "⚠️ Vercel CLI not installed. Run: npm i -g vercel" echo " Then: cd frontend && vercel --prod" fi echo "✅ Frontend deployed!" cd .. } deploy_worker() { echo "📦 Deploying worker to Fly.io..." cd backend # Scale worker machine flyctl machine run . \ --app jobportal-worker \ --region sjc \ --vm-size shared-cpu-1x \ --vm-memory 512 \ --entrypoint "celery -A app.worker.celery_config.celery_app worker --loglevel=warning --concurrency=2" echo "✅ Worker deployed!" cd .. } case $COMPONENT in backend) deploy_backend ;; frontend) deploy_frontend ;; worker) deploy_worker ;; all) deploy_backend deploy_frontend deploy_worker ;; *) echo "Usage: ./deploy.sh [backend|frontend|worker|all]" exit 1 ;; esac echo "" echo "🎉 Deployment complete!" echo "" echo "Useful commands:" echo " flyctl status -a jobportal-api # Backend status" echo " flyctl logs -a jobportal-api # Backend logs" echo " vercel ls # Frontend deployments"