45 lines
1.2 KiB
Docker
45 lines
1.2 KiB
Docker
# syntax=docker/dockerfile:1.7
|
|
|
|
FROM --platform=$BUILDPLATFORM node:20-alpine AS frontend-builder
|
|
WORKDIR /app/frontend
|
|
COPY frontend/package.json frontend/pnpm-lock.yaml ./
|
|
RUN corepack enable && pnpm install --frozen-lockfile
|
|
COPY frontend/ ./
|
|
RUN pnpm build
|
|
|
|
FROM --platform=$BUILDPLATFORM elixir:1.18.4-otp-28 AS phoenix-builder
|
|
ENV MIX_ENV=prod
|
|
WORKDIR /app/phoenix
|
|
|
|
RUN mix local.hex --force && mix local.rebar --force
|
|
|
|
COPY phoenix/mix.exs phoenix/mix.lock ./
|
|
RUN mix deps.get --only prod
|
|
RUN mix deps.compile
|
|
|
|
COPY phoenix/config ./config
|
|
COPY phoenix/lib ./lib
|
|
COPY phoenix/priv ./priv
|
|
RUN mix compile
|
|
RUN mix release
|
|
|
|
FROM --platform=$TARGETPLATFORM elixir:1.18.4-otp-28
|
|
RUN groupadd -r app && useradd -r -g app app
|
|
WORKDIR /app
|
|
|
|
COPY --from=phoenix-builder /app/phoenix/_build/prod/rel/shooting_event_phx /app
|
|
COPY --from=frontend-builder /app/frontend/dist /app/web
|
|
|
|
RUN mkdir -p /app/data && chown -R app:app /app
|
|
USER app
|
|
|
|
ENV PHX_SERVER=true
|
|
ENV PORT=8080
|
|
ENV DB_PATH=/app/data/shooting.db
|
|
ENV WEB_DIR=/app/web
|
|
ENV SECRET_KEY_BASE=pxh_v1_V2Y3TXF4Rk9OUm5FdlVQc2s3M2hqd0t1Q2pwYUx4N3Vjb2I5Wk1qXzJ5RWRmQnJ
|
|
|
|
EXPOSE 8080
|
|
ENTRYPOINT ["/app/bin/shooting_event_phx"]
|
|
CMD ["start"]
|