Our Personal Data Server from scratch! tranquil.farm
pds rust database fun oauth atproto
0

Configure Feed

Select the types of activity you want to include in your feed.

tranquil-pds / Dockerfile
3.9 kB 80 lines
1ARG DISTROLESS_IMAGE=gcr.io/distroless/cc-debian13:latest@sha256:1e3c6d9c255be500eb680cdea0ad07554f52ae92dfcbdf07043a2a435b4c1fe3 2 3FROM node:24-trixie-slim AS frontend 4RUN corepack enable && corepack prepare pnpm@latest --activate 5WORKDIR /app 6COPY frontend/package.json frontend/pnpm-lock.yaml frontend/pnpm-workspace.yaml ./ 7RUN pnpm install --frozen-lockfile 8COPY frontend/ ./ 9RUN pnpm build 10 11FROM rust:1.96-slim-trixie AS builder 12RUN apt-get update && apt-get install -y --no-install-recommends \ 13 ca-certificates pkg-config libssl-dev mold clang protobuf-compiler curl xz-utils \ 14 && rm -rf /var/lib/apt/lists/* 15ARG COMPRESS="true" 16RUN set -eux; \ 17 if [ "$COMPRESS" = "true" ]; then \ 18 arch="$(uname -m)"; \ 19 case "$arch" in \ 20 x86_64) upx_arch=amd64; upx_sha=ddc2654063fe4dc80d95b420788494e4db078ebb01a650692d623b5a9906e61e ;; \ 21 aarch64) upx_arch=arm64; upx_sha=100310f74eb6f67694d1d0377f1c729b6a49238ce8c4de21ea2e7d3406186f8b ;; \ 22 *) echo "upx: no prebuilt binary for $arch, skipping compression"; upx_arch="" ;; \ 23 esac; \ 24 if [ -n "$upx_arch" ]; then \ 25 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"; \ 26 echo "${upx_sha} /tmp/upx.tar.xz" | sha256sum -c -; \ 27 tar -xJf /tmp/upx.tar.xz -C /tmp; \ 28 install -m0755 "/tmp/upx-5.0.2-${upx_arch}_linux/upx" /usr/local/bin/upx; \ 29 rm -rf /tmp/upx.tar.xz "/tmp/upx-5.0.2-${upx_arch}_linux"; \ 30 fi; \ 31 fi 32RUN mkdir -p /stage/var/lib/tranquil-pds/blobs /stage/var/lib/tranquil-pds/store 33ENV RUSTFLAGS="-C linker=clang -C link-arg=-fuse-ld=mold" 34WORKDIR /app 35ARG SLIM="false" 36COPY Cargo.toml Cargo.lock ./ 37COPY .sqlx ./.sqlx 38COPY crates/tranquil-types ./crates/tranquil-types 39COPY crates/tranquil-crypto ./crates/tranquil-crypto 40COPY crates/tranquil-scopes ./crates/tranquil-scopes 41COPY crates/tranquil-config ./crates/tranquil-config 42COPY crates/tranquil-repo ./crates/tranquil-repo 43COPY crates/tranquil-lexicon ./crates/tranquil-lexicon 44COPY crates/tranquil-oauth ./crates/tranquil-oauth 45COPY crates/tranquil-db-traits ./crates/tranquil-db-traits 46COPY crates/tranquil-infra ./crates/tranquil-infra 47COPY crates/tranquil-auth ./crates/tranquil-auth 48COPY crates/tranquil-comms ./crates/tranquil-comms 49COPY crates/tranquil-db ./crates/tranquil-db 50COPY crates/tranquil-ripple ./crates/tranquil-ripple 51COPY crates/tranquil-storage ./crates/tranquil-storage 52COPY crates/tranquil-cache ./crates/tranquil-cache 53COPY crates/tranquil-pds ./crates/tranquil-pds 54COPY crates/tranquil-sync ./crates/tranquil-sync 55COPY crates/tranquil-api ./crates/tranquil-api 56COPY crates/tranquil-oauth-server ./crates/tranquil-oauth-server 57COPY crates/tranquil-store ./crates/tranquil-store 58COPY crates/tranquil-signal ./crates/tranquil-signal 59COPY crates/tranquil-server ./crates/tranquil-server 60COPY migrations ./migrations 61RUN --mount=type=cache,id=cargo-registry,target=/usr/local/cargo/registry \ 62 --mount=type=cache,id=cargo-git,target=/usr/local/cargo/git \ 63 --mount=type=cache,id=tranquil-target,target=/app/target,sharing=locked \ 64 if [ "$SLIM" = "true" ]; then \ 65 SQLX_OFFLINE=true cargo build --release -p tranquil-server --no-default-features; \ 66 else \ 67 SQLX_OFFLINE=true cargo build --release -p tranquil-server; \ 68 fi && \ 69 cp target/release/tranquil-server /tmp/tranquil-pds && \ 70 if [ "$COMPRESS" = "true" ] && command -v upx >/dev/null 2>&1; then upx --best --lzma /tmp/tranquil-pds; fi 71 72FROM ${DISTROLESS_IMAGE} 73COPY --from=builder /tmp/tranquil-pds /usr/local/bin/tranquil-pds 74COPY --from=builder --chown=65532:65532 /stage/var/lib/tranquil-pds /var/lib/tranquil-pds 75COPY --from=frontend --chown=65532:65532 /app/dist /var/lib/tranquil-pds/frontend 76WORKDIR /var/lib/tranquil-pds 77ENV SERVER_HOST=[::] 78ENV SERVER_PORT=3000 79EXPOSE 3000 80ENTRYPOINT ["/usr/local/bin/tranquil-pds"]