Skip to content

Commit c37f69b

Browse files
committed
feat: orioledb-17 Docker image and publish workflow
1 parent 7d374fd commit c37f69b

File tree

1 file changed

+241
-0
lines changed

1 file changed

+241
-0
lines changed

Dockerfile-17-orioledb

Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
# syntax=docker/dockerfile:1.6
2+
ARG postgresql_major=17-orioledb
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+
tree \
52+
&& apt clean
53+
54+
55+
RUN adduser --system --home /var/lib/postgresql --no-create-home --shell /bin/bash --group --gecos "PostgreSQL administrator" postgres
56+
RUN adduser --system --no-create-home --shell /bin/bash --group wal-g
57+
RUN curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install linux \
58+
--init none \
59+
--no-confirm \
60+
--extra-conf "substituters = https://cache.nixos.org https://nix-postgres-artifacts.s3.amazonaws.com" \
61+
--extra-conf "trusted-public-keys = nix-postgres-artifacts:dGZlQOvKcNEjvT7QEAJbcV6b6uk7VF/hWMjhYleiaLI=% cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
62+
63+
ENV PATH="${PATH}:/nix/var/nix/profiles/default/bin"
64+
65+
COPY . /nixpg
66+
67+
WORKDIR /nixpg
68+
69+
RUN nix profile install .#psql_orioledb-17/bin
70+
71+
72+
73+
WORKDIR /
74+
75+
76+
RUN mkdir -p /usr/lib/postgresql/bin \
77+
/usr/lib/postgresql/share/postgresql \
78+
/usr/share/postgresql \
79+
# /usr/lib/postgresql/share/postgresql/contrib \
80+
#/usr/lib/postgresql/share/postgresql/timezonesets \
81+
#/usr/lib/postgresql/share/postgresql/tsearch_data \
82+
# /usr/lib/postgresql/share/postgresql/extension \
83+
&& chown -R postgres:postgres /usr/lib/postgresql \
84+
&& chown -R postgres:postgres /usr/share/postgresql
85+
86+
# Create symbolic links
87+
RUN ln -s /nix/var/nix/profiles/default/bin/* /usr/lib/postgresql/bin/ \
88+
&& ln -s /nix/var/nix/profiles/default/bin/* /usr/bin/ \
89+
&& chown -R postgres:postgres /usr/bin
90+
91+
# Create symbolic links for PostgreSQL shares
92+
RUN ln -s /nix/var/nix/profiles/default/share/postgresql/* /usr/lib/postgresql/share/postgresql/
93+
RUN ln -s /nix/var/nix/profiles/default/share/postgresql/* /usr/share/postgresql/
94+
RUN chown -R postgres:postgres /usr/lib/postgresql/share/postgresql/
95+
RUN chown -R postgres:postgres /usr/share/postgresql/
96+
# Create symbolic links for contrib directory
97+
RUN tree /nix > /tmp/tree.txt && cat /tmp/tree.txt && cat /tmp/tree.txt >&2
98+
99+
100+
# RUN mkdir -p /usr/lib/postgresql/share/postgresql/contrib \
101+
# && 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 {} + \
102+
# && chown -R postgres:postgres /usr/lib/postgresql/share/postgresql/contrib/
103+
104+
RUN chown -R postgres:postgres /usr/lib/postgresql
105+
106+
RUN ln -sf /usr/lib/postgresql/share/postgresql/timezonesets /usr/share/postgresql/timezonesets
107+
108+
109+
RUN apt-get update && \
110+
apt-get install -y --no-install-recommends tzdata
111+
112+
RUN ln -fs /usr/share/zoneinfo/Etc/UTC /etc/localtime && \
113+
dpkg-reconfigure --frontend noninteractive tzdata
114+
115+
RUN apt-get update && \
116+
apt-get install -y --no-install-recommends \
117+
build-essential \
118+
checkinstall \
119+
cmake
120+
121+
ENV PGDATA=/var/lib/postgresql/data
122+
123+
####################
124+
# setup-wal-g.yml
125+
####################
126+
FROM base as walg
127+
ARG wal_g_release
128+
# 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
129+
RUN arch=$([ "$TARGETARCH" = "arm64" ] && echo "aarch64" || echo "$TARGETARCH") && \
130+
apt-get update && apt-get install -y --no-install-recommends curl && \
131+
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 && \
132+
tar -xvf /tmp/wal-g.tar.gz -C /tmp && \
133+
rm -rf /tmp/wal-g.tar.gz && \
134+
mv /tmp/wal-g-pg-ubuntu*20.04-aarch64 /tmp/wal-g
135+
136+
# ####################
137+
# # Download gosu for easy step-down from root
138+
# ####################
139+
FROM base as gosu
140+
ARG TARGETARCH
141+
# Install dependencies
142+
RUN apt-get update && apt-get install -y --no-install-recommends \
143+
gnupg \
144+
ca-certificates \
145+
&& rm -rf /var/lib/apt/lists/*
146+
# Download binary
147+
ARG GOSU_VERSION=1.16
148+
ARG GOSU_GPG_KEY=B42F6819007F00F88E364FD4036A9C25BF357DD4
149+
ADD https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$TARGETARCH \
150+
/usr/local/bin/gosu
151+
ADD https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$TARGETARCH.asc \
152+
/usr/local/bin/gosu.asc
153+
# Verify checksum
154+
RUN gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys $GOSU_GPG_KEY && \
155+
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu && \
156+
gpgconf --kill all && \
157+
chmod +x /usr/local/bin/gosu
158+
159+
# ####################
160+
# # Build final image
161+
# ####################
162+
FROM gosu as production
163+
RUN id postgres || (echo "postgres user does not exist" && exit 1)
164+
# # Setup extensions
165+
COPY --from=walg /tmp/wal-g /usr/local/bin/
166+
167+
# # Initialise configs
168+
COPY --chown=postgres:postgres ansible/files/postgresql_config/postgresql.conf.j2 /etc/postgresql/postgresql.conf
169+
COPY --chown=postgres:postgres ansible/files/postgresql_config/pg_hba.conf.j2 /etc/postgresql/pg_hba.conf
170+
COPY --chown=postgres:postgres ansible/files/postgresql_config/pg_ident.conf.j2 /etc/postgresql/pg_ident.conf
171+
COPY --chown=postgres:postgres ansible/files/postgresql_config/postgresql-stdout-log.conf /etc/postgresql/logging.conf
172+
COPY --chown=postgres:postgres ansible/files/postgresql_config/supautils.conf.j2 /etc/postgresql-custom/supautils.conf
173+
COPY --chown=postgres:postgres ansible/files/postgresql_extension_custom_scripts /etc/postgresql-custom/extension-custom-scripts
174+
COPY --chown=postgres:postgres ansible/files/pgsodium_getkey_urandom.sh.j2 /usr/lib/postgresql/bin/pgsodium_getkey.sh
175+
COPY --chown=postgres:postgres ansible/files/postgresql_config/custom_read_replica.conf.j2 /etc/postgresql-custom/read-replica.conf
176+
COPY --chown=postgres:postgres ansible/files/postgresql_config/custom_walg.conf.j2 /etc/postgresql-custom/wal-g.conf
177+
COPY --chown=postgres:postgres ansible/files/walg_helper_scripts/wal_fetch.sh /home/postgres/wal_fetch.sh
178+
COPY ansible/files/walg_helper_scripts/wal_change_ownership.sh /root/wal_change_ownership.sh
179+
180+
RUN sed -i \
181+
-e "s|#unix_socket_directories = '/tmp'|unix_socket_directories = '/var/run/postgresql'|g" \
182+
-e "s|#session_preload_libraries = ''|session_preload_libraries = 'supautils'|g" \
183+
-e "s|#include = '/etc/postgresql-custom/supautils.conf'|include = '/etc/postgresql-custom/supautils.conf'|g" \
184+
-e "s|#include = '/etc/postgresql-custom/wal-g.conf'|include = '/etc/postgresql-custom/wal-g.conf'|g" /etc/postgresql/postgresql.conf && \
185+
echo "cron.database_name = 'postgres'" >> /etc/postgresql/postgresql.conf && \
186+
#echo "pljava.libjvm_location = '/usr/lib/jvm/java-11-openjdk-${TARGETARCH}/lib/server/libjvm.so'" >> /etc/postgresql/postgresql.conf && \
187+
echo "pgsodium.getkey_script= '/usr/lib/postgresql/bin/pgsodium_getkey.sh'" >> /etc/postgresql/postgresql.conf && \
188+
echo 'auto_explain.log_min_duration = 10s' >> /etc/postgresql/postgresql.conf && \
189+
usermod -aG postgres wal-g && \
190+
mkdir -p /etc/postgresql-custom && \
191+
chown postgres:postgres /etc/postgresql-custom
192+
193+
# Remove items from postgresql.conf
194+
RUN sed -i 's/ timescaledb,//g;' "/etc/postgresql/postgresql.conf"
195+
#as of pg 16.4 + this db_user_namespace totally deprecated and will break the server if setting is present
196+
RUN sed -i 's/db_user_namespace = off/#db_user_namespace = off/g;' "/etc/postgresql/postgresql.conf"
197+
RUN sed -i 's/ timescaledb,//g; s/ plv8,//g; s/ postgis,//g; s/ pgrouting,//g' "/etc/postgresql-custom/supautils.conf"
198+
RUN sed -i 's/\(shared_preload_libraries.*\)'\''\(.*\)$/\1, orioledb'\''\2/' "/etc/postgresql/postgresql.conf"
199+
RUN echo "default_table_access_method = 'orioledb'" >> "/etc/postgresql/postgresql.conf"
200+
201+
202+
203+
# # Include schema migrations
204+
COPY migrations/db /docker-entrypoint-initdb.d/
205+
COPY ansible/files/pgbouncer_config/pgbouncer_auth_schema.sql /docker-entrypoint-initdb.d/init-scripts/00-schema.sql
206+
COPY ansible/files/stat_extension.sql /docker-entrypoint-initdb.d/migrations/00-extension.sql
207+
# Enable orioledb extension first
208+
RUN echo "CREATE EXTENSION orioledb;" > /docker-entrypoint-initdb.d/init-scripts/00-pre-init.sql && \
209+
chown postgres:postgres /docker-entrypoint-initdb.d/init-scripts/00-pre-init.sql
210+
211+
# # Add upstream entrypoint script
212+
COPY --from=gosu /usr/local/bin/gosu /usr/local/bin/gosu
213+
ADD --chmod=0755 \
214+
https://github.com/docker-library/postgres/raw/master/17/bullseye/docker-entrypoint.sh \
215+
/usr/local/bin/
216+
217+
RUN mkdir -p /var/run/postgresql && chown postgres:postgres /var/run/postgresql
218+
219+
ENTRYPOINT ["docker-entrypoint.sh"]
220+
221+
HEALTHCHECK --interval=2s --timeout=2s --retries=10 CMD pg_isready -U postgres -h localhost
222+
STOPSIGNAL SIGINT
223+
EXPOSE 5432
224+
225+
ENV POSTGRES_HOST=/var/run/postgresql
226+
ENV POSTGRES_USER=supabase_admin
227+
ENV POSTGRES_DB=postgres
228+
ENV POSTGRES_INITDB_ARGS="--allow-group-access --locale-provider=icu --encoding=UTF-8 --icu-locale=en_US.UTF-8"
229+
RUN apt-get update && apt-get install -y --no-install-recommends \
230+
locales \
231+
&& rm -rf /var/lib/apt/lists/* && \
232+
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 \
233+
&& localedef -i C -c -f UTF-8 -A /usr/share/locale/locale.alias C.UTF-8
234+
RUN echo "C.UTF-8 UTF-8" > /etc/locale.gen && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen
235+
ENV LANG en_US.UTF-8
236+
ENV LANGUAGE en_US:en
237+
ENV LC_ALL en_US.UTF-8
238+
ENV LC_CTYPE=C.UTF-8
239+
ENV LC_COLLATE=C.UTF-8
240+
ENV LOCALE_ARCHIVE /usr/lib/locale/locale-archive
241+
CMD ["postgres", "-D", "/etc/postgresql"]

0 commit comments

Comments
 (0)