From 8f1b2d9df855218ee66d976852ea311362af748f Mon Sep 17 00:00:00 2001 From: adrian Date: Wed, 3 Sep 2025 09:56:14 +0200 Subject: [PATCH] feat: split postgres.Dockerfile in two stages to not include build pkgs into the final image. It also adds the postgres user at the end --- protocol-testing/docker-compose.yaml | 8 +++----- protocol-testing/postgres.Dockerfile | 22 ++++++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/protocol-testing/docker-compose.yaml b/protocol-testing/docker-compose.yaml index 18621bc..4e3efa8 100644 --- a/protocol-testing/docker-compose.yaml +++ b/protocol-testing/docker-compose.yaml @@ -1,4 +1,3 @@ -version: "3.1" services: db: build: @@ -7,13 +6,12 @@ services: restart: "always" environment: POSTGRES_PASSWORD: mypassword - POSTGRES_DATABASE: tycho_indexer_0 - POSTGRES_USERNAME: postgres - POSTGRESQL_SHARED_PRELOAD_LIBRARIES: pg_cron + POSTGRES_USER: postgres + POSTGRES_DB: tycho_indexer_0 ports: - "5431:5432" shm_size: "1gb" volumes: - postgres_data:/var/lib/postgresql/data volumes: - postgres_data: \ No newline at end of file + postgres_data: diff --git a/protocol-testing/postgres.Dockerfile b/protocol-testing/postgres.Dockerfile index 5be6b96..6ecffaa 100644 --- a/protocol-testing/postgres.Dockerfile +++ b/protocol-testing/postgres.Dockerfile @@ -1,13 +1,13 @@ # This Dockerfile creates a custom postgres image used for CI and local deployment. -# This is required because we use some postgres extensions that aren't in the generic -# Postgres image such as pg_partman or pg_cron. +# Includes the extensions: pg_partman, pg_cron. -# As an image with pg_partman already exist, we start from this one and add pg_cron -# and possibly other extensions on top of that. -FROM ghcr.io/dbsystel/postgresql-partman:15-5 +# Stage 1: Build pg_cron extension +FROM ghcr.io/dbsystel/postgresql-partman:15-5 AS builder ARG PGCRON_VERSION="1.6.2" USER root -RUN apk update && apk add --no-cache wget build-base clang19 llvm19 + +RUN apk update && apk add --no-cache build-base clang19 llvm19 wget + RUN cd /tmp \ && wget "https://github.com/citusdata/pg_cron/archive/refs/tags/v${PGCRON_VERSION}.tar.gz" \ && tar zxf v${PGCRON_VERSION}.tar.gz \ @@ -16,10 +16,16 @@ RUN cd /tmp \ && make install \ && cd .. && rm -r pg_cron-${PGCRON_VERSION} v${PGCRON_VERSION}.tar.gz +# Stage 2: Final image, copy built extension +FROM ghcr.io/dbsystel/postgresql-partman:15-5 +USER root + +COPY --from=builder /usr/local/lib/postgresql/pg_cron.so /usr/local/lib/postgresql/ +COPY --from=builder /usr/local/share/postgresql/extension/pg_cron* /usr/local/share/postgresql/extension/ + # Add configuration to postgresql.conf template # Start with postgres database, then switch to tycho_indexer_0 after it's created RUN echo "shared_preload_libraries = 'pg_partman_bgw,pg_cron'" >> /usr/local/share/postgresql/postgresql.conf.sample \ && echo "cron.database_name = 'tycho_indexer_0'" >> /usr/local/share/postgresql/postgresql.conf.sample -# Stay as root user for PostgreSQL to work properly -# USER 1001 \ No newline at end of file +USER postgres