294 lines
7.7 KiB
Markdown
294 lines
7.7 KiB
Markdown
# 🚀 ALwrity Deployment Guide
|
|
|
|
## Vercel Deployment Strategy
|
|
|
|
Since Vercel is optimized for frontend applications, we'll deploy the frontend on Vercel and the backend on a separate platform.
|
|
|
|
### **Architecture Overview**
|
|
```
|
|
Frontend (Vercel) ←→ Backend (Railway/Render) ←→ Database (SQLite/PostgreSQL)
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 **Step-by-Step Deployment**
|
|
|
|
### **Part 1: Deploy Backend (Railway - Recommended)**
|
|
|
|
#### **Option A: Railway (Recommended)**
|
|
|
|
1. **Install Railway CLI:**
|
|
```bash
|
|
npm install -g @railway/cli
|
|
```
|
|
|
|
2. **Login to Railway:**
|
|
```bash
|
|
railway login
|
|
```
|
|
|
|
3. **Initialize Project:**
|
|
```bash
|
|
cd backend
|
|
railway init
|
|
```
|
|
|
|
4. **Add Environment Variables:**
|
|
```bash
|
|
railway variables set GEMINI_API_KEY=your_gemini_key
|
|
railway variables set OPENAI_API_KEY=your_openai_key
|
|
railway variables set ANTHROPIC_API_KEY=your_anthropic_key
|
|
railway variables set MISTRAL_API_KEY=your_mistral_key
|
|
railway variables set TAVILY_API_KEY=your_tavily_key
|
|
railway variables set EXA_API_KEY=your_exa_key
|
|
railway variables set SERPER_API_KEY=your_serper_key
|
|
railway variables set CLERK_SECRET_KEY=your_clerk_secret
|
|
railway variables set GSC_REDIRECT_URI=https://your-frontend.vercel.app/gsc/callback
|
|
railway variables set WORDPRESS_REDIRECT_URI=https://your-frontend.vercel.app/wp/callback
|
|
railway variables set WIX_REDIRECT_URI=https://your-frontend.vercel.app/wix/callback
|
|
```
|
|
|
|
5. **Deploy:**
|
|
```bash
|
|
railway up
|
|
```
|
|
|
|
6. **Get Backend URL:**
|
|
```bash
|
|
railway domain
|
|
```
|
|
Copy the URL (e.g., `https://your-app.railway.app`)
|
|
|
|
#### **Option B: Render**
|
|
|
|
1. Go to [render.com](https://render.com) and connect your GitHub
|
|
2. Create a new "Web Service"
|
|
3. Select your repository
|
|
4. Configure:
|
|
- **Build Command:** `pip install -r requirements.txt`
|
|
- **Start Command:** `python start_alwrity_backend.py`
|
|
- **Environment:** Python 3
|
|
5. Add all environment variables in the dashboard
|
|
6. Deploy and get your backend URL
|
|
|
|
---
|
|
|
|
### **Part 2: Deploy Frontend (Vercel)**
|
|
|
|
#### **1. Prepare Frontend for Production**
|
|
|
|
Create a `.env.production` file in the `frontend` directory:
|
|
```env
|
|
REACT_APP_API_URL=https://your-backend-url.railway.app
|
|
REACT_APP_ENVIRONMENT=production
|
|
```
|
|
|
|
#### **2. Deploy to Vercel**
|
|
|
|
1. **Connect to Vercel:**
|
|
- Go to [vercel.com](https://vercel.com)
|
|
- Click "New Project"
|
|
- Import your GitHub repository
|
|
|
|
2. **Configure Project:**
|
|
- **Framework Preset:** Create React App
|
|
- **Root Directory:** `frontend`
|
|
- **Build Command:** `npm run build`
|
|
- **Output Directory:** `build`
|
|
|
|
3. **Add Environment Variables:**
|
|
```
|
|
REACT_APP_API_URL = https://your-backend-url.railway.app
|
|
REACT_APP_ENVIRONMENT = production
|
|
```
|
|
|
|
4. **Deploy:**
|
|
- Click "Deploy"
|
|
- Wait for deployment to complete
|
|
- Get your frontend URL (e.g., `https://your-app.vercel.app`)
|
|
|
|
#### **3. Update Backend URLs**
|
|
|
|
After getting your frontend URL, update the backend environment variables:
|
|
|
|
```bash
|
|
# Update redirect URIs with your actual Vercel URL
|
|
railway variables set GSC_REDIRECT_URI=https://your-app.vercel.app/gsc/callback
|
|
railway variables set WORDPRESS_REDIRECT_URI=https://your-app.vercel.app/wp/callback
|
|
railway variables set WIX_REDIRECT_URI=https://your-app.vercel.app/wix/callback
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 **Alternative: Full-Stack on Vercel (Advanced)**
|
|
|
|
If you want to deploy everything on Vercel, you can use Vercel's serverless functions:
|
|
|
|
### **1. Create API Routes**
|
|
|
|
Create `api/` directory in your project root:
|
|
|
|
```
|
|
api/
|
|
├── auth/
|
|
│ └── [...auth].ts
|
|
├── content/
|
|
│ └── generate.ts
|
|
└── seo/
|
|
└── analyze.ts
|
|
```
|
|
|
|
### **2. Convert FastAPI to Vercel Functions**
|
|
|
|
This requires significant refactoring of your backend code to work with Vercel's serverless functions.
|
|
|
|
### **3. Deploy as Monorepo**
|
|
|
|
```bash
|
|
# Install Vercel CLI
|
|
npm i -g vercel
|
|
|
|
# Deploy
|
|
vercel --prod
|
|
```
|
|
|
|
---
|
|
|
|
## 🛠️ **Environment Variables Checklist**
|
|
|
|
### **Backend Environment Variables:**
|
|
```bash
|
|
# AI API Keys
|
|
GEMINI_API_KEY=your_gemini_key
|
|
OPENAI_API_KEY=your_openai_key
|
|
ANTHROPIC_API_KEY=your_anthropic_key
|
|
MISTRAL_API_KEY=your_mistral_key
|
|
|
|
# Research APIs
|
|
TAVILY_API_KEY=your_tavily_key
|
|
EXA_API_KEY=your_exa_key
|
|
SERPER_API_KEY=your_serper_key
|
|
|
|
# Authentication
|
|
CLERK_SECRET_KEY=your_clerk_secret
|
|
|
|
# OAuth Redirects (update with your Vercel URL)
|
|
GSC_REDIRECT_URI=https://your-app.vercel.app/gsc/callback
|
|
WORDPRESS_REDIRECT_URI=https://your-app.vercel.app/wp/callback
|
|
WIX_REDIRECT_URI=https://your-app.vercel.app/wix/callback
|
|
```
|
|
|
|
### **Frontend Environment Variables:**
|
|
```bash
|
|
REACT_APP_API_URL=https://your-backend-url.railway.app
|
|
REACT_APP_ENVIRONMENT=production
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 **Post-Deployment Steps**
|
|
|
|
### **1. Test Your Deployment**
|
|
- Visit your Vercel URL
|
|
- Complete the onboarding process
|
|
- Test content generation
|
|
- Verify OAuth integrations
|
|
|
|
### **2. Configure Custom Domain (Optional)**
|
|
- In Vercel dashboard, go to your project
|
|
- Click "Domains"
|
|
- Add your custom domain
|
|
- Update redirect URIs with custom domain
|
|
|
|
### **3. Monitor Performance**
|
|
- Check Vercel analytics
|
|
- Monitor Railway/Render logs
|
|
- Set up error tracking (Sentry, etc.)
|
|
|
|
---
|
|
|
|
## 🔍 **Troubleshooting**
|
|
|
|
### **Common Issues:**
|
|
|
|
1. **CORS Errors:**
|
|
- Add your Vercel domain to backend CORS settings
|
|
- Update `allowed_origins` in FastAPI CORS middleware
|
|
|
|
2. **Environment Variables:**
|
|
- Ensure all variables are set in both platforms
|
|
- Check variable names match exactly
|
|
|
|
3. **OAuth Redirects:**
|
|
- Update all redirect URIs with production URLs
|
|
- Test OAuth flows end-to-end
|
|
|
|
4. **Database Issues:**
|
|
- Consider upgrading to PostgreSQL for production
|
|
- Set up database backups
|
|
|
|
### **Performance Optimization:**
|
|
|
|
1. **Frontend:**
|
|
- Enable Vercel's edge caching
|
|
- Optimize bundle size
|
|
- Use CDN for static assets
|
|
|
|
2. **Backend:**
|
|
- Implement connection pooling
|
|
- Add caching layers
|
|
- Monitor memory usage
|
|
|
|
---
|
|
|
|
## 📊 **Monitoring & Maintenance**
|
|
|
|
### **Health Checks:**
|
|
- Frontend: `https://your-app.vercel.app/health`
|
|
- Backend: `https://your-backend.railway.app/health`
|
|
|
|
### **Logs:**
|
|
- Vercel: Built-in function logs
|
|
- Railway: `railway logs`
|
|
- Render: Dashboard logs section
|
|
|
|
### **Scaling:**
|
|
- Vercel: Automatic scaling
|
|
- Railway: Manual scaling in dashboard
|
|
- Render: Auto-scaling available
|
|
|
|
---
|
|
|
|
## 🎯 **Recommended Architecture**
|
|
|
|
```
|
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
│ Frontend │ │ Backend │ │ Database │
|
|
│ (Vercel) │◄──►│ (Railway) │◄──►│ (PostgreSQL) │
|
|
│ │ │ │ │ │
|
|
│ • React App │ │ • FastAPI │ │ • User Data │
|
|
│ • Static Files │ │ • AI Services │ │ • Content │
|
|
│ • CDN Cached │ │ • OAuth APIs │ │ • Analytics │
|
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
```
|
|
|
|
This setup provides:
|
|
- ✅ **Fast frontend delivery** via Vercel's global CDN
|
|
- ✅ **Scalable backend** with Railway's infrastructure
|
|
- ✅ **Reliable database** with PostgreSQL
|
|
- ✅ **Easy maintenance** with separate concerns
|
|
- ✅ **Cost-effective** scaling based on usage
|
|
|
|
---
|
|
|
|
## 🚀 **Next Steps**
|
|
|
|
1. **Deploy backend** to Railway/Render
|
|
2. **Deploy frontend** to Vercel
|
|
3. **Configure environment variables**
|
|
4. **Test all integrations**
|
|
5. **Set up monitoring**
|
|
6. **Configure custom domain** (optional)
|
|
|
|
Your ALwrity platform will be live and accessible worldwide! 🌍
|