mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-16 01:42:55 +00:00
180 lines
8.3 KiB
Docker
180 lines
8.3 KiB
Docker
ARG REPOSITORY=neondatabase
|
|
ARG IMAGE=build-tools
|
|
ARG TAG=pinned
|
|
ARG BUILD_TAG
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "build-deps"
|
|
#
|
|
#########################################################################################
|
|
FROM debian:bullseye-slim AS build-deps
|
|
RUN apt update && \
|
|
apt install -y git autoconf automake libtool build-essential bison flex libreadline-dev \
|
|
zlib1g-dev libxml2-dev libcurl4-openssl-dev libossp-uuid-dev wget pkg-config libssl-dev \
|
|
libicu-dev libxslt1-dev liblz4-dev libzstd-dev zstd
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-build"
|
|
# Build Postgres from the neon postgres repository.
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-build
|
|
COPY "vendor/postgres-v14" /postgres-v14
|
|
COPY "vendor/postgres-v15" /postgres-v15
|
|
COPY "vendor/postgres-v16" /postgres-v16
|
|
RUN for pg_version in v14 v15 v16; do \
|
|
install_dir="/postgres-$pg_version"; \
|
|
cd "$install_dir"; \
|
|
prefix="/usr/local/pgsql-${pg_version}"; \
|
|
export CONFIGURE_CMD="./configure --prefix ${prefix} CFLAGS='-O2 -g3' --enable-debug --with-openssl --with-uuid=ossp \
|
|
--with-icu --with-libxml --with-libxslt --with-lz4" && \
|
|
if [ "${pg_version}" != "v14" ]; then \
|
|
# zstd is available only from PG15
|
|
export CONFIGURE_CMD="${CONFIGURE_CMD} --with-zstd"; \
|
|
fi && \
|
|
eval $CONFIGURE_CMD && \
|
|
make MAKELEVEL=0 -j $(getconf _NPROCESSORS_ONLN) -s install && \
|
|
make MAKELEVEL=0 -j $(getconf _NPROCESSORS_ONLN) -s -C contrib/ install && \
|
|
# Install headers
|
|
make MAKELEVEL=0 -j $(getconf _NPROCESSORS_ONLN) -s -C src/include install && \
|
|
make MAKELEVEL=0 -j $(getconf _NPROCESSORS_ONLN) -s -C src/interfaces/libpq install && \
|
|
extension_dir="${prefix}/share/extension" && \
|
|
# Enable some of contrib extensions
|
|
echo 'trusted = true' >> $extension_dir/autoinc.control && \
|
|
echo 'trusted = true' >> $extension_dir/bloom.control && \
|
|
echo 'trusted = true' >> $extension_dir/earthdistance.control && \
|
|
echo 'trusted = true' >> $extension_dir/insert_username.control && \
|
|
echo 'trusted = true' >> $extension_dir/intagg.control && \
|
|
echo 'trusted = true' >> $extension_dir/moddatetime.control && \
|
|
echo 'trusted = true' >> $extension_dir/pg_stat_statements.control && \
|
|
echo 'trusted = true' >> $extension_dir/pgrowlocks.control && \
|
|
echo 'trusted = true' >> $extension_dir/pgstattuple.control && \
|
|
echo 'trusted = true' >> $extension_dir/refint.control && \
|
|
echo 'trusted = true' >> $extension_dir/xml2.control && \
|
|
# We need to grant EXECUTE on pg_stat_statements_reset() to neon_superuser.
|
|
# In vanilla postgres this function is limited to Postgres role superuser.
|
|
# In neon we have neon_superuser role that is not a superuser but replaces superuser in some cases.
|
|
# We could add the additional grant statements to the postgres repository but it would be hard to maintain,
|
|
# whenever we need to pick up a new postgres version and we want to limit the changes in our postgres fork,
|
|
# so we do it here.
|
|
old_list="pg_stat_statements--1.0--1.1.sql pg_stat_statements--1.1--1.2.sql pg_stat_statements--1.2--1.3.sql pg_stat_statements--1.3--1.4.sql pg_stat_statements--1.4--1.5.sql pg_stat_statements--1.4.sql pg_stat_statements--1.5--1.6.sql"; \
|
|
# the first loop is for pg_stat_statement extension version <= 1.6
|
|
for file in $prefix/share/extension/pg_stat_statements--*.sql; do \
|
|
filename=$(basename "$file"); \
|
|
if echo "$old_list" | grep -q -F "$filename"; then \
|
|
echo 'GRANT EXECUTE ON FUNCTION pg_stat_statements_reset() TO neon_superuser;' >> $file; \
|
|
fi; \
|
|
done; \
|
|
# the second loop is for pg_stat_statement extension versions >= 1.7,
|
|
# where pg_stat_statement_reset() got 3 additional arguments
|
|
for file in $prefix/share/extension/pg_stat_statements--*.sql; do \
|
|
filename=$(basename "$file"); \
|
|
if ! echo "$old_list" | grep -q -F "$filename"; then \
|
|
echo 'GRANT EXECUTE ON FUNCTION pg_stat_statements_reset(Oid, Oid, bigint) TO neon_superuser;' >> $file; \
|
|
fi; \
|
|
done; \
|
|
# Go back to root dir from `/postgres-v<version>` dir
|
|
cd ..; \
|
|
done
|
|
|
|
# #########################################################################################
|
|
# #
|
|
# # Compile and run the Neon-specific `compute_ctl` binary
|
|
# #
|
|
# #########################################################################################
|
|
# FROM $REPOSITORY/$IMAGE:$TAG AS compute-tools
|
|
# ARG BUILD_TAG
|
|
# ENV BUILD_TAG=$BUILD_TAG
|
|
#
|
|
# USER nonroot
|
|
# # Copy entire project to get Cargo.* files with proper dependencies for the whole project
|
|
# COPY --chown=nonroot . .
|
|
# RUN cd compute_tools && cargo build --locked --profile release-line-debug-size-lto
|
|
#
|
|
# #########################################################################################
|
|
# #
|
|
# # Clean up postgres folder before inclusion
|
|
# #
|
|
# #########################################################################################
|
|
# FROM pg-build AS postgres-cleanup-layer
|
|
# # COPY --from=neon-pg-ext-build /usr/local/pgsql /usr/local/pgsql
|
|
#
|
|
# RUN for pg_version in v14 v15 v16; do \
|
|
# prefix="/usr/local/pgsql-${pg_version}"; \
|
|
# # Remove binaries from /bin/ that we won't use (or would manually copy & install otherwise)
|
|
# cd "${prefix}/bin" && rm ecpg raster2pgsql shp2pgsql pgtopo_export pgtopo_import pgsql2shp; \
|
|
# cd ..; \
|
|
# # Remove headers that we won't need anymore - we've completed installation of all extensions
|
|
# rm -r "${prefix}/include"; \
|
|
# # Remove static postgresql libraries - all compilation is finished, so we
|
|
# # can now remove these files - they must be included in other binaries by now
|
|
# # if they were to be used by other libraries.
|
|
# rm ${prefix}/lib/lib*.a; \
|
|
# done
|
|
#
|
|
# #########################################################################################
|
|
# #
|
|
# # Final layer
|
|
# # Put it all together into the final image
|
|
# #
|
|
# #########################################################################################
|
|
# FROM debian:bullseye-slim
|
|
# # Add user postgres
|
|
# RUN mkdir /var/db && useradd -m -d /var/db/postgres postgres && \
|
|
# echo "postgres:test_console_pass" | chpasswd && \
|
|
# mkdir /var/db/postgres/compute && mkdir /var/db/postgres/specs && \
|
|
# mkdir /var/db/postgres/pgbouncer && \
|
|
# chown -R postgres:postgres /var/db/postgres && \
|
|
# chmod 0750 /var/db/postgres/compute && \
|
|
# chmod 0750 /var/db/postgres/pgbouncer && \
|
|
# echo '/usr/local/lib' >> /etc/ld.so.conf && /sbin/ldconfig && \
|
|
# # create folder for file cache
|
|
# mkdir -p -m 777 /neon/cache
|
|
#
|
|
# COPY --from=postgres-cleanup-layer --chown=postgres /usr/local/pgsql-v14 /usr/local/pgsql-v14
|
|
# COPY --from=postgres-cleanup-layer --chown=postgres /usr/local/pgsql-v15 /usr/local/pgsql-v15
|
|
# COPY --from=postgres-cleanup-layer --chown=postgres /usr/local/pgsql-v16 /usr/local/pgsql-v16
|
|
# COPY --from=compute-tools --chown=postgres /home/nonroot/target/release-line-debug-size-lto/compute_ctl /usr/local/bin/compute_ctl
|
|
#
|
|
# # Install:
|
|
# # libreadline8 for psql
|
|
# # libicu67, locales for collations (including ICU and plpgsql_check)
|
|
# # liblz4-1 for lz4
|
|
# # libossp-uuid16 for extension ossp-uuid
|
|
# # libgeos, libgdal, libsfcgal1, libproj and libprotobuf-c1 for PostGIS
|
|
# # libxml2, libxslt1.1 for xml2
|
|
# # libzstd1 for zstd
|
|
# # libboost* for rdkit
|
|
# # ca-certificates for communicating with s3 by compute_ctl
|
|
# RUN apt update && \
|
|
# apt install --no-install-recommends -y \
|
|
# gdb \
|
|
# libicu67 \
|
|
# liblz4-1 \
|
|
# libreadline8 \
|
|
# libboost-iostreams1.74.0 \
|
|
# libboost-regex1.74.0 \
|
|
# libboost-serialization1.74.0 \
|
|
# libboost-system1.74.0 \
|
|
# libossp-uuid16 \
|
|
# libgeos-c1v5 \
|
|
# libgdal28 \
|
|
# libproj19 \
|
|
# libprotobuf-c1 \
|
|
# libsfcgal1 \
|
|
# libxml2 \
|
|
# libxslt1.1 \
|
|
# libzstd1 \
|
|
# libcurl4-openssl-dev \
|
|
# locales \
|
|
# procps \
|
|
# ca-certificates && \
|
|
# rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
|
|
# localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
|
|
#
|
|
# ENV LANG en_US.utf8
|
|
# USER postgres
|
|
# ENTRYPOINT ["/usr/local/bin/compute_ctl"]
|