mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-08 05:52:55 +00:00
Update PLV8 to 3.1.4 - which is the latest release. Update PostGIS to 3.3.0 Remove PLV8 from the final image -- there is an issue we hit when installing PLV8, and we don't quite know what it is yet.
115 lines
5.2 KiB
Docker
115 lines
5.2 KiB
Docker
ARG TAG=pinned
|
|
# apparently, ARGs don't get replaced in RUN commands in kaniko
|
|
# ARG POSTGIS_VERSION=3.3.0
|
|
# ARG PLV8_VERSION=3.1.4
|
|
|
|
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.3.0.tar.gz && \
|
|
tar xvzf postgis-3.3.0.tar.gz && \
|
|
cd postgis-3.3.0 && \
|
|
./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.4.tar.gz && \
|
|
tar xvzf v3.1.4.tar.gz && \
|
|
cd plv8-3.1.4 && \
|
|
export PATH="/usr/local/pgsql/bin:$PATH" && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) 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=postgis-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"]
|