content: # Litestream parts copied from https://github.com/benbjohnson/litestream-docker-example/blob/main/Dockerfile
  
  # 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?page=1&name=ubuntu
  # https://hub.docker.com/_/ubuntu?tab=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?tab=tags&page=1&name=bullseye-20240513-slim - for the release image
  #   - https://pkgs.org/ - resource for finding needed packages
  #   - Ex: hexpm/elixir:1.16.2-erlang-26.2.5-debian-bullseye-20240513-slim
  #
  #
  ARG ELIXIR_VERSION=1.16.2
  ARG OTP_VERSION=26.2.5
  ARG DEBIAN_VERSION=bullseye-20240513-slim
  
  ARG BUILDER_IMAGE="hexpm/elixir:${ELIXIR_VERSION}-erlang-${OTP_VERSION}-debian-${DEBIAN_VERSION}"
  ARG RUNNER_IMAGE="debian:${DEBIAN_VERSION}"
  
  FROM ${BUILDER_IMAGE} as builder
  
  # install build dependencies
  RUN apt-get update -y && apt-get install -y build-essential git nodejs npm  \
      && apt-get clean && rm -f /var/lib/apt/lists/*_*
  
  # Download the static build of Litestream directly into the path & make it executable.
  # This is done in the builder and copied as the chmod doubles the size.
  ADD https://github.com/benbjohnson/litestream/releases/download/v0.3.8/litestream-v0.3.8-linux-amd64-static.tar.gz /tmp/litestream.tar.gz
  RUN tar -C /usr/local/bin -xzf /tmp/litestream.tar.gz
  
  
  # prepare build dir
  WORKDIR /app
  
  # install hex + rebar
  RUN mix local.hex --force && \
      mix local.rebar --force
  
  # set build ENV
  ENV MIX_ENV="prod"
  # Without this it is breaking on cross platform builds again https://elixirforum.com/t/mix-deps-get-memory-explosion-when-doing-cross-platform-docker-build/57157/3
  ENV ERL_FLAGS="+JPperf true"
  # install mix dependencies
  COPY mix.exs mix.lock ./
  RUN mix deps.get --only $MIX_ENV
  RUN 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 lib lib
  
  COPY assets assets
  
  # FOR DAISY
  # Install node and npm
  # RUN apt-get install -y nodejs
  # Added for Daisy UI see this forum answer https://elixirforum.com/t/how-to-get-daisyui-and-phoenix-to-work/46612/9
  RUN npm --prefix ./assets ci --progress=false --no-audit --loglevel=error
  # compile assets
  RUN mix assets.deploy
  
  # Compile the release
  RUN mix compile
  
  # Changes to config/runtime.exs don't require recompiling the code
  COPY config/runtime.exs config/
  
  COPY rel rel
  RUN mix release
  
  # start a new build stage so that the final image will only contain
  # the compiled release and other runtime necessities
  FROM ${RUNNER_IMAGE}
  
  RUN apt-get update -y && \
      apt-get install -y libstdc++6 openssl libncurses5 locales ca-certificates pandoc \
      && apt-get clean && rm -f /var/lib/apt/lists/*_*
  
  # Set the locale
  RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen
  
  ENV LANG en_US.UTF-8
  ENV LANGUAGE en_US:en
  ENV LC_ALL en_US.UTF-8
  
  WORKDIR "/app"
  RUN chown nobody /app
  
  # set runner ENV
  ENV MIX_ENV="prod"
  
  # Only copy the final release & litestream from the build stage
  COPY --from=builder --chown=nobody:root /app/_build/${MIX_ENV}/rel/phoenix_00 ./
  COPY --from=builder --chown=nobody:root /usr/local/bin/litestream /usr/local/bin/litestream
  
  # COPY  etc/litestream.yml /etc/litestream.yml
  COPY  scripts/litestream-docker.sh /scripts/litestream-docker.sh
  
  USER nobody
  
  EXPOSE 4000
  
  # 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", "--"]
  # Copy Litestream configuration file & startup script.
  
  
  CMD [ "/scripts/litestream-docker.sh" ]
  