Database Configuration¶
Switchboard supports MongoDB and PostgreSQL as the primary database.
Database Selection¶
Set the database type:
MongoDB Configuration¶
Connection URL¶
URL Components¶
| Component | Description | Example |
|---|---|---|
username | Database user | switchboard |
password | User password | password123 |
host | MongoDB host | localhost |
port | MongoDB port | 27017 |
database | Database name | switchboard |
Replica Set¶
For production, use a replica set:
Connection Options¶
Add options to the connection string:
Common options:
| Option | Description |
|---|---|
authSource | Authentication database |
replicaSet | Replica set name |
retryWrites | Retry failed writes |
w | Write concern |
maxPoolSize | Connection pool size |
Docker Configuration¶
services:
mongodb:
image: mongo:7
environment:
- MONGO_INITDB_ROOT_USERNAME=switchboard
- MONGO_INITDB_ROOT_PASSWORD=${MONGODB_PASSWORD}
volumes:
- mongodb_data:/data/db
ports:
- "27017:27017"
PostgreSQL Configuration¶
Connection URL¶
URL Components¶
| Component | Description | Example |
|---|---|---|
username | Database user | switchboard |
password | User password | password123 |
host | PostgreSQL host | localhost |
port | PostgreSQL port | 5432 |
database | Database name | switchboard |
Connection Options¶
Common options:
| Option | Description |
|---|---|
sslmode | SSL mode (disable, require, verify-full) |
pool_max | Maximum pool connections |
pool_min | Minimum pool connections |
connect_timeout | Connection timeout (seconds) |
Docker Configuration¶
services:
postgres:
image: postgres:16
environment:
- POSTGRES_USER=switchboard
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=switchboard
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
Redis Configuration¶
Redis is used for caching and session management.
With Password¶
With Database Selection¶
Docker Configuration¶
services:
redis:
image: redis:7-alpine
command: redis-server --requirepass ${REDIS_PASSWORD}
ports:
- "6379:6379"
ClickHouse Configuration¶
ClickHouse is used for analytics and event streaming.
Docker Configuration¶
services:
clickhouse:
image: clickhouse/clickhouse-server:latest
environment:
- CLICKHOUSE_USER=switchboard
- CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD}
- CLICKHOUSE_DB=chainsync_analytics
volumes:
- clickhouse_data:/var/lib/clickhouse
ports:
- "8123:8123"
Database Migrations¶
Running Migrations¶
# Run all pending migrations
npm run db:migrate
# Rollback last migration
npm run db:migrate:rollback
# Reset database
npm run db:reset
Creating Migrations¶
Connection Pooling¶
MongoDB Pool Settings¶
Configure via connection URL:
PostgreSQL Pool Settings¶
Configure via connection URL or environment:
Production Recommendations¶
MongoDB¶
- Use Replica Sets - Minimum 3 nodes
- Enable Authentication - Use SCRAM-SHA-256
- Configure Connection Pool - Size based on workload
- Enable SSL/TLS - Encrypt in transit
- Regular Backups - Use mongodump or cloud backups
PostgreSQL¶
- Use Replication - Primary with standby
- Enable SSL - Use
sslmode=verify-full - Configure Pool Size - Based on available connections
- Use Connection Pooler - PgBouncer for high concurrency
- Regular Backups - Use pg_dump or cloud backups
Redis¶
- Enable Persistence - AOF or RDB snapshots
- Configure Memory - Set maxmemory policy
- Use Password - Enable authentication
- Consider Redis Cluster - For high availability
Troubleshooting¶
Connection Refused¶
Authentication Failed¶
# Verify credentials
docker-compose exec mongodb mongosh -u switchboard -p password
# Check authSource
MONGODB_URL=mongodb://user:pass@host:27017/db?authSource=admin
Connection Timeout¶
# Increase timeout
MONGODB_URL=mongodb://host:27017/db?connectTimeoutMS=10000
# Check network connectivity
ping mongodb-host