From 2ba568aa2edf129c56c069ff44f0a925959c3239 Mon Sep 17 00:00:00 2001 From: 3115fcfc-2c0b-4076-927f-ae6531c76061 <212776804+3115fcfc-2c0b-4076-927f-ae6531c76061@users.noreply.github.com> Date: Sat, 24 May 2025 10:09:28 +0000 Subject: [PATCH 1/5] Change for Docker PostgreSQL to Version 17 and OpenProject to Version 16 --- docker/ci/Dockerfile | 2 +- docker/ci/postgresql.conf | 2 +- docker/dev/keycloak/docker-compose.yml | 2 +- docker/prod/Dockerfile | 4 ++-- docker/pullpreview/docker-compose.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docker/ci/Dockerfile b/docker/ci/Dockerfile index 4838d91ab473..b0163d24c812 100644 --- a/docker/ci/Dockerfile +++ b/docker/ci/Dockerfile @@ -6,7 +6,7 @@ ENV NODE_VERSION="22.15.0" ENV DEBIAN_FRONTEND=noninteractive ENV BUNDLE_WITHOUT="development:production:docker" -ENV PGVERSION=13 +ENV PGVERSION=17 RUN wget --quiet -O- https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \ echo "deb http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list diff --git a/docker/ci/postgresql.conf b/docker/ci/postgresql.conf index 39e33488f1ea..33d4bd9ffc35 100644 --- a/docker/ci/postgresql.conf +++ b/docker/ci/postgresql.conf @@ -1,4 +1,4 @@ -# DB Version: 13 +# DB Version: 17 # OS Type: linux # DB Type: web # Total Memory (RAM): 32 GB diff --git a/docker/dev/keycloak/docker-compose.yml b/docker/dev/keycloak/docker-compose.yml index f089de51119d..a8cd4d2803a0 100644 --- a/docker/dev/keycloak/docker-compose.yml +++ b/docker/dev/keycloak/docker-compose.yml @@ -1,6 +1,6 @@ services: db-keycloak: - image: postgres:13 + image: postgres:17 restart: unless-stopped networks: - external diff --git a/docker/prod/Dockerfile b/docker/prod/Dockerfile index e7ee31dee78f..f25ad5135987 100755 --- a/docker/prod/Dockerfile +++ b/docker/prod/Dockerfile @@ -15,8 +15,8 @@ ENV DOCKER=1 ENV APP_USER=app ENV APP_PATH=/app ENV APP_DATA_PATH=/var/openproject/assets -ENV PGVERSION="13" -ENV PGVERSION_CHOICES="13 15 17" +ENV PGVERSION="17" +ENV PGVERSION_CHOICES="17" ENV PGBIN="/usr/lib/postgresql/$PGVERSION/bin" ENV PATH="$PGBIN:$PATH" ENV BUNDLE_WITHOUT="development:test" diff --git a/docker/pullpreview/docker-compose.yml b/docker/pullpreview/docker-compose.yml index f6a3bb409c39..9b725caa753b 100644 --- a/docker/pullpreview/docker-compose.yml +++ b/docker/pullpreview/docker-compose.yml @@ -45,7 +45,7 @@ services: - "caddy_data:/data" db: - image: postgres:13 + image: postgres:17 environment: POSTGRES_USER: app POSTGRES_PASSWORD: p4ssw0rd From 2b494e00493fb1c84498e183b2af7ffbcb7f10d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Tue, 17 Jun 2025 09:28:23 +0200 Subject: [PATCH 2/5] Still allow running older PGVERSION while users are migrating --- docker/prod/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/prod/Dockerfile b/docker/prod/Dockerfile index f25ad5135987..0f554390f614 100755 --- a/docker/prod/Dockerfile +++ b/docker/prod/Dockerfile @@ -16,7 +16,7 @@ ENV APP_USER=app ENV APP_PATH=/app ENV APP_DATA_PATH=/var/openproject/assets ENV PGVERSION="17" -ENV PGVERSION_CHOICES="17" +ENV PGVERSION_CHOICES="13 15 17" ENV PGBIN="/usr/lib/postgresql/$PGVERSION/bin" ENV PATH="$PGBIN:$PATH" ENV BUNDLE_WITHOUT="development:test" From 43f91b0fb7500921f178b5b08705cc6cc81f8672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Tue, 17 Jun 2025 12:55:44 +0200 Subject: [PATCH 3/5] Add warning when PGVERSION differs --- docker/prod/entrypoint.sh | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docker/prod/entrypoint.sh b/docker/prod/entrypoint.sh index 546c102b3dd5..8b4065cba3a4 100755 --- a/docker/prod/entrypoint.sh +++ b/docker/prod/entrypoint.sh @@ -30,8 +30,19 @@ if [ "$(id -u)" = '0' ]; then # reexport PGVERSION and PGBIN env variables according to postgres version of existing cluster (if any) # this must happen in the entrypoint if [ -f "$PGDATA/PG_VERSION" ]; then - export PGVERSION="$(cat "$PGDATA/PG_VERSION")" + EXISTING_PGVERSION="$(cat "$PGDATA/PG_VERSION")" echo "-----> Existing PostgreSQL cluster found in $PGDATA." + + # Check for version mismatch: if Docker default is PG 17 but existing data is PG 13 + if [ "$PGVERSION" = "17" ] && [ "$EXISTING_PGVERSION" = "13" ]; then + echo "WARNING: PostgreSQL version mismatch detected!" + echo "Your container is configured for PostgreSQL 17, but existing data is from PostgreSQL 13." + echo "You need to upgrade your postgresql data before you can use it with PGVERSION=17 in the container" + echo "Please see the migration guide: https://www.openproject.org/docs/installation-and-operations/misc/migration-to-postgresql17/" + echo "Continuing with PostgreSQL 13 for now..." + fi + + export PGVERSION="$EXISTING_PGVERSION" fi export PGBIN="/usr/lib/postgresql/$PGVERSION/bin" export PGCONF_FILE="/etc/postgresql/$PGVERSION/main/postgresql.conf" From ffdade4839e9abce3cb6be2421977d3a392ac186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Fri, 20 Jun 2025 12:04:58 +0200 Subject: [PATCH 4/5] Generalize warning --- docker/prod/entrypoint.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docker/prod/entrypoint.sh b/docker/prod/entrypoint.sh index 8b4065cba3a4..231a3b2a8658 100755 --- a/docker/prod/entrypoint.sh +++ b/docker/prod/entrypoint.sh @@ -33,13 +33,13 @@ if [ "$(id -u)" = '0' ]; then EXISTING_PGVERSION="$(cat "$PGDATA/PG_VERSION")" echo "-----> Existing PostgreSQL cluster found in $PGDATA." - # Check for version mismatch: if Docker default is PG 17 but existing data is PG 13 - if [ "$PGVERSION" = "17" ] && [ "$EXISTING_PGVERSION" = "13" ]; then + # Check for version mismatch between configured and existing PostgreSQL versions + if [ "$PGVERSION" != "$EXISTING_PGVERSION" ]; then echo "WARNING: PostgreSQL version mismatch detected!" - echo "Your container is configured for PostgreSQL 17, but existing data is from PostgreSQL 13." - echo "You need to upgrade your postgresql data before you can use it with PGVERSION=17 in the container" + echo "Your container is configured for PostgreSQL $PGVERSION, but existing data is from PostgreSQL $EXISTING_PGVERSION." + echo "You need to upgrade your postgresql data before you can use it with PGVERSION=$PGVERSION in the container" echo "Please see the migration guide: https://www.openproject.org/docs/installation-and-operations/misc/migration-to-postgresql17/" - echo "Continuing with PostgreSQL 13 for now..." + echo "Continuing with PostgreSQL $EXISTING_PGVERSION for now..." fi export PGVERSION="$EXISTING_PGVERSION" From 5dfcaeaa44c170aba106dbcf1a2e63598706e5d7 Mon Sep 17 00:00:00 2001 From: Markus Kahl Date: Fri, 20 Jun 2025 15:52:46 +0100 Subject: [PATCH 5/5] fix docker build db migration by granting missing permissions --- docker/prod/setup/postinstall-onprem.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/prod/setup/postinstall-onprem.sh b/docker/prod/setup/postinstall-onprem.sh index 5c167b1862a5..72ee90b7dabd 100755 --- a/docker/prod/setup/postinstall-onprem.sh +++ b/docker/prod/setup/postinstall-onprem.sh @@ -45,6 +45,8 @@ su - postgres -c "$PGBIN/pg_ctl -D /tmp/nulldb -l /dev/null -l /tmp/nulldb/log - sleep 5 echo "create database structure; create user structure with encrypted password 'p4ssw0rd'; grant all privileges on database structure to structure;" | su - postgres -c psql +# since postgres 15 we need to also explictly grant the user permissions on the public schema +echo "grant all on schema public to structure;" | su - postgres -c 'psql -d structure' # dump schema DATABASE_URL=postgres://structure:p4ssw0rd@127.0.0.1/structure RAILS_ENV=production bundle exec rake db:migrate db:schema:dump db:schema:cache:dump