# Development only. Not for production use. FROM docker.io/library/alpine:3.22 AS source RUN apk add --no-cache git patch WORKDIR /src RUN git clone https://tangled.org/microcosm.blue/microcosm-rs . && \ git checkout 3137b07d5268812d2de0f3177664be92196994d8 # the patch's context is pinned to that commit, so it fails loudly on a bump COPY localinfra/pocket.patch ./ RUN patch -p1 < pocket.patch FROM docker.io/library/rust:1.96-slim-trixie AS builder RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates pkg-config perl make cmake clang mold git libssl-dev libsqlite3-dev \ && rm -rf /var/lib/apt/lists/* ENV RUSTFLAGS="-C linker=clang -C link-arg=-fuse-ld=mold" WORKDIR /src COPY --from=source /src ./ RUN cargo build --release --bin pocket --package pocket RUN strip target/release/pocket FROM docker.io/library/debian:trixie-slim RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates wget libssl3 libsqlite3-0 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=builder /src/target/release/pocket /usr/local/bin/pocket # StaticFileEndpoint::new("./static/index.html") resolves against the working directory COPY --from=builder /src/pocket/static /app/static ENV POCKET_DB=/var/lib/pocket/prefs.sqlite3 ENV POCKET_DOMAIN=pocket.tngl.boltless.dev COPY <<'EOF' /usr/local/bin/pocket-entrypoint.sh #!/bin/sh set -eu if [ -f /usr/local/share/ca-certificates/caddy.crt ]; then update-ca-certificates; fi mkdir -p "$(dirname "$POCKET_DB")" # Storage::init runs a bare `create table`, so it only succeeds on an empty db [ -f "$POCKET_DB" ] || pocket --init-db --db "$POCKET_DB" exec pocket --db "$POCKET_DB" --domain "$POCKET_DOMAIN" EOF RUN chmod +x /usr/local/bin/pocket-entrypoint.sh EXPOSE 3000 ENTRYPOINT ["/usr/local/bin/pocket-entrypoint.sh"]