| #!/bin/bash |
| |
| |
|
|
| set -e |
|
|
| COMPONENT=${1:-all} |
|
|
| echo "π Deploying JobPortal ($COMPONENT)" |
|
|
| deploy_backend() { |
| echo "π¦ Deploying backend to Fly.io..." |
| cd backend |
| |
| |
| 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 |
| |
| |
| 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 |
| |
| |
| 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 |
| |
| |
| 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" |
|
|