1
1
ARG postgres_version=15.1.1.24
2
2
3
+ ARG pgbouncer_release=1.18.0
3
4
ARG postgrest_release=10.1.2
4
5
ARG gotrue_release=2.130.0
5
6
ARG adminapi_release=0.62.0
@@ -25,6 +26,33 @@ RUN apt-get update && apt-get install -y \
25
26
cmake \
26
27
&& rm -rf /var/lib/apt/lists/*
27
28
29
+ # ###################
30
+ # Install pgbouncer
31
+ # ###################
32
+ FROM builder as pgbouncer-source
33
+ # Download and extract
34
+ ARG pgbouncer_release
35
+ ADD "https://www.pgbouncer.org/downloads/files/${pgbouncer_release}/pgbouncer-${pgbouncer_release}.tar.gz" /tmp/pgbouncer.tar.gz
36
+ RUN tar -xvf /tmp/pgbouncer.tar.gz -C /tmp && \
37
+ rm -rf /tmp/pgbouncer.tar.gz
38
+ # Install build dependencies
39
+ RUN apt-get update && apt-get install -y \
40
+ libevent-dev \
41
+ && rm -rf /var/lib/apt/lists/*
42
+ # Build from source
43
+ WORKDIR /tmp/pgbouncer-${pgbouncer_release}
44
+ RUN ./configure --prefix=/usr/local
45
+ RUN make -j$(nproc)
46
+ # Create debian package
47
+ RUN checkinstall -D --install=no --fstrans=no --backup=no --pakdir=/tmp --requires=libevent-2.1-7 --nodoc
48
+
49
+ FROM base as pgbouncer
50
+ # Download pre-built packages
51
+ RUN apt-get update && apt-get install -y --no-install-recommends --download-only \
52
+ pgbouncer \
53
+ && rm -rf /var/lib/apt/lists/*
54
+ RUN mv /var/cache/apt/archives/*.deb /tmp/
55
+
28
56
# ###################
29
57
# Install PostgREST
30
58
# ###################
@@ -98,6 +126,7 @@ RUN mv /var/cache/apt/archives/*.deb /tmp/
98
126
FROM base as production
99
127
100
128
# Copy dependencies from previous build stages
129
+ COPY --from=pgbouncer /tmp/*.deb /tmp/
101
130
COPY --from=vector /tmp/*.deb /tmp/
102
131
COPY --from=kong /tmp/*.deb /tmp/
103
132
COPY --from=supervisor /tmp/*.deb /tmp/
@@ -148,6 +177,11 @@ COPY docker/all-in-one/etc/sudoers.d /etc/sudoers.d/
148
177
# Script for pg_egress_collect
149
178
COPY --chown=adminapi:adminapi docker/all-in-one/opt/pg_egress_collect /opt/pg_egress_collect
150
179
180
+ # Customizations for pgbouncer
181
+ COPY docker/all-in-one/etc/pgbouncer /etc/pgbouncer
182
+ COPY docker/all-in-one/etc/pgbouncer-custom /etc/pgbouncer-custom
183
+ COPY docker/all-in-one/etc/tmpfiles.d /etc/tmpfiles.d
184
+
151
185
# Customizations for postgres
152
186
COPY --chown=postgres:postgres docker/all-in-one/etc/postgresql/pg_hba.conf /etc/postgresql/
153
187
COPY --chown=postgres:postgres docker/all-in-one/etc/postgresql/logging.conf /etc/postgresql/
@@ -216,6 +250,9 @@ ENV ADMIN_API_CERT_DIR=/etc/ssl/adminapi
216
250
ENV ADMIN_API_PORT=8085
217
251
EXPOSE ${ADMIN_API_PORT}
218
252
253
+ ENV PGBOUNCER_PORT=6543
254
+ EXPOSE ${PGBOUNCER_PORT}
255
+
219
256
ENV PGEXPORTER_PORT=9187
220
257
EXPOSE ${PGEXPORTER_PORT}
221
258
@@ -225,7 +262,8 @@ ENV VECTOR_API_PORT=9001
225
262
RUN useradd --create-home --shell /bin/bash postgrest && \
226
263
useradd --create-home --shell /bin/bash gotrue && \
227
264
useradd --create-home --shell /bin/bash envoy && \
228
- useradd --create-home --shell /bin/bash adminapi -G root,envoy,kong,postgres,postgrest,wal-g && \
265
+ useradd --create-home --shell /bin/bash pgbouncer -G postgres,ssl-cert && \
266
+ useradd --create-home --shell /bin/bash adminapi -G root,envoy,kong,pgbouncer,postgres,postgrest,wal-g && \
229
267
usermod --append --shell /bin/bash -G postgres vector
230
268
RUN mkdir -p /etc/wal-g && \
231
269
chown -R adminapi:adminapi /etc/wal-g && \
0 commit comments