Something went wrong. Try again.
Our Personal Data Server from scratch!
Something went wrong. Try again.
tranquil-pds Dockerfile
3.9 kB · 80 lines
Dockerfile
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081ARG DISTROLESS_IMAGE=gcr.io/distroless/cc-debian13:latest@sha256:a017e74bd2a12d98342dbecd33d121d2b160415ed777573dc1808969e989d94d
FROM node:24-trixie-slim AS frontendRUN corepack enable && corepack prepare pnpm@latest --activateWORKDIR /appCOPY frontend/package.json frontend/pnpm-lock.yaml frontend/pnpm-workspace.yaml ./RUN pnpm install --frozen-lockfileCOPY frontend/ ./RUN pnpm build
FROM rust:1.96-slim-trixie AS builderRUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates pkg-config libssl-dev mold clang protobuf-compiler curl xz-utils \ && rm -rf /var/lib/apt/lists/*ARG COMPRESS="true"RUN set -eux; \ if [ "$COMPRESS" = "true" ]; then \ arch="$(uname -m)"; \ case "$arch" in \ x86_64) upx_arch=amd64; upx_sha=ddc2654063fe4dc80d95b420788494e4db078ebb01a650692d623b5a9906e61e ;; \ aarch64) upx_arch=arm64; upx_sha=100310f74eb6f67694d1d0377f1c729b6a49238ce8c4de21ea2e7d3406186f8b ;; \ *) echo "upx: no prebuilt binary for $arch, skipping compression"; upx_arch="" ;; \ esac; \ if [ -n "$upx_arch" ]; then \ curl -fsSL -o /tmp/upx.tar.xz "https://github.com/upx/upx/releases/download/v5.0.2/upx-5.0.2-${upx_arch}_linux.tar.xz"; \ echo "${upx_sha} /tmp/upx.tar.xz" | sha256sum -c -; \ tar -xJf /tmp/upx.tar.xz -C /tmp; \ install -m0755 "/tmp/upx-5.0.2-${upx_arch}_linux/upx" /usr/local/bin/upx; \ rm -rf /tmp/upx.tar.xz "/tmp/upx-5.0.2-${upx_arch}_linux"; \ fi; \ fiRUN mkdir -p /stage/var/lib/tranquil-pds/blobs /stage/var/lib/tranquil-pds/storeENV RUSTFLAGS="-C linker=clang -C link-arg=-fuse-ld=mold"WORKDIR /appARG SLIM="false"COPY Cargo.toml Cargo.lock ./COPY .sqlx ./.sqlxCOPY crates/tranquil-types ./crates/tranquil-typesCOPY crates/tranquil-crypto ./crates/tranquil-cryptoCOPY crates/tranquil-scopes ./crates/tranquil-scopesCOPY crates/tranquil-config ./crates/tranquil-configCOPY crates/tranquil-repo ./crates/tranquil-repoCOPY crates/tranquil-lexicon ./crates/tranquil-lexiconCOPY crates/tranquil-oauth ./crates/tranquil-oauthCOPY crates/tranquil-db-traits ./crates/tranquil-db-traitsCOPY crates/tranquil-infra ./crates/tranquil-infraCOPY crates/tranquil-auth ./crates/tranquil-authCOPY crates/tranquil-comms ./crates/tranquil-commsCOPY crates/tranquil-db ./crates/tranquil-dbCOPY crates/tranquil-ripple ./crates/tranquil-rippleCOPY crates/tranquil-storage ./crates/tranquil-storageCOPY crates/tranquil-cache ./crates/tranquil-cacheCOPY crates/tranquil-pds ./crates/tranquil-pdsCOPY crates/tranquil-sync ./crates/tranquil-syncCOPY crates/tranquil-api ./crates/tranquil-apiCOPY crates/tranquil-oauth-server ./crates/tranquil-oauth-serverCOPY crates/tranquil-store ./crates/tranquil-storeCOPY crates/tranquil-signal ./crates/tranquil-signalCOPY crates/tranquil-server ./crates/tranquil-serverCOPY migrations ./migrationsRUN --mount=type=cache,id=cargo-registry,target=/usr/local/cargo/registry \ --mount=type=cache,id=cargo-git,target=/usr/local/cargo/git \ --mount=type=cache,id=tranquil-target,target=/app/target,sharing=locked \ if [ "$SLIM" = "true" ]; then \ SQLX_OFFLINE=true cargo build --release -p tranquil-server --no-default-features; \ else \ SQLX_OFFLINE=true cargo build --release -p tranquil-server; \ fi && \ cp target/release/tranquil-server /tmp/tranquil-pds && \ if [ "$COMPRESS" = "true" ] && command -v upx >/dev/null 2>&1; then upx --best --lzma /tmp/tranquil-pds; fi
FROM ${DISTROLESS_IMAGE}COPY --from=builder /tmp/tranquil-pds /usr/local/bin/tranquil-pdsCOPY --from=builder --chown=65532:65532 /stage/var/lib/tranquil-pds /var/lib/tranquil-pdsCOPY --from=frontend --chown=65532:65532 /app/dist /var/lib/tranquil-pds/frontendWORKDIR /var/lib/tranquil-pdsENV SERVER_HOST=[::]ENV SERVER_PORT=3000EXPOSE 3000ENTRYPOINT ["/usr/local/bin/tranquil-pds"]