Something went wrong. Try again.
annot.at is a service for syncing static websites, such as blogs, to atproto and standard.site annot.at
elixir atproto standardsite
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106# 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/_/debian/tags?name=trixie-20260610-slim - for the release image# - https://pkgs.org/ - resource for finding needed packages# - Ex: docker.io/hexpm/elixir:1.20.0-erlang-29.0.1-debian-trixie-20260610-slim#ARG ELIXIR_VERSION=1.20.4ARG OTP_VERSION=29.1.2ARG DEBIAN_VERSION=trixie-20261020-slim
ARG BUILDER_IMAGE="docker.io/hexpm/elixir:${ELIXIR_VERSION}-erlang-${OTP_VERSION}-debian-${DEBIAN_VERSION}"ARG RUNNER_IMAGE="docker.io/debian:${DEBIAN_VERSION}"
FROM ${BUILDER_IMAGE} AS builder
# install build dependenciesRUN apt-get update \ && apt-get install -y --no-install-recommends build-essential git nodejs npm \ && 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
RUN mix assets.setup
COPY priv priv
COPY lib lib
# Compile the releaseRUN mix compileRUN mix sentry.package_source_code
COPY assets assets
# Install packagesRUN npm ci --prefix assets
# compile assetsRUN 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 libstdc++6 openssl libncurses6 locales ca-certificates curl \ && 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"
# Only copy the final release from the build stageCOPY --from=builder --chown=nobody:root /app/_build/${MIX_ENV}/rel/annot_at ./
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 ["/app/bin/server"]