d35b26c1c2
NOTE: The docker setup is still WIP, production deployment is discouraged until you see the container image uploaded to the project's Package Registry on Codeberg
141 lines
3.8 KiB
Docker
141 lines
3.8 KiB
Docker
#############################################################################
|
|
## build
|
|
#############################################################################
|
|
|
|
FROM debian:bookworm AS builder
|
|
|
|
RUN apt-get -yq update && apt-get -yq install \
|
|
libpq-dev zlib1g-dev libssl-dev libpcre3-dev libgmp-dev \
|
|
darcs git \
|
|
postgresql libpq-dev \
|
|
locales locales-all \
|
|
build-essential \
|
|
ca-certificates \
|
|
curl \
|
|
liblapack-dev \
|
|
liblzma-dev \
|
|
libyaml-dev \
|
|
netbase \
|
|
openssh-client \
|
|
pkg-config
|
|
|
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org -o /install-ghcup.sh && \
|
|
BOOTSTRAP_HASKELL_MINIMAL=1 sh /install-ghcup.sh && \
|
|
rm /install-ghcup.sh
|
|
|
|
RUN locale-gen en_US.UTF-8
|
|
ENV LANG=en_US.UTF-8
|
|
ENV LANGUAGE=en_US:en
|
|
ENV LC_ALL=en_US.UTF-8
|
|
|
|
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.ghcup/bin
|
|
|
|
RUN ghcup install ghc 9.6.6
|
|
RUN ghcup install stack
|
|
|
|
RUN mkdir /build \
|
|
/build/.git \
|
|
/build/app \
|
|
/build/embed \
|
|
/build/hook-darcs \
|
|
/build/hook-git \
|
|
/build/migrations \
|
|
/build/src \
|
|
/build/static \
|
|
/build/templates \
|
|
/build/th
|
|
COPY stack.yaml vervis.cabal COPYING.AGPL3 /build/
|
|
COPY .git /build/.git
|
|
COPY app /build/app
|
|
COPY embed /build/embed
|
|
COPY hook-darcs /build/hook-darcs
|
|
COPY hook-git /build/hook-git
|
|
COPY migrations /build/migrations
|
|
COPY src /build/src
|
|
COPY static /build/static
|
|
COPY templates /build/templates
|
|
COPY th /build/th
|
|
|
|
WORKDIR /build
|
|
|
|
RUN mkdir /build/lib && \
|
|
darcs clone https://vervis.peers.community/repos/6r4Ao /build/lib/ssh
|
|
|
|
RUN stack build --flag vervis:-dev --only-dependencies
|
|
|
|
RUN ls -lh /build
|
|
|
|
RUN stack build --flag vervis:-dev
|
|
|
|
RUN mkdir -p /build/artifacts && \
|
|
cp `stack exec which vervis` /build/artifacts/ && \
|
|
cp `stack exec which vervis-post-receive` /build/artifacts/ && \
|
|
cp `stack exec which vervis-post-apply` /build/artifacts/
|
|
|
|
RUN ls -lh /build/artifacts
|
|
|
|
#############################################################################
|
|
## deployment
|
|
#############################################################################
|
|
|
|
FROM debian:bookworm
|
|
|
|
# Linux UID (user id) for the vervis user, change with [--build-arg UID=1234]
|
|
ARG UID="991"
|
|
# Linux GID (group id) for the vervis user, change with [--build-arg GID=1234]
|
|
ARG GID="991"
|
|
|
|
RUN apt-get -yq update && apt-get -yq install \
|
|
ca-certificates \
|
|
curl \
|
|
libgmp10 \
|
|
liblapack3 \
|
|
liblzma5 \
|
|
libpq5 \
|
|
libssl3 \
|
|
libyaml-0-2 \
|
|
netbase \
|
|
openssh-client \
|
|
zlib1g \
|
|
libpcre3 darcs git \
|
|
locales locales-all \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN locale-gen en_US.UTF-8
|
|
ENV \
|
|
LANG=en_US.UTF-8 \
|
|
LANGUAGE=en_US:en \
|
|
LC_ALL=en_US.UTF-8 \
|
|
TZ=Etc/UTC
|
|
|
|
RUN groupadd -g "${GID}" vervis && \
|
|
useradd -l -u "${UID}" -g vervis -m -d /app vervis
|
|
|
|
WORKDIR /app
|
|
|
|
EXPOSE 3000
|
|
EXPOSE 5022
|
|
|
|
RUN mkdir /app/static /app/log /app/config
|
|
COPY --from=builder /build/artifacts/* /app/
|
|
|
|
## The next 3 lines, which prepare the state dir and SSH key, aren't needed
|
|
## when using docker-compose, because it prepares and sets its own ./state
|
|
## volume.
|
|
##
|
|
## Probably this applies to COPYing config as well, and the VOLUME lines.
|
|
##
|
|
## But we keep these lines in case someone uses this Dockerfile without
|
|
## docker-compose.
|
|
RUN mkdir /app/state /app/state/repos /app/state/deliveries && \
|
|
ssh-keygen -t rsa -m PEM -f /app/state/ssh-host-key && \
|
|
chown vervis:vervis /app/state && \
|
|
chown vervis:vervis /app/static /app/log
|
|
COPY config /app/config
|
|
|
|
VOLUME /app/config
|
|
VOLUME /app/state
|
|
|
|
RUN ls /app
|
|
USER vervis
|
|
ENTRYPOINT /app/vervis
|