mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-07 05:22:56 +00:00
Now, users can install these extensions themselves if they are owner of the database they try to install the extension in.
112 lines
5.1 KiB
Docker
112 lines
5.1 KiB
Docker
ARG TAG=pinned
|
|
|
|
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
|
|
|
|
# Build Postgres from the neon postgres repository.
|
|
FROM build-deps AS pg-build
|
|
COPY vendor/postgres postgres
|
|
RUN cd postgres && \
|
|
./configure CFLAGS='-O2 -g3' --enable-debug --with-uuid=ossp && \
|
|
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
|
|
|
|
# Build PostGIS from the upstream PostGIS mirror. PostGIS compiles against neon postgres sources without changes.
|
|
# Perhaps we could even use the upstream binaries, compiled against vanilla Postgres, but it would require some
|
|
# investigation to check that it works, and also keeps working in the future. So for now, we compile our own binaries.
|
|
FROM build-deps AS postgis-build
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
RUN apt update && \
|
|
apt install -y gdal-bin libgdal-dev libprotobuf-c-dev protobuf-c-compiler xsltproc wget
|
|
|
|
RUN wget https://download.osgeo.org/postgis/source/postgis-3.2.3.tar.gz && \
|
|
tar xvzf postgis-3.2.3.tar.gz && \
|
|
cd postgis-3.2.3 && \
|
|
./autogen.sh && \
|
|
export PATH="/usr/local/pgsql/bin:$PATH" && \
|
|
./configure && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
cd extensions/postgis && \
|
|
make clean && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis_raster.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis_tiger_geocoder.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis_topology.control
|
|
|
|
# Build plv8
|
|
FROM build-deps AS plv8-build
|
|
COPY --from=postgis-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
RUN apt update && \
|
|
apt install -y git curl wget make ninja-build build-essential libncurses5 python3-dev pkg-config libc++-dev libc++abi-dev libglib2.0-dev
|
|
|
|
# https://github.com/plv8/plv8/issues/475
|
|
# Debian bullseye provides binutils 2.35 when >= 2.38 is necessary
|
|
RUN echo "deb http://ftp.debian.org/debian testing main" >> /etc/apt/sources.list && \
|
|
echo "APT::Default-Release \"stable\";" > /etc/apt/apt.conf.d/default-release && \
|
|
apt update && \
|
|
apt install -y --no-install-recommends -t testing binutils
|
|
|
|
RUN wget https://github.com/plv8/plv8/archive/refs/tags/v3.1.3.tar.gz && \
|
|
tar xvzf v3.1.3.tar.gz && \
|
|
cd plv8-3.1.3 && \
|
|
export PATH="/usr/local/pgsql/bin:$PATH" && \
|
|
make && \
|
|
make install && \
|
|
rm -rf /plv8-* && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/plv8.control
|
|
|
|
# compile neon extensions
|
|
FROM build-deps AS neon-pg-ext-build
|
|
COPY --from=plv8-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY pgxn/ pgxn/
|
|
|
|
RUN make -j $(getconf _NPROCESSORS_ONLN) \
|
|
PG_CONFIG=/usr/local/pgsql/bin/pg_config \
|
|
-C pgxn/neon \
|
|
-s install
|
|
|
|
# Compile and run the Neon-specific `compute_ctl` binary
|
|
FROM 369495373322.dkr.ecr.eu-central-1.amazonaws.com/rust:$TAG AS compute-tools
|
|
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 --release
|
|
|
|
# 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 && \
|
|
chown -R postgres:postgres /var/db/postgres && \
|
|
chmod 0750 /var/db/postgres/compute && \
|
|
echo '/usr/local/lib' >> /etc/ld.so.conf && /sbin/ldconfig
|
|
|
|
# TODO: Check if we can make the extension setup more modular versus a linear build
|
|
# currently plv8-build copies the output /usr/local/pgsql from postgis-build, etc#
|
|
COPY --from=neon-pg-ext-build --chown=postgres /usr/local/pgsql /usr/local
|
|
COPY --from=compute-tools --chown=postgres /home/nonroot/target/release/compute_ctl /usr/local/bin/compute_ctl
|
|
|
|
RUN apt update && \
|
|
apt install -y libreadline-dev libossp-uuid-dev gdal-bin libgdal-dev libprotobuf-c-dev && \
|
|
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
|
|
|
# Debian bullseye provides GLIBC 2.31 when 2.34 is necessary as we compiled plv8 with that version
|
|
RUN echo "deb http://ftp.debian.org/debian testing main" >> /etc/apt/sources.list && \
|
|
echo "APT::Default-Release \"stable\";" > /etc/apt/apt.conf.d/default-release && \
|
|
apt update && \
|
|
apt install -y --no-install-recommends -t testing binutils && \
|
|
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
|
|
|
# "temporary" symlink for old control-plane
|
|
RUN ln -s /usr/local/bin/compute_ctl /usr/local/bin/zenith_ctl
|
|
|
|
USER postgres
|
|
ENTRYPOINT ["/usr/local/bin/compute_ctl"]
|