5.5 KiB
Service Configuration Migration Guide
This guide shows how to update each service to use the central PostgreSQL database.
Service-Specific Configuration Updates
1. Synapse Matrix
Current configuration in synapse/docker-compose.yml:
synapse_db:
image: docker.io/library/postgres:17
restart: always
volumes:
- ${SYNAPSE_POSTGRES_DATA_DIR}:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${SYNAPSE_POSTGRES_DB}
POSTGRES_USER: ${SYNAPSE_POSTGRES_USER}
POSTGRES_PASSWORD: ${SYNAPSE_POSTGRES_PASSWORD}
POSTGRES_INITDB_ARGS: '--encoding=UTF-8 --locale=C'
ports:
- 5442:5432
synapse:
# ... other config ...
environment:
POSTGRES_HOST: synapse_db
POSTGRES_PORT: 5432
POSTGRES_DB: ${SYNAPSE_POSTGRES_DB}
POSTGRES_USER: ${SYNAPSE_POSTGRES_USER}
POSTGRES_PASSWORD: ${SYNAPSE_POSTGRES_PASSWORD}
Updated configuration:
# Remove the synapse_db service entirely
synapse:
# ... other config ...
environment:
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
POSTGRES_DB: synapse
POSTGRES_USER: synapse_user
POSTGRES_PASSWORD: ${SYNAPSE_POSTGRES_PASSWORD}
depends_on:
- postgres # Add this dependency
networks:
- default # Ensure same network as postgres container
2. Paperless
Current configuration in paperless/docker-compose.yml:
db:
image: docker.io/library/postgres:17
restart: always
volumes:
- ${PAPERLESS_POSTGRES_DATA_DIR}:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${PAPERLESS_POSTGRES_DB}
POSTGRES_USER: ${PAPERLESS_POSTGRES_USER}
POSTGRES_PASSWORD: ${PAPERLESS_POSTGRES_PASSWORD}
ports:
- 5434:5432
paperless:
# ... other config ...
environment:
PAPERLESS_DBHOST: db
PAPERLESS_DBNAME: ${PAPERLESS_POSTGRES_DB}
PAPERLESS_DBUSER: ${PAPERLESS_POSTGRES_USER}
PAPERLESS_DBPASS: ${PAPERLESS_POSTGRES_PASSWORD}
Updated configuration:
# Remove the db service entirely
paperless:
# ... other config ...
environment:
PAPERLESS_DBHOST: postgres
PAPERLESS_DBNAME: paperless
PAPERLESS_DBUSER: paperless_user
PAPERLESS_DBPASS: ${PAPERLESS_POSTGRES_PASSWORD}
depends_on:
- postgres # Add this dependency
networks:
- default
3. Immich
Current configuration in immich/docker-compose.yml:
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0
environment:
POSTGRES_USER: ${IMMICH_POSTGRES_USER}
POSTGRES_PASSWORD: ${IMMICH_POSTGRES_PASSWORD}
POSTGRES_DB: ${IMMICH_POSTGRES_DB}
POSTGRES_INITDB_ARGS: '--data-checksums'
ports:
- 5433:5432
volumes:
- ${IMMICH_DB_LOCATION}:/var/lib/postgresql/data
immich-server:
# ... other config ...
environment:
DB_HOSTNAME: ${IMMICH_DB_HOSTNAME}
DB_USERNAME: ${IMMICH_POSTGRES_USER}
DB_PASSWORD: ${IMMICH_POSTGRES_PASSWORD}
DB_DATABASE_NAME: ${IMMICH_POSTGRES_DB}
Updated configuration:
# Remove the database service entirely
immich-server:
# ... other config ...
environment:
DB_HOSTNAME: postgres
DB_USERNAME: immich_user
DB_PASSWORD: ${IMMICH_POSTGRES_PASSWORD}
DB_DATABASE_NAME: immich
depends_on:
- postgres # Add this dependency
networks:
- default
4. Shlink
Current configuration in shlink/docker-compose.yml:
shlink_db:
image: postgres:17
container_name: shlink_db
restart: always
volumes:
- ${SHLINK_POSTGRES_DIR}:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${SHLINK_POSTGRES_DB}
POSTGRES_USER: ${SHLINK_POSTGRES_USER}
POSTGRES_PASSWORD: ${SHLINK_POSTGRES_PASSWORD}
ports:
- 5436:5432
shlink:
# ... other config ...
environment:
DB_HOST: shlink_db
DB_NAME: ${SHLINK_POSTGRES_DB}
DB_USER: ${SHLINK_POSTGRES_USER}
DB_PASSWORD: ${SHLINK_POSTGRES_PASSWORD}
Updated configuration:
# Remove the shlink_db service entirely
shlink:
# ... other config ...
environment:
DB_HOST: postgres
DB_NAME: shlink
DB_USER: shlink_user
DB_PASSWORD: ${SHLINK_POSTGRES_PASSWORD}
depends_on:
- postgres # Add this dependency
networks:
- default
General Pattern
For each service:
-
Remove the service-specific database container
-
Update the main service container's environment variables:
POSTGRES_HOST/DB_HOST→postgresPOSTGRES_PORT/DB_PORT→5432POSTGRES_DB/DB_NAME→<service_name>(e.g.,synapse,paperless)POSTGRES_USER/DB_USER→<service_name>_userPOSTGRES_PASSWORD/DB_PASSWORD→${SERVICE_POSTGRES_PASSWORD}(keep existing)
-
Add dependency on
postgresservice -
Update network configuration if needed (ensure services can reach postgres container)
Testing Migration
After updating each service:
- Stop the service:
docker-compose down - Start with new config:
docker-compose up -d - Check logs:
docker-compose logs -f - Test functionality: Verify the service works correctly
- Rollback plan: Keep old database container until migration is confirmed successful
Network Considerations
Ensure all services are on the same Docker network or can reach the central_postgres container. You may need to:
- Add services to the same network
- Use Docker's internal DNS
- Configure network aliases if needed
Password Management
Keep using the same password variables but ensure they match the central database user passwords. The migration script preserves existing passwords for seamless transition.