objective categorical abstract machine language personal data server
at main 1.9 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.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