objective categorical abstract machine language personal data server
1FROM ocaml/opam:debian-12-ocaml-5.2 AS build
2
3ARG NODE_VERSION=v24.11.1
4ARG OPAM_VERSION=2.5
5ARG DUNE_VERSION=3.20.2
6
7ARG GIT_REV
8ENV GIT_REV=$GIT_REV
9
10USER root
11RUN apt-get update && apt-get install -y cmake git libev-dev libffi-dev libgmp-dev libssl-dev libsqlite3-dev libpcre3-dev pkg-config
12RUN ln -nsf /usr/bin/opam-${OPAM_VERSION} /usr/bin/opam
13USER opam
14
15WORKDIR /home/opam/pegasus
16
17RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
18
19ENV NVM_DIR=/home/opam/.nvm
20ENV CI=true
21
22RUN bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm alias default $NODE_VERSION && nvm use default && corepack enable pnpm"
23
24ADD . .
25
26RUN bash -c "source $NVM_DIR/nvm.sh && pnpm install --frozen-lockfile"
27
28ENV DUNE_CACHE="enabled"
29RUN --mount=type=cache,target=/home/opam/.opam/download-cache,uid=1000,gid=1000 \
30 --mount=type=cache,target=/home/opam/.cache/dune,uid=1000,gid=1000 \
31 opam install dune.$DUNE_VERSION
32RUN --mount=type=cache,target=/home/opam/.cache/dune,uid=1000,gid=1000 \
33 opam exec dune pkg lock
34RUN --mount=type=cache,target=/home/opam/.cache/dune,uid=1000,gid=1000 \
35 bash -c "source $NVM_DIR/nvm.sh && opam exec dune build -- --release --stop-on-first-error"
36
37FROM debian:12 AS run
38
39RUN apt-get update && apt-get install -y ca-certificates cmake git libev-dev libffi-dev libgmp-dev libssl-dev libsqlite3-dev libpcre3-dev pkg-config netbase
40
41RUN mkdir /data
42
43COPY --from=build /home/opam/pegasus/_build/default/bin/main.exe /bin/pegasus
44COPY --from=build /home/opam/pegasus/_build/default/bin/gen_keys.exe /bin/gen-keys
45
46ENTRYPOINT ["/bin/pegasus"]
47
48LABEL org.opencontainers.image.source="https://github.com/futurgh/pegasus"
49LABEL org.opencontainers.image.description="pegasus, an atproto pds"
50LABEL org.opencontainers.image.licenses=MPL-2.0