objective categorical abstract machine language personal data server
at main 1.8 kB view raw
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