178 lines
6.9 KiB
Docker
178 lines
6.9 KiB
Docker
# syntax=docker/dockerfile:1.13
|
|
|
|
ARG POSTGRES_MAJOR=17
|
|
ARG POSTGRES_MINOR=2
|
|
ARG IMAGE_FLAVOR=standard
|
|
ARG DISTRO=bookworm
|
|
ARG IMAGE_BASE=ghcr.io/cloudnative-pg/postgresql:${POSTGRES_MAJOR}.${POSTGRES_MINOR}-${IMAGE_FLAVOR}-${DISTRO}
|
|
|
|
FROM ${IMAGE_BASE} AS base
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
ARG POSTGRES_MAJOR
|
|
|
|
USER root
|
|
|
|
RUN apt-get update && \
|
|
apt-get install --yes --no-install-recommends \
|
|
libsodium23 \
|
|
postgresql-${POSTGRES_MAJOR}-cron \
|
|
postgresql-${POSTGRES_MAJOR}-http \
|
|
postgresql-${POSTGRES_MAJOR}-hypopg \
|
|
postgresql-${POSTGRES_MAJOR}-pgrouting \
|
|
postgresql-${POSTGRES_MAJOR}-pgtap \
|
|
postgresql-${POSTGRES_MAJOR}-plpgsql-check \
|
|
postgresql-${POSTGRES_MAJOR}-postgis-3 \
|
|
postgresql-${POSTGRES_MAJOR}-wal2json \
|
|
postgresql-${POSTGRES_MAJOR}-rum \
|
|
postgresql-${POSTGRES_MAJOR}-repack \
|
|
postgresql-${POSTGRES_MAJOR}-timescaledb && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
USER 26
|
|
|
|
FROM ${IMAGE_BASE} AS builder
|
|
|
|
ARG POSTGRES_MAJOR
|
|
ARG PG_SAFEUPDATE_VERSION=1.5
|
|
ARG PG_NET_VERSION=v0.9.1
|
|
ARG PGSODIUM_VERSION=v3.1.9
|
|
ARG PG_HASHIDS_VERSION=v1.2.1
|
|
ARG PG_TLE_VERSION=v1.4.0
|
|
ARG PG_GRAPHQL_VERSION=v1.5.9
|
|
ARG PG_SUPABASE_VAULT_VERSION=v0.3.1
|
|
ARG SUPABASE_WRAPPER_VERSION=v0.4.4
|
|
ARG INDEX_ADVISOR_VERSION=v0.2.0
|
|
ARG PG_JSONSCHEMA_VERSION=v0.3.3
|
|
ARG PG_PLAN_FILTER_REVISION=5081a7b
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
USER root
|
|
|
|
RUN apt-get update && \
|
|
apt-get install --yes --no-install-recommends \
|
|
curl \
|
|
pkg-config \
|
|
ca-certificates \
|
|
postgresql-server-dev-${POSTGRES_MAJOR} \
|
|
libcurl4-openssl-dev \
|
|
libsodium-dev \
|
|
git \
|
|
build-essential \
|
|
flex \
|
|
libkrb5-dev
|
|
|
|
RUN curl -sSf https://sh.rustup.rs | sh -s -- -y && \
|
|
export PATH="/root/.cargo/bin:$PATH" && \
|
|
export "PG${POSTGRES_MAJOR}_PG_CONFIG=/usr/lib/postgresql/${POSTGRES_MAJOR}/bin/pg_config" && \
|
|
cargo install cargo-pgrx --version 0.12.6 --locked && \
|
|
cargo pgrx init
|
|
|
|
WORKDIR /postgres/extensions
|
|
|
|
ENV PATH="/root/.cargo/bin:$PATH"
|
|
|
|
# Install pgjwt
|
|
RUN git clone https://github.com/michelp/pgjwt.git && \
|
|
make -C pgjwt && make -C pgjwt install
|
|
|
|
# Install pg_hashids
|
|
RUN git clone --branch ${PG_HASHIDS_VERSION} --depth 1 https://github.com/iCyberon/pg_hashids.git && \
|
|
make -C pg_hashids && make -C pg_hashids install
|
|
|
|
# Install pg-safeupdate
|
|
RUN git clone --branch ${PG_SAFEUPDATE_VERSION} --depth 1 https://github.com/eradman/pg-safeupdate.git && \
|
|
make -C pg-safeupdate && make -C pg-safeupdate install
|
|
|
|
# install pg_net
|
|
RUN git clone --branch ${PG_NET_VERSION} --depth 1 https://github.com/supabase/pg_net.git && \
|
|
make -C pg_net && make -C pg_net install
|
|
|
|
# install pg_graphql
|
|
RUN git clone --branch ${PG_GRAPHQL_VERSION} --depth 1 https://github.com/supabase/pg_graphql.git && \
|
|
cd pg_graphql && \
|
|
cargo pgrx install --release
|
|
|
|
# install supabase vault
|
|
RUN git clone --branch ${PG_SUPABASE_VAULT_VERSION} --depth 1 https://github.com/supabase/vault.git && \
|
|
make -C vault && make -C vault install
|
|
|
|
# install pg_jsonschema
|
|
RUN git clone --branch ${PG_JSONSCHEMA_VERSION} --depth 1 https://github.com/supabase/pg_jsonschema.git && \
|
|
cd pg_jsonschema && \
|
|
cargo pgrx install --release
|
|
|
|
# install supabase wrappers
|
|
RUN git clone --branch ${SUPABASE_WRAPPER_VERSION} --depth 1 https://github.com/supabase/wrappers.git && \
|
|
cd wrappers/wrappers && \
|
|
cargo pgrx install --release --features "pg${POSTGRES_MAJOR},all_fdws"
|
|
|
|
# install index_advisor
|
|
RUN git clone --branch ${INDEX_ADVISOR_VERSION} --depth 1 https://github.com/supabase/index_advisor.git && \
|
|
make -C index_advisor && make -C index_advisor install
|
|
|
|
# install pgsodium
|
|
RUN git clone --branch ${PGSODIUM_VERSION} --depth 1 https://github.com/michelp/pgsodium.git && \
|
|
make -C pgsodium && make -C pgsodium install
|
|
|
|
# install pg_tle
|
|
RUN git clone --branch ${PG_TLE_VERSION} --depth 1 https://github.com/aws/pg_tle.git && \
|
|
make -C pg_tle && make -C pg_tle install
|
|
|
|
# install pg_plan_filter
|
|
RUN git clone https://github.com/pgexperts/pg_plan_filter.git && \
|
|
git -C pg_plan_filter checkout ${PG_PLAN_FILTER_REVISION} && \
|
|
make -C pg_plan_filter && make -C pg_plan_filter install
|
|
|
|
FROM base AS final
|
|
|
|
ARG POSTGRES_MAJOR
|
|
|
|
# Copy all bitcode additions
|
|
COPY --from=builder /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/bitcode /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/bitcode
|
|
|
|
# pgjwt
|
|
COPY --from=builder /usr/share/postgresql/${POSTGRES_MAJOR}/extension/pgjwt* /usr/share/postgresql/${POSTGRES_MAJOR}/extension/
|
|
|
|
# pg-safeupdate
|
|
COPY --from=builder /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/safeupdate.so /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/
|
|
|
|
# pg_hashids
|
|
COPY --from=builder /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/pg_hashids.so /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/
|
|
COPY --from=builder /usr/share/postgresql/${POSTGRES_MAJOR}/extension/pg_hashids* /usr/share/postgresql/${POSTGRES_MAJOR}/extension/
|
|
|
|
# pg_net
|
|
COPY --from=builder /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/pg_net.so /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/
|
|
COPY --from=builder /usr/share/postgresql/${POSTGRES_MAJOR}/extension/pg_net* /usr/share/postgresql/${POSTGRES_MAJOR}/extension/
|
|
|
|
# pg_graphql
|
|
COPY --from=builder /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/pg_graphql.so /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/
|
|
COPY --from=builder /usr/share/postgresql/${POSTGRES_MAJOR}/extension/pg_graphql* /usr/share/postgresql/${POSTGRES_MAJOR}/extension/
|
|
|
|
# supabase vault
|
|
COPY --from=builder /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/supabase_vault.so /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/
|
|
COPY --from=builder /usr/share/postgresql/${POSTGRES_MAJOR}/extension/supabase_vault* /usr/share/postgresql/${POSTGRES_MAJOR}/extension/
|
|
|
|
# pg_jsonschema
|
|
COPY --from=builder /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/pg_jsonschema.so /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/
|
|
COPY --from=builder /usr/share/postgresql/${POSTGRES_MAJOR}/extension/pg_jsonschema* /usr/share/postgresql/${POSTGRES_MAJOR}/extension/
|
|
|
|
# Supabase wrappers
|
|
COPY --from=builder /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/wrappers-*.so /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/
|
|
COPY --from=builder /usr/share/postgresql/${POSTGRES_MAJOR}/extension/wrappers* /usr/share/postgresql/${POSTGRES_MAJOR}/extension/
|
|
|
|
# pgsodium
|
|
COPY --from=builder /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/pgsodium.so /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/
|
|
COPY --from=builder /usr/share/postgresql/${POSTGRES_MAJOR}/extension/pgsodium* /usr/share/postgresql/${POSTGRES_MAJOR}/extension/
|
|
|
|
# pg_tle
|
|
COPY --from=builder /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/pg_tle.so /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/
|
|
COPY --from=builder /usr/share/postgresql/${POSTGRES_MAJOR}/extension/pg_tle* /usr/share/postgresql/${POSTGRES_MAJOR}/extension/
|
|
|
|
# pg_plan_filter
|
|
COPY --from=builder /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/plan_filter.so /usr/lib/postgresql/${POSTGRES_MAJOR}/lib/
|
|
|
|
# index_advisor
|
|
COPY --from=builder /usr/share/postgresql/${POSTGRES_MAJOR}/extension/index_advisor* /usr/share/postgresql/${POSTGRES_MAJOR}/extension/
|