Our Personal Data Server from scratch!
tranquil.farm
oauth
atproto
pds
rust
postgresql
objectstorage
fun
1FROM rust:1.92-alpine AS builder
2RUN apk add --no-cache ca-certificates musl-dev pkgconfig openssl-dev openssl-libs-static
3WORKDIR /app
4ARG SLIM="false"
5COPY Cargo.toml Cargo.lock ./
6COPY crates ./crates
7COPY .sqlx ./.sqlx
8COPY migrations ./crates/tranquil-pds/migrations
9RUN --mount=type=cache,target=/usr/local/cargo/registry \
10 --mount=type=cache,target=/app/target \
11 if [ "$SLIM" = "true" ]; then \
12 SQLX_OFFLINE=true cargo build --release -p tranquil-pds --no-default-features; \
13 else \
14 SQLX_OFFLINE=true cargo build --release -p tranquil-pds; \
15 fi && \
16 cp target/release/tranquil-pds /tmp/tranquil-pds
17
18FROM alpine:3.23
19RUN apk add --no-cache msmtp ca-certificates && ln -sf /usr/bin/msmtp /usr/sbin/sendmail
20COPY --from=builder /tmp/tranquil-pds /usr/local/bin/tranquil-pds
21COPY migrations /app/migrations
22WORKDIR /app
23ENV SERVER_HOST=0.0.0.0
24ENV SERVER_PORT=3000
25EXPOSE 3000
26CMD ["tranquil-pds"]