philverify-api / deploy.sh
Ryan Christian D. Deniega
fix: cold start 502, favicon, verify state persistence
b1c84b5
#!/usr/bin/env bash
# ── PhilVerify β€” Firebase + Cloud Run Deployment Script ───────────────────────
# Usage:
# chmod +x deploy.sh
# ./deploy.sh YOUR_GCP_PROJECT_ID
#
# Prerequisites:
# brew install google-cloud-sdk firebase-cli
# gcloud auth login
# gcloud auth configure-docker
# firebase login
set -euo pipefail
PROJECT_ID="${1:-}"
REGION="asia-southeast1"
SERVICE_NAME="philverify-api"
IMAGE="gcr.io/${PROJECT_ID}/${SERVICE_NAME}"
if [[ -z "$PROJECT_ID" ]]; then
echo "Usage: ./deploy.sh YOUR_GCP_PROJECT_ID"
exit 1
fi
echo "β–Ά Project: $PROJECT_ID | Region: $REGION | Service: $SERVICE_NAME"
# ── 1. Set GCP project ────────────────────────────────────────────────────────
gcloud config set project "$PROJECT_ID"
# ── 2. Build + push Docker image to GCR ──────────────────────────────────────
echo ""
echo "β–Ά Building & pushing Docker image (this takes ~10 min first time)…"
gcloud builds submit \
--tag "$IMAGE" \
--timeout=30m \
.
# ── 3. Deploy to Cloud Run ────────────────────────────────────────────────────
echo ""
echo "β–Ά Deploying to Cloud Run…"
gcloud run deploy "$SERVICE_NAME" \
--image "$IMAGE" \
--region "$REGION" \
--platform managed \
--allow-unauthenticated \
--memory 4Gi \
--cpu 2 \
--concurrency 10 \
--timeout 300 \
--min-instances 1 \
--max-instances 3 \
--set-env-vars "APP_ENV=production,DEBUG=false,LOG_LEVEL=INFO" \
--set-env-vars "ALLOWED_ORIGINS=https://${PROJECT_ID}.web.app,https://${PROJECT_ID}.firebaseapp.com"
# Add secrets like NEWS_API_KEY via:
# --update-secrets NEWS_API_KEY=philverify-news-api-key:latest
# ── 4. Link Firebase project ──────────────────────────────────────────────────
echo ""
echo "β–Ά Setting Firebase project…"
firebase use "$PROJECT_ID"
# ── 5. Build React frontend ───────────────────────────────────────────────────
echo ""
echo "β–Ά Building React frontend…"
cd frontend
npm ci
npm run build
cd ..
# ── 6. Deploy to Firebase Hosting ────────────────────────────────────────────
echo ""
echo "β–Ά Deploying to Firebase Hosting…"
firebase deploy --only hosting,firestore
echo ""
echo "βœ… Deploy complete!"
echo " Frontend: https://${PROJECT_ID}.web.app"
echo " API: https://${PROJECT_ID}.web.app/api/health"