Skip to content

Commit cf0d095

Browse files
committed
feat: just use existing Dockerfile + pg version
1 parent 8f50804 commit cf0d095

File tree

3 files changed

+447
-1
lines changed

3 files changed

+447
-1
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ jobs:
7575
with:
7676
load: true
7777
context: .
78-
file: "Dockerfile-156"
78+
file: "Dockerfile-{{ matrix.postgres_version }}"
7979
target: production
8080
build-args: |
8181
${{ steps.args.outputs.result }}

Dockerfile-15

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
# syntax=docker/dockerfile:1.6
2+
ARG postgresql_major=15
3+
ARG postgresql_release=${postgresql_major}.1
4+
5+
# Bump default build arg to build a package from source
6+
# Bump vars.yml to specify runtime package version
7+
ARG sfcgal_release=1.3.10
8+
ARG postgis_release=3.3.2
9+
ARG pgrouting_release=3.4.1
10+
ARG pgtap_release=1.2.0
11+
ARG pg_cron_release=1.6.2
12+
ARG pgaudit_release=1.7.0
13+
ARG pgjwt_release=9742dab1b2f297ad3811120db7b21451bca2d3c9
14+
ARG pgsql_http_release=1.5.0
15+
ARG plpgsql_check_release=2.2.5
16+
ARG pg_safeupdate_release=1.4
17+
ARG timescaledb_release=2.9.1
18+
ARG wal2json_release=2_5
19+
ARG pljava_release=1.6.4
20+
ARG plv8_release=3.1.5
21+
ARG pg_plan_filter_release=5081a7b5cb890876e67d8e7486b6a64c38c9a492
22+
ARG pg_net_release=0.7.1
23+
ARG rum_release=1.3.13
24+
ARG pg_hashids_release=cd0e1b31d52b394a0df64079406a14a4f7387cd6
25+
ARG libsodium_release=1.0.18
26+
ARG pgsodium_release=3.1.6
27+
ARG pg_graphql_release=1.5.1
28+
ARG pg_stat_monitor_release=1.1.1
29+
ARG pg_jsonschema_release=0.1.4
30+
ARG pg_repack_release=1.4.8
31+
ARG vault_release=0.2.8
32+
ARG groonga_release=12.0.8
33+
ARG pgroonga_release=2.4.0
34+
ARG wrappers_release=0.3.0
35+
ARG hypopg_release=1.3.1
36+
ARG pgvector_release=0.4.0
37+
ARG pg_tle_release=1.3.2
38+
ARG index_advisor_release=0.2.0
39+
ARG supautils_release=2.2.0
40+
ARG wal_g_release=2.0.1
41+
42+
FROM ubuntu:focal as base
43+
44+
RUN apt update -y && apt install -y \
45+
curl \
46+
gnupg \
47+
lsb-release \
48+
software-properties-common \
49+
wget \
50+
sudo \
51+
&& apt clean
52+
53+
54+
RUN adduser --system --home /var/lib/postgresql --no-create-home --shell /bin/bash --group --gecos "PostgreSQL administrator" postgres
55+
RUN adduser --system --no-create-home --shell /bin/bash --group wal-g
56+
RUN curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install linux \
57+
--init none \
58+
--no-confirm \
59+
--extra-conf "substituters = https://cache.nixos.org https://nix-postgres-artifacts.s3.amazonaws.com" \
60+
--extra-conf "trusted-public-keys = nix-postgres-artifacts:dGZlQOvKcNEjvT7QEAJbcV6b6uk7VF/hWMjhYleiaLI=% cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
61+
62+
ENV PATH="${PATH}:/nix/var/nix/profiles/default/bin"
63+
64+
COPY . /nixpg
65+
66+
WORKDIR /nixpg
67+
68+
RUN nix profile install .#psql_15/bin
69+
70+
71+
72+
WORKDIR /
73+
74+
75+
RUN mkdir -p /usr/lib/postgresql/bin \
76+
/usr/lib/postgresql/share/postgresql \
77+
/usr/share/postgresql \
78+
# /usr/lib/postgresql/share/postgresql/contrib \
79+
#/usr/lib/postgresql/share/postgresql/timezonesets \
80+
#/usr/lib/postgresql/share/postgresql/tsearch_data \
81+
# /usr/lib/postgresql/share/postgresql/extension \
82+
&& chown -R postgres:postgres /usr/lib/postgresql \
83+
&& chown -R postgres:postgres /usr/share/postgresql
84+
85+
# Create symbolic links
86+
RUN ln -s /nix/var/nix/profiles/default/bin/* /usr/lib/postgresql/bin/ \
87+
&& ln -s /nix/var/nix/profiles/default/bin/* /usr/bin/ \
88+
&& chown -R postgres:postgres /usr/bin
89+
90+
# Create symbolic links for PostgreSQL shares
91+
RUN ln -s /nix/var/nix/profiles/default/share/postgresql/* /usr/lib/postgresql/share/postgresql/
92+
RUN ln -s /nix/var/nix/profiles/default/share/postgresql/* /usr/share/postgresql/
93+
RUN chown -R postgres:postgres /usr/lib/postgresql/share/postgresql/
94+
RUN chown -R postgres:postgres /usr/share/postgresql/
95+
# Create symbolic links for contrib directory
96+
RUN mkdir -p /usr/lib/postgresql/share/postgresql/contrib \
97+
&& find /nix/var/nix/profiles/default/share/postgresql/contrib/ -mindepth 1 -type d -exec sh -c 'for dir do ln -s "$dir" "/usr/lib/postgresql/share/postgresql/contrib/$(basename "$dir")"; done' sh {} + \
98+
&& chown -R postgres:postgres /usr/lib/postgresql/share/postgresql/contrib/
99+
100+
RUN chown -R postgres:postgres /usr/lib/postgresql
101+
102+
RUN ln -sf /usr/lib/postgresql/share/postgresql/timezonesets /usr/share/postgresql/timezonesets
103+
104+
105+
RUN apt-get update && \
106+
apt-get install -y --no-install-recommends tzdata
107+
108+
RUN ln -fs /usr/share/zoneinfo/Etc/UTC /etc/localtime && \
109+
dpkg-reconfigure --frontend noninteractive tzdata
110+
111+
RUN apt-get update && \
112+
apt-get install -y --no-install-recommends \
113+
build-essential \
114+
checkinstall \
115+
cmake
116+
117+
ENV PGDATA=/var/lib/postgresql/data
118+
119+
####################
120+
# setup-wal-g.yml
121+
####################
122+
FROM base as walg
123+
ARG wal_g_release
124+
# ADD "https://github.com/wal-g/wal-g/releases/download/v${wal_g_release}/wal-g-pg-ubuntu-20.04-${TARGETARCH}.tar.gz" /tmp/wal-g.tar.gz
125+
RUN arch=$([ "$TARGETARCH" = "arm64" ] && echo "aarch64" || echo "$TARGETARCH") && \
126+
apt-get update && apt-get install -y --no-install-recommends curl && \
127+
curl -kL "https://github.com/wal-g/wal-g/releases/download/v${wal_g_release}/wal-g-pg-ubuntu-20.04-aarch64.tar.gz" -o /tmp/wal-g.tar.gz && \
128+
tar -xvf /tmp/wal-g.tar.gz -C /tmp && \
129+
rm -rf /tmp/wal-g.tar.gz && \
130+
mv /tmp/wal-g-pg-ubuntu*20.04-aarch64 /tmp/wal-g
131+
132+
# ####################
133+
# # Download gosu for easy step-down from root
134+
# ####################
135+
FROM base as gosu
136+
ARG TARGETARCH
137+
# Install dependencies
138+
RUN apt-get update && apt-get install -y --no-install-recommends \
139+
gnupg \
140+
ca-certificates \
141+
&& rm -rf /var/lib/apt/lists/*
142+
# Download binary
143+
ARG GOSU_VERSION=1.16
144+
ARG GOSU_GPG_KEY=B42F6819007F00F88E364FD4036A9C25BF357DD4
145+
ADD https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$TARGETARCH \
146+
/usr/local/bin/gosu
147+
ADD https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$TARGETARCH.asc \
148+
/usr/local/bin/gosu.asc
149+
# Verify checksum
150+
RUN gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys $GOSU_GPG_KEY && \
151+
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu && \
152+
gpgconf --kill all && \
153+
chmod +x /usr/local/bin/gosu
154+
155+
# ####################
156+
# # Build final image
157+
# ####################
158+
FROM gosu as production
159+
RUN id postgres || (echo "postgres user does not exist" && exit 1)
160+
# # Setup extensions
161+
COPY --from=walg /tmp/wal-g /usr/local/bin/
162+
163+
# # Initialise configs
164+
COPY --chown=postgres:postgres ansible/files/postgresql_config/postgresql.conf.j2 /etc/postgresql/postgresql.conf
165+
COPY --chown=postgres:postgres ansible/files/postgresql_config/pg_hba.conf.j2 /etc/postgresql/pg_hba.conf
166+
COPY --chown=postgres:postgres ansible/files/postgresql_config/pg_ident.conf.j2 /etc/postgresql/pg_ident.conf
167+
COPY --chown=postgres:postgres ansible/files/postgresql_config/postgresql-stdout-log.conf /etc/postgresql/logging.conf
168+
COPY --chown=postgres:postgres ansible/files/postgresql_config/supautils.conf.j2 /etc/postgresql-custom/supautils.conf
169+
COPY --chown=postgres:postgres ansible/files/postgresql_extension_custom_scripts /etc/postgresql-custom/extension-custom-scripts
170+
COPY --chown=postgres:postgres ansible/files/pgsodium_getkey_urandom.sh.j2 /usr/lib/postgresql/bin/pgsodium_getkey.sh
171+
COPY --chown=postgres:postgres ansible/files/postgresql_config/custom_read_replica.conf.j2 /etc/postgresql-custom/read-replica.conf
172+
COPY --chown=postgres:postgres ansible/files/postgresql_config/custom_walg.conf.j2 /etc/postgresql-custom/wal-g.conf
173+
COPY --chown=postgres:postgres ansible/files/walg_helper_scripts/wal_fetch.sh /home/postgres/wal_fetch.sh
174+
COPY ansible/files/walg_helper_scripts/wal_change_ownership.sh /root/wal_change_ownership.sh
175+
176+
RUN sed -i \
177+
-e "s|#unix_socket_directories = '/tmp'|unix_socket_directories = '/var/run/postgresql'|g" \
178+
-e "s|#session_preload_libraries = ''|session_preload_libraries = 'supautils'|g" \
179+
-e "s|#include = '/etc/postgresql-custom/supautils.conf'|include = '/etc/postgresql-custom/supautils.conf'|g" \
180+
-e "s|#include = '/etc/postgresql-custom/wal-g.conf'|include = '/etc/postgresql-custom/wal-g.conf'|g" /etc/postgresql/postgresql.conf && \
181+
echo "cron.database_name = 'postgres'" >> /etc/postgresql/postgresql.conf && \
182+
#echo "pljava.libjvm_location = '/usr/lib/jvm/java-11-openjdk-${TARGETARCH}/lib/server/libjvm.so'" >> /etc/postgresql/postgresql.conf && \
183+
echo "pgsodium.getkey_script= '/usr/lib/postgresql/bin/pgsodium_getkey.sh'" >> /etc/postgresql/postgresql.conf && \
184+
echo 'auto_explain.log_min_duration = 10s' >> /etc/postgresql/postgresql.conf && \
185+
usermod -aG postgres wal-g && \
186+
mkdir -p /etc/postgresql-custom && \
187+
chown postgres:postgres /etc/postgresql-custom
188+
189+
# # Include schema migrations
190+
COPY migrations/db /docker-entrypoint-initdb.d/
191+
COPY ansible/files/pgbouncer_config/pgbouncer_auth_schema.sql /docker-entrypoint-initdb.d/init-scripts/00-schema.sql
192+
COPY ansible/files/stat_extension.sql /docker-entrypoint-initdb.d/migrations/00-extension.sql
193+
194+
# # Add upstream entrypoint script
195+
COPY --from=gosu /usr/local/bin/gosu /usr/local/bin/gosu
196+
ADD --chmod=0755 \
197+
https://github.com/docker-library/postgres/raw/master/15/bullseye/docker-entrypoint.sh \
198+
/usr/local/bin/
199+
200+
RUN mkdir -p /var/run/postgresql && chown postgres:postgres /var/run/postgresql
201+
202+
ENTRYPOINT ["docker-entrypoint.sh"]
203+
204+
HEALTHCHECK --interval=2s --timeout=2s --retries=10 CMD pg_isready -U postgres -h localhost
205+
STOPSIGNAL SIGINT
206+
EXPOSE 5432
207+
208+
ENV POSTGRES_HOST=/var/run/postgresql
209+
ENV POSTGRES_USER=supabase_admin
210+
ENV POSTGRES_DB=postgres
211+
RUN apt-get update && apt-get install -y --no-install-recommends \
212+
locales \
213+
&& rm -rf /var/lib/apt/lists/* && \
214+
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 \
215+
&& localedef -i C -c -f UTF-8 -A /usr/share/locale/locale.alias C.UTF-8
216+
RUN echo "C.UTF-8 UTF-8" > /etc/locale.gen && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen
217+
ENV LANG en_US.UTF-8
218+
ENV LANGUAGE en_US:en
219+
ENV LC_ALL en_US.UTF-8
220+
ENV LC_CTYPE=C.UTF-8
221+
ENV LC_COLLATE=C.UTF-8
222+
ENV LOCALE_ARCHIVE /usr/lib/locale/locale-archive
223+
CMD ["postgres", "-D", "/etc/postgresql"]

0 commit comments

Comments
 (0)