mirror of
https://github.com/SrIzan10/starters.git
synced 2026-05-01 11:05:16 +00:00
85 lines
1.4 KiB
Docker
85 lines
1.4 KiB
Docker
ARG MIX_ENV="prod"
|
|
ARG DATABASE_URL
|
|
ARG PORT
|
|
ARG POOL_SIZE
|
|
ARG SECRET_KEY_BASE
|
|
|
|
|
|
# build stage
|
|
FROM hexpm/elixir:1.12.3-erlang-24.1.2-alpine-3.14.2 AS build
|
|
|
|
# install build dependencies
|
|
RUN apk add --no-cache build-base git python3 curl
|
|
|
|
# sets work dir
|
|
WORKDIR /app
|
|
|
|
# install hex + rebar
|
|
RUN mix local.hex --force && \
|
|
mix local.rebar --force
|
|
|
|
ARG MIX_ENV
|
|
ENV MIX_ENV="${MIX_ENV}"
|
|
|
|
# install mix dependencies
|
|
COPY mix.exs mix.lock ./
|
|
RUN mix deps.get --only $MIX_ENV
|
|
|
|
# copy compile configuration files
|
|
RUN mkdir config
|
|
COPY config/config.exs config/$MIX_ENV.exs config/
|
|
|
|
# compile dependencies
|
|
RUN mix deps.compile
|
|
|
|
# copy assets
|
|
COPY priv priv
|
|
COPY assets assets
|
|
|
|
# Compile assets
|
|
RUN mix assets.deploy
|
|
|
|
# compile project
|
|
COPY lib lib
|
|
RUN mix compile
|
|
|
|
# copy runtime configuration file
|
|
COPY config/runtime.exs config/
|
|
|
|
# assemble release
|
|
RUN mix release
|
|
|
|
# app stage
|
|
FROM alpine:3.14.2 AS app
|
|
|
|
ARG MIX_ENV
|
|
|
|
# install runtime dependencies
|
|
RUN apk add --no-cache libstdc++ openssl ncurses-libs
|
|
|
|
ENV USER="elixir"
|
|
|
|
WORKDIR "/home/${USER}/app"
|
|
|
|
# Create unprivileged user to run the release
|
|
RUN \
|
|
addgroup \
|
|
-g 1000 \
|
|
-S "${USER}" \
|
|
&& adduser \
|
|
-s /bin/sh \
|
|
-u 1000 \
|
|
-G "${USER}" \
|
|
-h "/home/${USER}" \
|
|
-D "${USER}" \
|
|
&& su "${USER}"
|
|
|
|
# run as user
|
|
USER "${USER}"
|
|
|
|
# copy release executables
|
|
COPY --from=build --chown="${USER}":"${USER}" /app/_build/"${MIX_ENV}"/rel/railwayphoenix ./
|
|
|
|
ENTRYPOINT ["bin/railwayphoenix"]
|
|
|
|
CMD ["start"] |