Production runs Postgres 18; the dev compose file pinned pg16. A pg_dump from prod (v18) cannot be restored by a v16 pg_restore — the dump header is rejected. Matching the major version fixes restores and removes a latent source of dev/prod behaviour drift. Also adopts the pg18 image's data-directory convention: the volume now mounts at /var/lib/postgresql (the image places data in a version subdirectory), and drops the obsolete compose 'version' key.
38 lines
No EOL
1.1 KiB
YAML
38 lines
No EOL
1.1 KiB
YAML
# Local development services for Tia (Postgres + Redis).
|
|
# Postgres major version is pinned to match production.
|
|
services:
|
|
postgres:
|
|
# pg18 to match production (Hetzner prod runs Postgres 18).
|
|
# Keeping dev on the same major version avoids dump/restore mismatches
|
|
# and version-specific behaviour drift.
|
|
image: pgvector/pgvector:pg18
|
|
container_name: tia-postgres
|
|
environment:
|
|
POSTGRES_DB: tia_dev
|
|
POSTGRES_USER: tia
|
|
POSTGRES_PASSWORD: tia_local_dev
|
|
ports:
|
|
- "5433:5432"
|
|
volumes:
|
|
# pg18 image convention: mount at /var/lib/postgresql (NOT .../data).
|
|
# The image places data in a version-specific subdirectory under it.
|
|
- ./data/postgres:/var/lib/postgresql
|
|
- ./docker/init-db:/docker-entrypoint-initdb.d
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U tia -d tia_dev"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: tia-redis
|
|
ports:
|
|
- "6380:6379"
|
|
volumes:
|
|
- ./data/redis:/data
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 5s
|
|
timeout: 3s
|
|
retries: 5 |