mirror of
https://github.com/simplex-chat/simplexmq.git
synced 2026-03-29 16:39:58 +00:00
63 lines
1.7 KiB
Docker
63 lines
1.7 KiB
Docker
ARG TAG=22.04
|
|
|
|
FROM ubuntu:${TAG} AS build
|
|
|
|
### Build stage
|
|
|
|
# Install curl and git and simplexmq dependencies
|
|
RUN apt-get update && apt-get install -y curl git build-essential libgmp3-dev zlib1g-dev llvm-12 llvm-12-dev libnuma-dev libssl-dev
|
|
|
|
# Specify bootstrap Haskell versions
|
|
ENV BOOTSTRAP_HASKELL_GHC_VERSION=9.6.3
|
|
ENV BOOTSTRAP_HASKELL_CABAL_VERSION=3.10.1.0
|
|
|
|
# Install ghcup
|
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 sh
|
|
|
|
# Adjust PATH
|
|
ENV PATH="/root/.cabal/bin:/root/.ghcup/bin:$PATH"
|
|
|
|
# Set both as default
|
|
RUN ghcup set ghc "${BOOTSTRAP_HASKELL_GHC_VERSION}" && \
|
|
ghcup set cabal "${BOOTSTRAP_HASKELL_CABAL_VERSION}"
|
|
|
|
COPY . /project
|
|
WORKDIR /project
|
|
|
|
ARG APP
|
|
ARG APP_PORT
|
|
RUN if [ -z "$APP" ] || [ -z "$APP_PORT" ]; then printf "Please spcify \$APP and \$APP_PORT build-arg.\n"; exit 1; fi
|
|
|
|
# Compile app
|
|
RUN cabal update
|
|
RUN cabal build exe:$APP
|
|
|
|
# Create new path containing all files needed
|
|
RUN mkdir /final
|
|
WORKDIR /final
|
|
|
|
# Strip the binary from debug symbols to reduce size
|
|
RUN bin=$(find /project/dist-newstyle -name "$APP" -type f -executable) && \
|
|
mv "$bin" ./ && \
|
|
strip ./"$APP" &&\
|
|
mv /project/scripts/docker/entrypoint-"$APP" ./entrypoint
|
|
|
|
### Final stage
|
|
FROM ubuntu:${TAG}
|
|
|
|
# Install OpenSSL dependency
|
|
RUN apt-get update && apt-get install -y openssl libnuma-dev
|
|
|
|
# Copy compiled app from build stage
|
|
COPY --from=build /final /usr/local/bin/
|
|
|
|
# Open app listening port
|
|
ARG APP_PORT
|
|
EXPOSE $APP_PORT
|
|
|
|
# simplexmq requires using SIGINT to correctly preserve undelivered messages and restore them on restart
|
|
STOPSIGNAL SIGINT
|
|
|
|
# Finally, execute helper script
|
|
ENTRYPOINT [ "/usr/local/bin/entrypoint" ]
|