- 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.
216 lines
4.6 KiB
Markdown
216 lines
4.6 KiB
Markdown
# Neon Database Guide
|
|
|
|
This project uses [Neon PostgreSQL](https://neon.tech) 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
|
|
|
|
1. Sign up at https://neon.tech
|
|
2. Create a new project: `goodgo-platform`
|
|
|
|
### 2. Create Branches
|
|
|
|
In Neon Console, create branches:
|
|
- `main` (development) - already exists
|
|
- `staging` - create from main
|
|
- `production` - 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=true` for connection pooling (recommended)
|
|
|
|
### 4. Configure Local Development
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
./scripts/db/migrate.sh iam-service dev
|
|
```
|
|
|
|
## Connection String Format
|
|
|
|
```
|
|
postgresql://[user]:[password]@[endpoint]/[dbname]?sslmode=require&pgbouncer=true
|
|
```
|
|
|
|
**Parameters**:
|
|
- `sslmode=require` - Required for Neon
|
|
- `pgbouncer=true` - Enable connection pooling (recommended)
|
|
|
|
## Environment Configuration
|
|
|
|
### Local Development
|
|
|
|
File: `deployments/local/.env.local`
|
|
|
|
```bash
|
|
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:
|
|
```bash
|
|
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:
|
|
```bash
|
|
kubectl create secret generic iam-service-secrets \
|
|
--from-literal=database-url='postgresql://...' \
|
|
-n production
|
|
```
|
|
|
|
## Migrations
|
|
|
|
### Development
|
|
|
|
```bash
|
|
# 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:
|
|
```bash
|
|
./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
|
|
|
|
```bash
|
|
./scripts/db/backup.sh iam-service
|
|
```
|
|
|
|
This creates a SQL dump file in `backups/` directory.
|
|
|
|
### Restore
|
|
|
|
```bash
|
|
# 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
|
|
|
|
1. **Check connection string format**
|
|
- Must include `?sslmode=require`
|
|
- Verify credentials
|
|
|
|
2. **Check IP allowlist**
|
|
- Neon may restrict IPs
|
|
- Add your IP in Neon Console
|
|
|
|
3. **Check branch status**
|
|
- Ensure branch is active
|
|
- Check for maintenance
|
|
|
|
### Migration Issues
|
|
|
|
1. **DATABASE_URL not set**
|
|
```bash
|
|
export DATABASE_URL="your-neon-url"
|
|
```
|
|
|
|
2. **Schema mismatch**
|
|
```bash
|
|
# Reset and re-migrate (dev only!)
|
|
pnpm prisma migrate reset
|
|
```
|
|
|
|
3. **Connection timeout**
|
|
- Add `?pgbouncer=true` for pooling
|
|
- Check Neon console for limits
|
|
|
|
### Performance Issues
|
|
|
|
1. **Enable connection pooling**
|
|
- Add `?pgbouncer=true` to connection string
|
|
|
|
2. **Check query performance**
|
|
- Use Neon Console query analyzer
|
|
- Review slow queries
|
|
|
|
3. **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
|
|
|
|
1. **Always use connection pooling**: `?pgbouncer=true`
|
|
2. **Use SSL**: `?sslmode=require`
|
|
3. **Separate branches**: One per environment
|
|
4. **Regular backups**: Use Neon's automatic backups
|
|
5. **Monitor usage**: Check Neon Console regularly
|
|
|
|
## Resources
|
|
|
|
- [Neon Documentation](https://neon.tech/docs)
|
|
- [Neon Console](https://console.neon.tech)
|
|
- [Prisma + Neon Guide](https://neon.tech/docs/guides/prisma)
|