diff --git a/Dockerfile b/Dockerfile index 8c44e88..9762f11 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,26 +11,30 @@ # - https://pkgs.org/ - resource for finding needed packages # - Ex: hexpm/elixir:1.17.2-erlang-27.0.1-debian-bullseye-20240904-slim # -ARG ELIXIR_VERSION=1.17.2 -ARG OTP_VERSION=27.0.1 -ARG DEBIAN_VERSION=bullseye-20240904-slim +ARG ELIXIR_VERSION=1.18.1 +ARG OTP_VERSION=27.2 +ARG DEBIAN_VERSION=bookworm-20241223-slim ARG BUILDER_IMAGE="hexpm/elixir:${ELIXIR_VERSION}-erlang-${OTP_VERSION}-debian-${DEBIAN_VERSION}" ARG RUNNER_IMAGE="debian:${DEBIAN_VERSION}" +ARG NODE_VERSION=20 #################################################################################################### -FROM ${BUILDER_IMAGE} as package_installer +FROM ${BUILDER_IMAGE} AS package_installer # install build dependencies +RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_VERSION}.x RUN apt-get update -y && apt-get install -y build-essential \ git \ locales \ + curl \ inotify-tools \ + nodejs \ && apt-get clean && rm -f /var/lib/apt/lists/*_* # prepare build dir WORKDIR /app #################################################################################################### -FROM package_installer as development +FROM package_installer AS development RUN mix local.hex --force && \ mix archive.install hex phx_new --force && \ mix local.rebar --force @@ -39,7 +43,7 @@ COPY . . CMD [ "bash" ] #################################################################################################### -FROM package_installer as builder +FROM package_installer AS builder # install hex + rebar RUN mix local.hex --force && \ @@ -77,21 +81,20 @@ 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 \ - && apt-get clean && rm -f /var/lib/apt/lists/*_* + apt-get install -y libstdc++6 openssl libncurses5 locales ca-certificates \ + && 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 +ENV LANG=en_US.UTF-8 +ENV LANGUAGE=en_US:en +ENV LC_ALL=en_US.UTF-8 WORKDIR "/app" RUN chown nobody /app @@ -100,7 +103,19 @@ RUN chown nobody /app ENV MIX_ENV="prod" # Only copy the final release from the build stage -COPY --from=builder --chown=nobody:root /app/_build/${MIX_ENV}/rel/phoenix_deploy_test ./ +COPY --from=builder --chown=nobody:root /app/_build/${MIX_ENV}/rel/phx_db ./ + +# Copy the tailwind-cli binary used to compile stylesheets for pages +RUN mkdir -p ./bin/_build +COPY --from=builder --chown=nobody:root /app/_build/tailwind-* ./bin/_build/ + +# Copy heroicons svg files to used on the icon component +RUN mkdir -p ./vendor +COPY --from=builder --chown=nobody:root /app/deps/heroicons ./vendor/heroicons + +# create cache dir for Req +RUN mkdir -p /nonexistent/.cache/req +RUN chown nobody:root /nonexistent/.cache/req USER nobody @@ -109,4 +124,4 @@ USER nobody # above and adding an entrypoint. See https://github.com/krallin/tini for details # ENTRYPOINT ["/tini", "--"] -CMD ["/app/bin/server"] +CMD ["sh", "-c", "/app/bin/migrate && /app/bin/server"] diff --git a/compose.yml b/compose.yml index e8918f7..62a755a 100644 --- a/compose.yml +++ b/compose.yml @@ -1,16 +1,16 @@ services: - # db: - # image: postgres:16 - # restart: always - # environment: - # POSTGRES_USER: postgres - # POSTGRES_PASSWORD: postgres - # POSTGRES_DB: phoenix_deploy_test_dev - # volumes: - # - postgres:/var/lib/postgresql/data - # - /etc/localtime:/etc/localtime:ro - # ports: - # - 5432:5432 + db: + image: postgres:17 + restart: always + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: bmt_checkout_dev + volumes: + - postgres:/var/lib/postgresql/data + - /etc/localtime:/etc/localtime:ro + ports: + - 5432:5432 app: command: bash #-c "mix deps.get && mix phx.server" @@ -20,11 +20,11 @@ services: context: . dockerfile: Dockerfile target: development - + environment: - HISTFILE=/usr/local/hist/.bash_history - # depends_on: - # - db + depends_on: + - db volumes: - .:/app - bash_history:/usr/local/hist @@ -34,4 +34,4 @@ services: volumes: bash_history: - # postgres: + postgres: