5.9 KiB
Firebase Deployment Guide
This guide will help you deploy VIBN to Firebase Hosting with Firebase Functions.
Prerequisites
- Firebase CLI installed:
npm install -g firebase-tools - Firebase project created
- AlloyDB instance set up
- Environment variables configured
Environment Variables Required
Create a .env.production file in the vibn-frontend directory with:
# Deployment URL
NEXT_PUBLIC_APP_URL=https://your-app.web.app
# Firebase Admin SDK (Server-side)
FIREBASE_PROJECT_ID=your-project-id
FIREBASE_CLIENT_EMAIL=your-service-account@your-project.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nYour private key here\n-----END PRIVATE KEY-----\n"
# Firebase Client SDK (Public)
NEXT_PUBLIC_FIREBASE_API_KEY=your-api-key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your-project-id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your-project.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=123456789
NEXT_PUBLIC_FIREBASE_APP_ID=1:123456789:web:abcdef
# AlloyDB
ALLOYDB_HOST=10.x.x.x
ALLOYDB_PORT=5432
ALLOYDB_DATABASE=vibn
ALLOYDB_USER=postgres
ALLOYDB_PASSWORD=your-secure-password
# AI Providers
GEMINI_API_KEY=your-gemini-api-key
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_LOCATION=us-central1
# GitHub Integration
GITHUB_CLIENT_ID=your-github-oauth-app-client-id
GITHUB_CLIENT_SECRET=your-github-oauth-app-secret
GITHUB_REDIRECT_URI=https://your-app.web.app/api/github/oauth/callback
# V0 Design Integration
V0_API_KEY=your-v0-api-key
Set Firebase Environment Variables
For sensitive variables that shouldn't be in the .env.production file, set them as Firebase Functions secrets:
# Set Firebase secrets for production
firebase functions:secrets:set FIREBASE_PRIVATE_KEY
firebase functions:secrets:set ALLOYDB_PASSWORD
firebase functions:secrets:set GEMINI_API_KEY
firebase functions:secrets:set GITHUB_CLIENT_SECRET
firebase functions:secrets:set V0_API_KEY
# Set public config
firebase functions:config:set app.url="https://your-app.web.app"
Deployment Steps
1. Login to Firebase
firebase login
2. Initialize Firebase (if not already done)
firebase init
Select:
- Firestore
- Functions
- Hosting
- Storage
3. Build the Application
cd vibn-frontend
npm run build
4. Deploy Everything
# Deploy all (functions + hosting + firestore rules + storage rules)
npm run firebase:deploy:all
Or deploy individually:
# Deploy only Firestore rules and storage rules
npm run firebase:deploy:rules
# Deploy only Firestore indexes
npm run firebase:deploy:indexes
# Deploy only functions and hosting
npm run firebase:deploy:app
5. Verify Deployment
After deployment, visit your Firebase Hosting URL:
- Hosting URL:
https://your-project-id.web.app - Custom Domain:
https://your-custom-domain.com(if configured)
Key Changes Made for Production
API URL Resolution
The app now automatically detects the correct API URL:
- Development: Uses
http://localhost:3000 - Production: Uses the request origin or
NEXT_PUBLIC_APP_URLenvironment variable - Vercel: Auto-detects using
VERCEL_URL
This is handled by the getApiUrl() utility in /lib/utils/api-url.ts.
Updated Files
The following API routes now use dynamic URL resolution:
/api/projects/[projectId]/mvp-checklist/route.ts/api/projects/[projectId]/timeline-view/route.ts/api/projects/[projectId]/complete-history/route.ts/api/projects/[projectId]/plan/intelligent/route.ts/api/projects/[projectId]/plan/simulate/route.ts/api/projects/[projectId]/context/route.ts/api/projects/[projectId]/audit/generate/route.ts
Firebase Configuration
The app is configured to run as a Firebase Function via firebase.json:
{
"hosting": {
"rewrites": [
{
"source": "**",
"function": "nextjsFunc"
}
]
},
"functions": [{
"source": ".",
"runtime": "nodejs20"
}]
}
Troubleshooting
Port 3000 or 8000 References
All hardcoded localhost:3000 and localhost:8000 references have been replaced with environment-aware URL resolution.
Build Failures
If the build fails:
# Clear Next.js cache
rm -rf .next
# Clear node_modules and reinstall
rm -rf node_modules package-lock.json
npm install
# Try building again
npm run build
Function Timeout
If your functions timeout, increase the timeout in firebase.json:
{
"functions": [{
"source": ".",
"runtime": "nodejs20",
"timeout": "300s"
}]
}
Memory Issues
If you encounter memory issues, increase the memory allocation:
{
"functions": [{
"source": ".",
"runtime": "nodejs20",
"memory": "2GB"
}]
}
Custom Domain Setup
- Go to Firebase Console → Hosting
- Click "Add custom domain"
- Follow the DNS verification steps
- Update
NEXT_PUBLIC_APP_URLandGITHUB_REDIRECT_URIto use your custom domain
Monitoring
- Firebase Console: https://console.firebase.google.com
- Functions Logs:
firebase functions:log - Hosting Logs: Available in Firebase Console
CI/CD with GitHub Actions
Create .github/workflows/deploy.yml:
name: Deploy to Firebase
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '20'
- run: npm install
working-directory: vibn-frontend
- run: npm run build
working-directory: vibn-frontend
- uses: w9jds/firebase-action@master
with:
args: deploy --only hosting,functions
env:
FIREBASE_TOKEN: \${{ secrets.FIREBASE_TOKEN }}
Support
For issues, check:
- Firebase Functions logs
- Browser console for client-side errors
- Network tab to debug API calls