diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 884187cec2..9b46d36c92 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -436,11 +436,10 @@ jobs: neon-image: # force building for all 3 images - if: needs.dockerfile-check.outputs.value != 'true' + if: needs.dockerfile-check.outputs.value == 'true' runs-on: dev needs: [ dockerfile-check ] container: gcr.io/kaniko-project/executor:v1.9.0-debug - environment: dev steps: - name: Checkout @@ -452,15 +451,14 @@ jobs: - name: Configure ECR login run: echo "{\"credsStore\":\"ecr-login\"}" > /kaniko/.docker/config.json - - name: Kaniko build console + - name: Kaniko build neon run: /kaniko/executor --snapshotMode=redo --cache=true --cache-repo 369495373322.dkr.ecr.eu-central-1.amazonaws.com/cache --snapshotMode=redo --context . --destination 369495373322.dkr.ecr.eu-central-1.amazonaws.com/neon:$GITHUB_RUN_ID compute-tools-image: - if: needs.dockerfile-check.outputs.value != 'true' + if: needs.dockerfile-check.outputs.value == 'true' runs-on: dev needs: [ dockerfile-check ] container: gcr.io/kaniko-project/executor:v1.9.0-debug - environment: dev steps: - name: Checkout @@ -469,15 +467,14 @@ jobs: - name: Configure ECR login run: echo "{\"credsStore\":\"ecr-login\"}" > /kaniko/.docker/config.json - - name: Kaniko build console + - name: Kaniko build compute tools run: /kaniko/executor --snapshotMode=redo --cache=true --cache-repo 369495373322.dkr.ecr.eu-central-1.amazonaws.com/cache --snapshotMode=redo --context . --dockerfile Dockerfile.compute-tools --destination 369495373322.dkr.ecr.eu-central-1.amazonaws.com/compute-tools:$GITHUB_RUN_ID compute-node-image: - if: needs.dockerfile-check.outputs.value != 'true' + if: needs.dockerfile-check.outputs.value == 'true' runs-on: dev needs: [ dockerfile-check ] container: gcr.io/kaniko-project/executor:v1.9.0-debug - environment: dev steps: - name: Checkout @@ -489,7 +486,7 @@ jobs: - name: Configure ECR login run: echo "{\"credsStore\":\"ecr-login\"}" > /kaniko/.docker/config.json - - name: Kaniko build console + - name: Kaniko build compute node working-directory: ./vendor/postgres/ run: /kaniko/executor --snapshotMode=redo --cache=true --cache-repo 369495373322.dkr.ecr.eu-central-1.amazonaws.com/cache --snapshotMode=redo --context . --destination 369495373322.dkr.ecr.eu-central-1.amazonaws.com/compute-node:$GITHUB_RUN_ID @@ -512,7 +509,6 @@ jobs: runs-on: dev needs: [ promote-images, tag ] container: golang:1.19-bullseye - environment: dev steps: - name: Install Crane & ECR helper diff --git a/Dockerfile b/Dockerfile index 6f017ac5d4..1afaa41fb4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,6 @@ # Build Postgres -FROM neondatabase/rust:1.58 AS pg-build -WORKDIR /pg - -USER root +FROM 369495373322.dkr.ecr.eu-central-1.amazonaws.com/rust:pinned AS pg-build +WORKDIR /home/nonroot COPY vendor/postgres vendor/postgres COPY Makefile Makefile @@ -11,27 +9,30 @@ ENV BUILD_TYPE release RUN set -e \ && mold -run make -j $(nproc) -s postgres \ && rm -rf tmp_install/build \ - && tar -C tmp_install -czf /postgres_install.tar.gz . + && tar -C tmp_install -czf /home/nonroot/postgres_install.tar.gz . # Build zenith binaries -FROM neondatabase/rust:1.58 AS build +FROM 369495373322.dkr.ecr.eu-central-1.amazonaws.com/rust:pinned AS build +WORKDIR /home/nonroot ARG GIT_VERSION=local # Enable https://github.com/paritytech/cachepot to cache Rust crates' compilation results in Docker builds. # Set up cachepot to use an AWS S3 bucket for cache results, to reuse it between `docker build` invocations. -# cachepot falls back to local filesystem if S3 is misconfigured, not failing the build. +# cachepot falls back to local filesystem if S3 is misconfigured, not failing the build ARG RUSTC_WRAPPER=cachepot -ARG CACHEPOT_BUCKET=zenith-rust-cachepot -ARG AWS_ACCESS_KEY_ID -ARG AWS_SECRET_ACCESS_KEY +ENV AWS_REGION=eu-central-1 +ENV CACHEPOT_S3_KEY_PREFIX=cachepot +ARG CACHEPOT_BUCKET=neon-github-dev +#ARG AWS_ACCESS_KEY_ID +#ARG AWS_SECRET_ACCESS_KEY -COPY --from=pg-build /pg/tmp_install/include/postgresql/server tmp_install/include/postgresql/server +COPY --from=pg-build /home/nonroot/tmp_install/include/postgresql/server tmp_install/include/postgresql/server COPY . . # Show build caching stats to check if it was used in the end. # Has to be the part of the same RUN since cachepot daemon is killed in the end of this RUN, losing the compilation stats. RUN set -e \ - && sudo -E "PATH=$PATH" mold -run cargo build --release \ + && mold -run cargo build --release \ && cachepot -s # Build final image @@ -40,8 +41,8 @@ FROM debian:bullseye-slim WORKDIR /data RUN set -e \ - && apt-get update \ - && apt-get install -y \ + && apt update \ + && apt install -y \ libreadline-dev \ libseccomp-dev \ openssl \ @@ -50,12 +51,12 @@ RUN set -e \ && useradd -d /data zenith \ && chown -R zenith:zenith /data -COPY --from=build --chown=zenith:zenith /home/runner/target/release/pageserver /usr/local/bin -COPY --from=build --chown=zenith:zenith /home/runner/target/release/safekeeper /usr/local/bin -COPY --from=build --chown=zenith:zenith /home/runner/target/release/proxy /usr/local/bin +COPY --from=build --chown=zenith:zenith /home/nonroot/target/release/pageserver /usr/local/bin +COPY --from=build --chown=zenith:zenith /home/nonroot/target/release/safekeeper /usr/local/bin +COPY --from=build --chown=zenith:zenith /home/nonroot/target/release/proxy /usr/local/bin -COPY --from=pg-build /pg/tmp_install/ /usr/local/ -COPY --from=pg-build /postgres_install.tar.gz /data/ +COPY --from=pg-build /home/nonroot/tmp_install/ /usr/local/ +COPY --from=pg-build /home/nonroot/postgres_install.tar.gz /data/ COPY docker-entrypoint.sh /docker-entrypoint.sh diff --git a/Dockerfile.compute-tools b/Dockerfile.compute-tools index 76cbc2ac30..05393021c2 100644 --- a/Dockerfile.compute-tools +++ b/Dockerfile.compute-tools @@ -1,22 +1,25 @@ # First transient image to build compute_tools binaries # NB: keep in sync with rust image version in .github/workflows/build_and_test.yml -FROM neondatabase/rust:1.58 AS rust-build +FROM 369495373322.dkr.ecr.eu-central-1.amazonaws.com/rust:pinned AS rust-build +WORKDIR /home/nonroot # Enable https://github.com/paritytech/cachepot to cache Rust crates' compilation results in Docker builds. # Set up cachepot to use an AWS S3 bucket for cache results, to reuse it between `docker build` invocations. # cachepot falls back to local filesystem if S3 is misconfigured, not failing the build. ARG RUSTC_WRAPPER=cachepot -ARG CACHEPOT_BUCKET=zenith-rust-cachepot -ARG AWS_ACCESS_KEY_ID -ARG AWS_SECRET_ACCESS_KEY +ENV AWS_REGION=eu-central-1 +ENV CACHEPOT_S3_KEY_PREFIX=cachepot +ARG CACHEPOT_BUCKET=neon-github-dev +#ARG AWS_ACCESS_KEY_ID +#ARG AWS_SECRET_ACCESS_KEY COPY . . RUN set -e \ - && sudo -E "PATH=$PATH" mold -run cargo build -p compute_tools --release \ + && mold -run cargo build -p compute_tools --release \ && cachepot -s # Final image that only has one binary -FROM debian:buster-slim +FROM debian:bullseye-slim -COPY --from=rust-build /home/runner/target/release/compute_ctl /usr/local/bin/compute_ctl +COPY --from=rust-build /home/nonroot/target/release/compute_ctl /usr/local/bin/compute_ctl