- Renamed auth-service to iam-service across various files for consistency. - Updated Dockerfiles, deployment configurations, and documentation to reflect the service name change. - Enhanced testing commands in documentation to point to the new iam-service. - Removed outdated auth-service files and configurations to streamline the project structure. - Improved bilingual documentation for clarity on the new service structure and usage.
4.6 KiB
4.6 KiB
Neon Database Guide
This project uses Neon PostgreSQL for all environments.
Why Neon?
- ✅ Serverless: No infrastructure management
- ✅ Branching: Separate databases for dev/staging/prod
- ✅ Auto-scaling: Handles traffic spikes automatically
- ✅ Point-in-time restore: Easy recovery from mistakes
- ✅ Free tier: Perfect for development
- ✅ Connection pooling: Built-in PgBouncer support
Quick Start
1. Create Neon Account
- Sign up at https://neon.tech
- Create a new project:
goodgo-platform
2. Create Branches
In Neon Console, create branches:
main(development) - already existsstaging- create from mainproduction- create from main
3. Get Connection Strings
For each branch, copy the connection string:
- Format:
postgresql://user:password@ep-xxx.region.neon.tech/dbname?sslmode=require - Add
?pgbouncer=truefor connection pooling (recommended)
4. Configure Local Development
# Create .env.local
cp deployments/local/env.local.example deployments/local/.env.local
# Edit .env.local and add:
DATABASE_URL=postgresql://user:pass@ep-xxx.region.neon.tech/dbname?sslmode=require&pgbouncer=true
5. Run Migrations
./scripts/db/migrate.sh iam-service dev
Connection String Format
postgresql://[user]:[password]@[endpoint]/[dbname]?sslmode=require&pgbouncer=true
Parameters:
sslmode=require- Required for Neonpgbouncer=true- Enable connection pooling (recommended)
Environment Configuration
Local Development
File: deployments/local/.env.local
DATABASE_URL=postgresql://user:pass@ep-xxx.region.neon.tech/dbname?sslmode=require&pgbouncer=true
Staging
Store in GitHub Secrets: NEON_DATABASE_URL_STAGING
Or in Kubernetes:
kubectl create secret generic iam-service-secrets \
--from-literal=database-url='postgresql://...' \
-n staging
Production
Store in GitHub Secrets: NEON_DATABASE_URL_PRODUCTION
Or in Kubernetes:
kubectl create secret generic iam-service-secrets \
--from-literal=database-url='postgresql://...' \
-n production
Migrations
Development
# Create new migration
./scripts/db/migrate.sh iam-service dev
# This will:
# 1. Create migration file
# 2. Apply to database
# 3. Update Prisma Client
Staging/Production
Migrations run automatically in CI/CD:
- Before deployment to staging
- Before deployment to production (with approval)
Manual migration:
./scripts/db/migrate.sh iam-service deploy
Backup & Restore
Automatic Backups
Neon provides automatic backups. Access via Neon Console:
- Point-in-time restore
- Branch restore
- Export data
Manual Backup
./scripts/db/backup.sh iam-service
This creates a SQL dump file in backups/ directory.
Restore
# From Neon Console (recommended)
# Or using psql:
psql $DATABASE_URL < backup.sql
Monitoring
Monitor your databases via Neon Console:
- Connection metrics
- Query performance
- Storage usage
- Branch status
Troubleshooting
Connection Issues
-
Check connection string format
- Must include
?sslmode=require - Verify credentials
- Must include
-
Check IP allowlist
- Neon may restrict IPs
- Add your IP in Neon Console
-
Check branch status
- Ensure branch is active
- Check for maintenance
Migration Issues
-
DATABASE_URL not set
export DATABASE_URL="your-neon-url" -
Schema mismatch
# Reset and re-migrate (dev only!) pnpm prisma migrate reset -
Connection timeout
- Add
?pgbouncer=truefor pooling - Check Neon console for limits
- Add
Performance Issues
-
Enable connection pooling
- Add
?pgbouncer=trueto connection string
- Add
-
Check query performance
- Use Neon Console query analyzer
- Review slow queries
-
Optimize indexes
- Review Prisma schema
- Add indexes for frequent queries
Cost Optimization
- Free tier: 0.5 GB storage, sufficient for dev
- Staging: Use free tier or minimal paid plan
- Production: Scale based on usage
- Branching: Free branches for testing
Best Practices
- Always use connection pooling:
?pgbouncer=true - Use SSL:
?sslmode=require - Separate branches: One per environment
- Regular backups: Use Neon's automatic backups
- Monitor usage: Check Neon Console regularly