From 8ee7d71fe32c153ba1f00613f999ee80c44f0286 Mon Sep 17 00:00:00 2001 From: Michael Simmons Date: Sun, 27 Sep 2026 01:01:10 +0000 Subject: [PATCH] Postgres 16 -> 18 in prod, dev, design and CI, on a fresh volume Postgres 18 images keep PGDATA at /var/lib/postgresql/18/docker, so the volume mounts at /var/lib/postgresql. Prod gets a new pg18_data volume and the 16.x cluster in pg_data is kept untouched as the rollback copy; data moves by pg_dumpall/restore (see the PR for the runbook). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015bPJkYdnfm2KVcEzTiJuSM --- .github/workflows/ci.yml | 2 +- docker-compose.design.yml | 2 +- docker-compose.prod.yml | 11 ++++++++--- docker-compose.yml | 6 +++--- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4fd1284..0b6a90b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -73,7 +73,7 @@ jobs: --health-timeout 3s --health-retries 10 postgres: - image: postgres:16-alpine + image: postgres:18-alpine env: POSTGRES_USER: tensies POSTGRES_PASSWORD: tensies diff --git a/docker-compose.design.yml b/docker-compose.design.yml index 7d9bbad..e63d69a 100644 --- a/docker-compose.design.yml +++ b/docker-compose.design.yml @@ -49,7 +49,7 @@ services: retries: 10 postgres: - image: postgres:16-alpine + image: postgres:18-alpine environment: POSTGRES_USER: tensies POSTGRES_PASSWORD: tensies diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index a13f3e1..66a6419 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -144,13 +144,17 @@ services: restart: unless-stopped postgres: - image: postgres:16.15-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + image: postgres:18.6-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 environment: POSTGRES_USER: tensies POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}" POSTGRES_DB: tensies volumes: - - pg_data:/var/lib/postgresql/data + # Postgres 18 images keep PGDATA in a versioned subdirectory + # (/var/lib/postgresql/18/docker), so the volume mounts one level up. + # pg18_data is a fresh volume: the 16.x cluster in pg_data is left + # untouched as the rollback copy (data moved by dump/restore). + - pg18_data:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U tensies"] interval: 5s @@ -220,6 +224,7 @@ networks: driver: bridge volumes: - pg_data: + pg_data: # Postgres 16 cluster, kept as the rollback copy + pg18_data: prom_data: grafana_data: diff --git a/docker-compose.yml b/docker-compose.yml index df2c6b0..965ba2e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -62,13 +62,13 @@ services: retries: 10 postgres: - image: postgres:16-alpine + image: postgres:18-alpine environment: POSTGRES_USER: tensies POSTGRES_PASSWORD: tensies POSTGRES_DB: tensies volumes: - - pg_data:/var/lib/postgresql/data + - pg18_data:/var/lib/postgresql ports: - "5432:5432" healthcheck: @@ -123,6 +123,6 @@ services: - postgres volumes: - pg_data: + pg18_data: prom_data: grafana_data: