Our Personal Data Server from scratch! tranquil.farm
oauth atproto pds rust postgresql objectstorage fun
at main 43 lines 1.6 kB view raw
1FROM denoland/deno:alpine AS frontend 2WORKDIR /app 3COPY frontend/ ./ 4RUN deno task build 5 6FROM rust:1.92-alpine AS builder 7RUN apk add --no-cache ca-certificates musl-dev pkgconfig openssl-dev openssl-libs-static 8WORKDIR /app 9ARG SLIM="false" 10COPY Cargo.toml Cargo.lock ./ 11COPY crates ./crates 12COPY .sqlx ./.sqlx 13COPY migrations ./crates/tranquil-pds/migrations 14RUN --mount=type=cache,target=/usr/local/cargo/registry \ 15 --mount=type=cache,target=/app/target \ 16 if [ "$SLIM" = "true" ]; then \ 17 SQLX_OFFLINE=true cargo build --release -p tranquil-pds --no-default-features; \ 18 else \ 19 SQLX_OFFLINE=true cargo build --release -p tranquil-pds; \ 20 fi && \ 21 cp target/release/tranquil-pds /tmp/tranquil-pds 22 23FROM alpine:3.23 AS signal-cli 24RUN apk add --no-cache curl tar 25ARG SIGNAL_CLI_VERSION=0.13.24 26RUN curl -fsSL "https://github.com/AsamK/signal-cli/releases/download/v${SIGNAL_CLI_VERSION}/signal-cli-${SIGNAL_CLI_VERSION}-Linux-native.tar.gz" \ 27 | tar xz -C /usr/local/bin 28 29FROM debian:trixie-slim 30RUN apt-get update && apt-get install -y --no-install-recommends msmtp ca-certificates \ 31 && rm -rf /var/lib/apt/lists/* \ 32 && ln -sf /usr/bin/msmtp /usr/sbin/sendmail 33COPY --from=signal-cli /usr/local/bin/signal-cli /usr/local/bin/signal-cli 34VOLUME /var/lib/signal-cli 35COPY --from=builder /tmp/tranquil-pds /usr/local/bin/tranquil-pds 36COPY --from=frontend /app/dist /var/lib/tranquil-pds/frontend 37COPY migrations /app/migrations 38WORKDIR /app 39ENV SIGNAL_CLI_CONFIG=/var/lib/signal-cli 40ENV SERVER_HOST=0.0.0.0 41ENV SERVER_PORT=3000 42EXPOSE 3000 43CMD ["tranquil-pds"]