add env docs
This commit is contained in:
parent
907f33a794
commit
ada862704b
375
docs/ENVIRONMENT_VARIABLES.md
Normal file
375
docs/ENVIRONMENT_VARIABLES.md
Normal file
@ -0,0 +1,375 @@
|
||||
# Environment Variables Configuration
|
||||
|
||||
This document provides a comprehensive guide to all environment variables required for the Prmbr - AI Prompt Studio application.
|
||||
|
||||
## 📋 Table of Contents
|
||||
|
||||
- [Database Configuration](#database-configuration)
|
||||
- [Authentication (Supabase)](#authentication-supabase)
|
||||
- [File Storage (Cloudflare R2)](#file-storage-cloudflare-r2)
|
||||
- [Payment Processing (Stripe)](#payment-processing-stripe)
|
||||
- [AI Model APIs](#ai-model-apis)
|
||||
- [Application Settings](#application-settings)
|
||||
- [Development vs Production](#development-vs-production)
|
||||
- [Complete Configuration Examples](#complete-configuration-examples)
|
||||
|
||||
## 🗄️ Database Configuration
|
||||
|
||||
### Required Variables
|
||||
|
||||
| Variable | Description | Example |
|
||||
|----------|-------------|---------|
|
||||
| `DATABASE_URL` | PostgreSQL connection string via Supabase/Prisma | `postgresql://username:password@localhost:5432/prmbr` |
|
||||
|
||||
### Development Setup
|
||||
```bash
|
||||
# Local PostgreSQL
|
||||
DATABASE_URL="postgresql://username:password@localhost:5432/prmbr?schema=public"
|
||||
|
||||
# Supabase (Recommended)
|
||||
DATABASE_URL="postgresql://postgres:[PASSWORD]@[PROJECT_REF].supabase.co:5432/postgres"
|
||||
|
||||
# Prisma Accelerate (For Cloudflare Workers)
|
||||
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=your_api_key"
|
||||
```
|
||||
|
||||
## 🔐 Authentication (Supabase)
|
||||
|
||||
### Required Variables
|
||||
|
||||
| Variable | Description | Where to Find |
|
||||
|----------|-------------|---------------|
|
||||
| `NEXT_PUBLIC_SUPABASE_URL` | Supabase project URL | Project Settings > API |
|
||||
| `NEXT_PUBLIC_SUPABASE_ANON_KEY` | Supabase anonymous key | Project Settings > API |
|
||||
| `SUPABASE_SERVICE_ROLE_KEY` | Supabase service role key | Project Settings > API |
|
||||
|
||||
### Configuration
|
||||
```bash
|
||||
# Get these from your Supabase project dashboard
|
||||
NEXT_PUBLIC_SUPABASE_URL="https://your-project-id.supabase.co"
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
```
|
||||
|
||||
### Setup Instructions
|
||||
1. Create a Supabase project at [supabase.com](https://supabase.com)
|
||||
2. Go to Project Settings > API
|
||||
3. Copy the Project URL and API keys
|
||||
4. Enable Google OAuth in Authentication > Providers (optional)
|
||||
|
||||
## 📁 File Storage (Cloudflare R2)
|
||||
|
||||
### Required Variables
|
||||
|
||||
| Variable | Description | Where to Find |
|
||||
|----------|-------------|---------------|
|
||||
| `R2_ACCESS_KEY_ID` | R2 access key ID | R2 > Manage R2 API tokens |
|
||||
| `R2_SECRET_ACCESS_KEY` | R2 secret access key | R2 > Manage R2 API tokens |
|
||||
| `R2_ENDPOINT` | R2 S3-compatible endpoint | R2 > Settings |
|
||||
| `R2_BUCKET_NAME` | R2 bucket name | R2 > Buckets |
|
||||
|
||||
### Configuration
|
||||
```bash
|
||||
# Cloudflare R2 Configuration
|
||||
R2_ACCESS_KEY_ID="f1234567890abcdef1234567890abcde"
|
||||
R2_SECRET_ACCESS_KEY="abc123def456ghi789jkl012mno345pqr678stu901"
|
||||
R2_ENDPOINT="https://1234567890abcdef.r2.cloudflarestorage.com"
|
||||
R2_BUCKET_NAME="prmbr-storage"
|
||||
```
|
||||
|
||||
### Setup Instructions
|
||||
1. Go to Cloudflare Dashboard > R2 Object Storage
|
||||
2. Create a new R2 bucket
|
||||
3. Generate R2 API tokens with read/write permissions
|
||||
4. Note the endpoint URL from bucket settings
|
||||
|
||||
## 💳 Payment Processing (Stripe)
|
||||
|
||||
### Required Variables
|
||||
|
||||
| Variable | Description | Where to Find |
|
||||
|----------|-------------|---------------|
|
||||
| `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` | Stripe publishable key | Stripe Dashboard > API keys |
|
||||
| `STRIPE_SECRET_KEY` | Stripe secret key | Stripe Dashboard > API keys |
|
||||
| `STRIPE_WEBHOOK_SECRET` | Stripe webhook endpoint secret | Stripe Dashboard > Webhooks |
|
||||
| `NEXT_PUBLIC_STRIPE_PRO_PRICE_ID` | Stripe price ID for Pro plan | Stripe Dashboard > Products |
|
||||
|
||||
### Configuration
|
||||
```bash
|
||||
# Stripe Configuration
|
||||
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_live_51234567890abcdefghijklmnopqrstuvwxyz"
|
||||
STRIPE_SECRET_KEY="sk_live_51234567890abcdefghijklmnopqrstuvwxyz"
|
||||
STRIPE_WEBHOOK_SECRET="whsec_1234567890abcdefghijklmnopqrstuvwxyz"
|
||||
NEXT_PUBLIC_STRIPE_PRO_PRICE_ID="price_1234567890abcdefghijk"
|
||||
```
|
||||
|
||||
### Setup Instructions
|
||||
1. Create a Stripe account at [stripe.com](https://stripe.com)
|
||||
2. Go to Dashboard > API keys and copy the keys
|
||||
3. Create a webhook endpoint pointing to `/api/webhooks/stripe`
|
||||
4. Create products and pricing plans in Stripe Dashboard
|
||||
5. Copy the price ID for your Pro subscription plan
|
||||
|
||||
### Webhook Events to Listen
|
||||
Configure your Stripe webhook to listen for these events:
|
||||
- `checkout.session.completed`
|
||||
- `customer.subscription.created`
|
||||
- `customer.subscription.updated`
|
||||
- `customer.subscription.deleted`
|
||||
- `invoice.payment_succeeded`
|
||||
- `invoice.payment_failed`
|
||||
|
||||
## 🤖 AI Model APIs
|
||||
|
||||
### OpenRouter (Text Models)
|
||||
|
||||
| Variable | Description | Where to Get |
|
||||
|----------|-------------|--------------|
|
||||
| `OPENROUTER_API_KEY` | OpenRouter API key | [openrouter.ai](https://openrouter.ai) |
|
||||
|
||||
```bash
|
||||
OPENROUTER_API_KEY="sk-or-v1-1234567890abcdefghijklmnopqrstuvwxyz"
|
||||
```
|
||||
|
||||
### Replicate (Image/Video/Audio Models)
|
||||
|
||||
| Variable | Description | Where to Get |
|
||||
|----------|-------------|--------------|
|
||||
| `REPLICATE_API_TOKEN` | Replicate API token | [replicate.com](https://replicate.com) |
|
||||
|
||||
```bash
|
||||
REPLICATE_API_TOKEN="r8_1234567890abcdefghijklmnopqrstuvwxyz"
|
||||
```
|
||||
|
||||
### UniAPI (Multi-modal Models)
|
||||
|
||||
| Variable | Description | Where to Get |
|
||||
|----------|-------------|--------------|
|
||||
| `UNIAPI_API_KEY` | UniAPI API key | [uniapi.ai](https://uniapi.ai) |
|
||||
|
||||
```bash
|
||||
UNIAPI_API_KEY="uniapi-1234567890abcdefghijklmnopqrstuvwxyz"
|
||||
```
|
||||
|
||||
### Fal.ai (AI Generation Models)
|
||||
|
||||
| Variable | Description | Where to Get |
|
||||
|----------|-------------|--------------|
|
||||
| `FAL_API_KEY` | Fal.ai API key | [fal.ai](https://fal.ai) |
|
||||
|
||||
```bash
|
||||
FAL_API_KEY="fal-1234567890abcdefghijklmnopqrstuvwxyz"
|
||||
```
|
||||
|
||||
### API Key Setup Instructions
|
||||
|
||||
#### OpenRouter
|
||||
1. Visit [openrouter.ai](https://openrouter.ai)
|
||||
2. Sign up and go to API Keys
|
||||
3. Create a new API key with appropriate credits
|
||||
|
||||
#### Replicate
|
||||
1. Visit [replicate.com](https://replicate.com)
|
||||
2. Sign up and go to Account > API tokens
|
||||
3. Create a new token
|
||||
|
||||
#### UniAPI
|
||||
1. Visit [uniapi.ai](https://uniapi.ai)
|
||||
2. Sign up and get your API key from the dashboard
|
||||
3. Add credits to your account
|
||||
|
||||
#### Fal.ai
|
||||
1. Visit [fal.ai](https://fal.ai)
|
||||
2. Sign up and get your API key from the dashboard
|
||||
3. Add credits to your account
|
||||
|
||||
## ⚙️ Application Settings
|
||||
|
||||
### Required Variables
|
||||
|
||||
| Variable | Description | Example |
|
||||
|----------|-------------|---------|
|
||||
| `NEXT_PUBLIC_APP_URL` | Application URL | `https://prmbr.com` |
|
||||
| `NEXTAUTH_URL` | NextAuth URL (same as app URL) | `https://prmbr.com` |
|
||||
| `NEXTAUTH_SECRET` | NextAuth secret for JWT signing | Random 32-character string |
|
||||
|
||||
### Configuration
|
||||
```bash
|
||||
# Application Settings
|
||||
NEXT_PUBLIC_APP_URL="https://prmbr.com"
|
||||
NEXTAUTH_URL="https://prmbr.com"
|
||||
NEXTAUTH_SECRET="your-super-secret-nextauth-secret-32chars"
|
||||
```
|
||||
|
||||
### Generating NEXTAUTH_SECRET
|
||||
```bash
|
||||
# Generate a random secret
|
||||
openssl rand -base64 32
|
||||
```
|
||||
|
||||
## 🔄 Development vs Production
|
||||
|
||||
### Development Environment (.env.local)
|
||||
```bash
|
||||
# Use test/development keys
|
||||
STRIPE_SECRET_KEY="sk_test_..."
|
||||
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_test_..."
|
||||
NEXT_PUBLIC_APP_URL="http://localhost:3000"
|
||||
NEXTAUTH_URL="http://localhost:3000"
|
||||
```
|
||||
|
||||
### Production Environment
|
||||
```bash
|
||||
# Use live/production keys
|
||||
STRIPE_SECRET_KEY="sk_live_..."
|
||||
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_live_..."
|
||||
NEXT_PUBLIC_APP_URL="https://prmbr.com"
|
||||
NEXTAUTH_URL="https://prmbr.com"
|
||||
```
|
||||
|
||||
## 📝 Complete Configuration Examples
|
||||
|
||||
### 🚀 Full Development Configuration
|
||||
|
||||
Create a `.env.local` file:
|
||||
|
||||
```bash
|
||||
# ===========================================
|
||||
# PRMBR - AI PROMPT STUDIO
|
||||
# Development Environment Configuration
|
||||
# ===========================================
|
||||
|
||||
# Database
|
||||
DATABASE_URL="postgresql://postgres:your_password@db.your-project.supabase.co:5432/postgres"
|
||||
|
||||
# Supabase Authentication
|
||||
NEXT_PUBLIC_SUPABASE_URL="https://your-project-id.supabase.co"
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlvdXItcHJvamVjdC1pZCIsInJvbGUiOiJhbm9uIiwiaWF0IjoxNjc5MzE2MDAwLCJleHAiOjE5OTQ4OTIwMDB9.example"
|
||||
SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlvdXItcHJvamVjdC1pZCIsInJvbGUiOiJzZXJ2aWNlX3JvbGUiLCJpYXQiOjE2NzkzMTYwMDAsImV4cCI6MTk5NDg5MjAwMH0.example"
|
||||
|
||||
# Cloudflare R2 Storage
|
||||
R2_ACCESS_KEY_ID="f1234567890abcdef1234567890abcde"
|
||||
R2_SECRET_ACCESS_KEY="abc123def456ghi789jkl012mno345pqr678stu901"
|
||||
R2_ENDPOINT="https://1234567890abcdef.r2.cloudflarestorage.com"
|
||||
R2_BUCKET_NAME="prmbr-dev-storage"
|
||||
|
||||
# Stripe Payment (Test Keys)
|
||||
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_test_51ABC123def456ghi789jkl012mno345PQR678stu901vwx234YZA567bcd890EFG"
|
||||
STRIPE_SECRET_KEY="sk_test_51ABC123def456ghi789jkl012mno345PQR678stu901vwx234YZA567bcd890EFG"
|
||||
STRIPE_WEBHOOK_SECRET="whsec_1234567890abcdefghijklmnopqrstuvwxyz"
|
||||
NEXT_PUBLIC_STRIPE_PRO_PRICE_ID="price_1ABC123def456ghi789jkl01"
|
||||
|
||||
# AI Model APIs
|
||||
OPENROUTER_API_KEY="sk-or-v1-1234567890abcdefghijklmnopqrstuvwxyzABCDEF1234567890"
|
||||
REPLICATE_API_TOKEN="r8_1234567890abcdefghijklmnopqrstuvwxyzABCDEF"
|
||||
UNIAPI_API_KEY="uniapi-1234567890abcdefghijklmnopqrstuvwxyzABCDEF"
|
||||
FAL_API_KEY="fal-1234567890abcdefghijklmnopqrstuvwxyzABCDEF"
|
||||
|
||||
# Application Settings
|
||||
NEXT_PUBLIC_APP_URL="http://localhost:3000"
|
||||
NEXTAUTH_URL="http://localhost:3000"
|
||||
NEXTAUTH_SECRET="super-secret-nextauth-development-key-32-chars-long"
|
||||
```
|
||||
|
||||
### 🌐 Full Production Configuration
|
||||
|
||||
For production deployment (Vercel/Cloudflare):
|
||||
|
||||
```bash
|
||||
# ===========================================
|
||||
# PRMBR - AI PROMPT STUDIO
|
||||
# Production Environment Configuration
|
||||
# ===========================================
|
||||
|
||||
# Database
|
||||
DATABASE_URL="postgresql://postgres:your_password@db.your-project.supabase.co:5432/postgres"
|
||||
|
||||
# Supabase Authentication
|
||||
NEXT_PUBLIC_SUPABASE_URL="https://your-project-id.supabase.co"
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlvdXItcHJvamVjdC1pZCIsInJvbGUiOiJhbm9uIiwiaWF0IjoxNjc5MzE2MDAwLCJleHAiOjE5OTQ4OTIwMDB9.production"
|
||||
SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlvdXItcHJvamVjdC1pZCIsInJvbGUiOiJzZXJ2aWNlX3JvbGUiLCJpYXQiOjE2NzkzMTYwMDAsImV4cCI6MTk5NDg5MjAwMH0.production"
|
||||
|
||||
# Cloudflare R2 Storage
|
||||
R2_ACCESS_KEY_ID="f1234567890abcdef1234567890abcde"
|
||||
R2_SECRET_ACCESS_KEY="abc123def456ghi789jkl012mno345pqr678stu901"
|
||||
R2_ENDPOINT="https://1234567890abcdef.r2.cloudflarestorage.com"
|
||||
R2_BUCKET_NAME="prmbr-production-storage"
|
||||
|
||||
# Stripe Payment (Live Keys)
|
||||
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_live_51ABC123def456ghi789jkl012mno345PQR678stu901vwx234YZA567bcd890EFG"
|
||||
STRIPE_SECRET_KEY="sk_live_51ABC123def456ghi789jkl012mno345PQR678stu901vwx234YZA567bcd890EFG"
|
||||
STRIPE_WEBHOOK_SECRET="whsec_production_1234567890abcdefghijklmnopqrstuvwxyz"
|
||||
NEXT_PUBLIC_STRIPE_PRO_PRICE_ID="price_1ABC123def456ghi789jkl01"
|
||||
|
||||
# AI Model APIs
|
||||
OPENROUTER_API_KEY="sk-or-v1-production-1234567890abcdefghijklmnopqrstuvwxyzABCDEF"
|
||||
REPLICATE_API_TOKEN="r8_production_1234567890abcdefghijklmnopqrstuvwxyz"
|
||||
UNIAPI_API_KEY="uniapi-production-1234567890abcdefghijklmnopqrstuvwxyz"
|
||||
FAL_API_KEY="fal-production-1234567890abcdefghijklmnopqrstuvwxyz"
|
||||
|
||||
# Application Settings
|
||||
NEXT_PUBLIC_APP_URL="https://prmbr.com"
|
||||
NEXTAUTH_URL="https://prmbr.com"
|
||||
NEXTAUTH_SECRET="super-secret-production-nextauth-key-32-chars-long-secure"
|
||||
```
|
||||
|
||||
## 🔒 Security Best Practices
|
||||
|
||||
### 1. Never commit secrets to version control
|
||||
```bash
|
||||
# Add to .gitignore
|
||||
.env.local
|
||||
.env.production
|
||||
.env
|
||||
```
|
||||
|
||||
### 2. Use different keys for development and production
|
||||
|
||||
### 3. Rotate API keys regularly
|
||||
|
||||
### 4. Use environment variable managers in production
|
||||
- Vercel: Project Settings > Environment Variables
|
||||
- Cloudflare Workers: wrangler secret put
|
||||
- Docker: Use secrets or environment files
|
||||
|
||||
### 5. Validate environment variables on startup
|
||||
The application includes validation that checks for required environment variables and fails fast if any are missing.
|
||||
|
||||
## 🚨 Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
1. **Database Connection Fails**
|
||||
- Check DATABASE_URL format
|
||||
- Verify database server is running
|
||||
- Check firewall settings
|
||||
|
||||
2. **Supabase Authentication Issues**
|
||||
- Verify SUPABASE_URL and keys are correct
|
||||
- Check if the keys match the project
|
||||
- Ensure RLS policies are configured
|
||||
|
||||
3. **Stripe Webhook Issues**
|
||||
- Verify webhook endpoint is accessible
|
||||
- Check webhook secret matches
|
||||
- Ensure events are configured correctly
|
||||
|
||||
4. **AI API Issues**
|
||||
- Verify API keys are valid and have credits
|
||||
- Check rate limits
|
||||
- Ensure correct API endpoints
|
||||
|
||||
### Environment Variable Validation
|
||||
|
||||
The application validates all required environment variables on startup. If any are missing, you'll see specific error messages in the console.
|
||||
|
||||
## 📞 Support
|
||||
|
||||
For configuration help:
|
||||
- Email: qsongtianlun@gmail.com
|
||||
- Check the [project documentation](../README.md)
|
||||
- Review the [CLAUDE.md](../CLAUDE.md) for development guidance
|
||||
|
||||
---
|
||||
|
||||
**⚠️ Important**: Keep all API keys and secrets secure. Never share them publicly or commit them to version control.
|
Loading…
Reference in New Issue
Block a user