Add central postgres instance
This commit is contained in:
145
central-database/README.md
Normal file
145
central-database/README.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# Central PostgreSQL Database Consolidation
|
||||
|
||||
This directory contains the configuration for consolidating all PostgreSQL databases into a single PostgreSQL 18 instance with schema isolation.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Before (Multiple Containers)
|
||||
```
|
||||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||
│ Synapse DB │ │ Paperless DB │ │ Immich DB │
|
||||
│ PostgreSQL 17 │ │ PostgreSQL 17 │ │ PostgreSQL 14 │
|
||||
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||||
Port 5442 Port 5434 Port 5433
|
||||
```
|
||||
|
||||
### After (Single Container)
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ PostgreSQL 18 (container name: postgres) │
|
||||
│ │
|
||||
│ ┌─────────────────┐ ┌─────────────────┐ │
|
||||
│ │ synapse │ │ paperless │ │
|
||||
│ │ database │ │ database │ │
|
||||
│ └─────────────────┘ └─────────────────┘ │
|
||||
│ │
|
||||
│ ┌─────────────────┐ ┌─────────────────┐ │
|
||||
│ │ immich │ │ shlink │ │
|
||||
│ │ database │ │ database │ │
|
||||
│ └─────────────────┘ └─────────────────┘ │
|
||||
│ │
|
||||
│ Extensions: vector, pg_vectorscale │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
Port 5432
|
||||
```
|
||||
|
||||
## Setup Instructions
|
||||
|
||||
### 1. Setup Environment
|
||||
```bash
|
||||
cd central-database
|
||||
cp .env.template .env
|
||||
# Edit .env with your actual passwords (do not commit this file)
|
||||
```
|
||||
|
||||
### 2. Build and Start PostgreSQL Container
|
||||
```bash
|
||||
docker-compose up -d --build postgres
|
||||
```
|
||||
|
||||
### 3. Verify Database is Running
|
||||
```bash
|
||||
docker-compose logs -f postgres
|
||||
docker-compose exec postgres psql -U admin -c "\l"
|
||||
```
|
||||
|
||||
### 4. Migrate Services
|
||||
Use the generic migration script for each service:
|
||||
|
||||
```bash
|
||||
# Set environment variables (or use .env file)
|
||||
export SYNAPSE_POSTGRES_PASSWORD="your_actual_password"
|
||||
|
||||
# Example: Migrate Synapse
|
||||
./migrate_service.sh synapse localhost 5442 synapse synapse_password synapse
|
||||
|
||||
# Example: Migrate Paperless
|
||||
./migrate_service.sh paperless localhost 5434 paperless paperless_password paperless
|
||||
```
|
||||
|
||||
### 5. Update Service Configurations
|
||||
After migration, update each service's docker-compose.yml to point to the central postgres container:
|
||||
|
||||
```yaml
|
||||
# Example for Synapse
|
||||
environment:
|
||||
POSTGRES_HOST: postgres
|
||||
POSTGRES_PORT: 5432
|
||||
POSTGRES_DB: synapse
|
||||
POSTGRES_USER: synapse_user
|
||||
POSTGRES_PASSWORD: ${SYNAPSE_POSTGRES_PASSWORD}
|
||||
```
|
||||
|
||||
## Migration Order Recommendation
|
||||
1. **Non-critical services first**: shlink, spliit
|
||||
2. **Document management**: paperless
|
||||
3. **Media services**: immich, audiomuse
|
||||
4. **Matrix ecosystem**: mas, signal, whatsapp, synapse
|
||||
|
||||
## Backup Strategy
|
||||
|
||||
### Full Backup (all databases)
|
||||
```bash
|
||||
docker-compose exec postgres pg_dumpall -U admin > full_backup_$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
### Individual Database Backup
|
||||
```bash
|
||||
# Backup specific database
|
||||
docker-compose exec postgres pg_dump -U synapse_user -d synapse > synapse_backup_$(date +%Y%m%d).sql
|
||||
|
||||
# Backup all databases individually
|
||||
for db in synapse mas signal whatsapp paperless immich shlink spliit audiomuse; do
|
||||
docker-compose exec postgres pg_dump -U ${db}_user -d $db > ${db}_backup_$(date +%Y%m%d).sql
|
||||
done
|
||||
```
|
||||
|
||||
### Automated Backup (add to cron)
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# Daily backup script
|
||||
BACKUP_DIR="/backups/postgres"
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# Full backup
|
||||
docker-compose -f /path/to/central-database/docker-compose.yml exec postgres pg_dumpall -U admin | gzip > $BACKUP_DIR/full_backup_$(date +%Y%m%d_%H%M%S).sql.gz
|
||||
|
||||
# Individual database backups
|
||||
for db in synapse mas signal whatsapp paperless immich shlink spliit audiomuse; do
|
||||
docker-compose -f /path/to/central-database/docker-compose.yml exec postgres pg_dump -U ${db}_user -d $db | gzip > $BACKUP_DIR/${db}_backup_$(date +%Y%m%d_%H%M%S).sql.gz
|
||||
done
|
||||
|
||||
# Keep last 7 days
|
||||
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Connection Issues
|
||||
- Verify central database is running: `docker-compose ps`
|
||||
- Check logs: `docker-compose logs central_postgres`
|
||||
- Test connection: `psql -h localhost -p 5432 -U admin -d central_db`
|
||||
|
||||
### Permission Issues
|
||||
- Ensure service users have correct permissions on their schemas
|
||||
- Check schema ownership: `\dn+` in psql
|
||||
|
||||
### Extension Issues
|
||||
- Verify extensions are loaded: `\dx` in psql
|
||||
- Check PostgreSQL logs for extension errors
|
||||
|
||||
## Security Notes
|
||||
- Use strong passwords for all service users
|
||||
- Rotate passwords after migration
|
||||
- Consider using PostgreSQL role attributes for additional security
|
||||
- Enable SSL for production environments
|
||||
Reference in New Issue
Block a user