Something went wrong. Try again.
A self publishing platform and presentation framework on fire built with Elixir & Phoenix LiveView 🐦🔥 alchemy-pub.fly.dev
liveview slides blog-engine ssg blog markdown elixir presentation rss phoenix
Something went wrong. Try again.
2.8 kB · 99 lines
Dockerfile
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100# Find eligible builder and runner images on Docker Hub. We use Ubuntu/Debian# instead of Alpine to avoid DNS resolution issues in production.## https://hub.docker.com/r/hexpm/elixir/tags?name=ubuntu# https://hub.docker.com/_/ubuntu/tags## This file is based on these images:## - https://hub.docker.com/r/hexpm/elixir/tags - for the build image# - https://hub.docker.com/_/ubuntu/tags?name=noble-20260509.1 - for the release image# - https://pkgs.org/ - resource for finding needed packages# - Ex: docker.io/hexpm/elixir:1.19.5-erlang-28.5.0.1-ubuntu-noble-20260509.1#ARG ELIXIR_VERSION=1.19.5ARG OTP_VERSION=28.5.0.1ARG UBUNTU_VERSION=noble-20260509.1
ARG BUILDER_IMAGE="docker.io/hexpm/elixir:${ELIXIR_VERSION}-erlang-${OTP_VERSION}-ubuntu-${UBUNTU_VERSION}"ARG RUNNER_IMAGE="docker.io/ubuntu:${UBUNTU_VERSION}"
FROM ${BUILDER_IMAGE} AS builder
# install build dependenciesRUN apt-get update \ && apt-get install -y --no-install-recommends build-essential git ca-certificates \ && rm -rf /var/lib/apt/lists/*
# prepare build dirWORKDIR /app
# install hex + rebarRUN mix local.hex --force \ && mix local.rebar --force
# set build ENVENV MIX_ENV="prod"
# install mix dependenciesCOPY mix.exs mix.lock ./RUN mix deps.get --only $MIX_ENVRUN mkdir config
# copy compile-time config files before we compile dependencies# to ensure any relevant config change will trigger the dependencies# to be re-compiled.COPY config/config.exs config/${MIX_ENV}.exs config/RUN mix deps.compile
COPY priv priv
COPY assets assets
RUN mix setup
RUN mix compile
RUN mix assets.deploy
# Changes to config/runtime.exs don't require recompiling the codeCOPY config/runtime.exs config/
COPY rel relRUN mix release
# start a new build stage so that the final image will only contain# the compiled release and other runtime necessitiesFROM ${RUNNER_IMAGE} AS final
RUN apt-get update \ && apt-get install -y --no-install-recommends inotify-tools libstdc++6 openssl libncurses6 locales ca-certificates \ && rm -rf /var/lib/apt/lists/*
# Set the localeRUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen \ && locale-gen
ENV LANG=en_US.UTF-8ENV LANGUAGE=en_US:enENV LC_ALL=en_US.UTF-8
WORKDIR "/app"RUN chown nobody /app
# set runner ENVENV MIX_ENV="prod"ENV PHX_SERVER="true"
# Only copy the final release from the build stageCOPY --from=builder --chown=nobody:root /app/_build/${MIX_ENV}/rel/example_site ./
USER nobody
# If using an environment that doesn't automatically reap zombie processes, it is# advised to add an init process such as tini via `apt-get install`# above and adding an entrypoint. See https://github.com/krallin/tini for details# ENTRYPOINT ["/tini", "--"]
CMD ["/bin/sh", "-c", "/app/bin/migrate && exec /app/bin/server"]