forked from
futur.blue/pegasus
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.0
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
12
13RUN bash -c "curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh | bash -s -- --version $OPAM_VERSION"
14RUN bash -c "chown opam:opam /bin/opam"
15USER opam
16
17WORKDIR /home/opam/pegasus
18
19RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
20
21ENV NVM_DIR=/home/opam/.nvm
22ENV CI=true
23
24RUN bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm alias default $NODE_VERSION && nvm use default && corepack enable pnpm"
25
26ADD . .
27
28RUN bash -c "source $NVM_DIR/nvm.sh && pnpm install --frozen-lockfile"
29
30ENV DUNE_CACHE="enabled"
31RUN --mount=type=cache,target=/home/opam/.opam/download-cache,uid=1000,gid=1000 \
32 --mount=type=cache,target=/home/opam/.cache/dune,uid=1000,gid=1000 \
33 opam install dune.$DUNE_VERSION
34RUN --mount=type=cache,target=/home/opam/.cache/dune,uid=1000,gid=1000 \
35 opam exec dune pkg lock
36RUN --mount=type=cache,target=/home/opam/.cache/dune,uid=1000,gid=1000 \
37 bash -c "source $NVM_DIR/nvm.sh && opam exec dune build -- --release --stop-on-first-error"
38
39FROM debian:12 AS run
40
41RUN 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
42
43RUN mkdir /data
44
45COPY --from=build /home/opam/pegasus/_build/default/bin/main.exe /bin/pegasus
46COPY --from=build /home/opam/pegasus/_build/default/bin/gen_keys.exe /bin/gen-keys
47
48ENTRYPOINT ["/bin/pegasus"]
49
50LABEL org.opencontainers.image.source="https://github.com/futurgh/pegasus"
51LABEL org.opencontainers.image.description="pegasus, an atproto pds"
52LABEL org.opencontainers.image.licenses=MPL-2.0