Dockerfile 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # we can not use the pre-built tar because the distribution is
  2. # platform specific, it makes sense to build it in the docker
  3. #### Builder
  4. FROM hexpm/elixir:1.16.0-erlang-26.2.1-alpine-3.18.4 as buildcontainer
  5. ARG MIX_ENV=small
  6. # preparation
  7. ENV MIX_ENV=$MIX_ENV
  8. ENV NODE_ENV=production
  9. ENV NODE_OPTIONS=--openssl-legacy-provider
  10. # custom ERL_FLAGS are passed for (public) multi-platform builds
  11. # to fix qemu segfault, more info: https://github.com/erlang/otp/pull/6340
  12. ARG ERL_FLAGS
  13. ENV ERL_FLAGS=$ERL_FLAGS
  14. RUN mkdir /app
  15. WORKDIR /app
  16. # install build dependencies
  17. RUN apk add --no-cache git nodejs yarn python3 npm ca-certificates wget gnupg make gcc libc-dev && \
  18. npm install npm@latest -g
  19. COPY mix.exs ./
  20. COPY mix.lock ./
  21. COPY config ./config
  22. RUN mix local.hex --force && \
  23. mix local.rebar --force && \
  24. mix deps.get --only prod && \
  25. mix deps.compile
  26. COPY assets/package.json assets/package-lock.json ./assets/
  27. COPY tracker/package.json tracker/package-lock.json ./tracker/
  28. RUN npm install --prefix ./assets && \
  29. npm install --prefix ./tracker
  30. COPY assets ./assets
  31. COPY tracker ./tracker
  32. COPY priv ./priv
  33. COPY lib ./lib
  34. COPY extra ./extra
  35. RUN npm run deploy --prefix ./tracker && \
  36. mix assets.deploy && \
  37. mix phx.digest priv/static && \
  38. mix download_country_database && \
  39. mix sentry.package_source_code
  40. WORKDIR /app
  41. COPY rel rel
  42. RUN mix release plausible
  43. # Main Docker Image
  44. FROM alpine:3.18.4
  45. LABEL maintainer="plausible.io <hello@plausible.io>"
  46. ARG BUILD_METADATA={}
  47. ENV BUILD_METADATA=$BUILD_METADATA
  48. ENV LANG=C.UTF-8
  49. ARG MIX_ENV=small
  50. ENV MIX_ENV=$MIX_ENV
  51. RUN adduser -S -H -u 999 -G nogroup plausible -g 'Plausible Analytics'
  52. RUN apk upgrade --no-cache
  53. RUN apk add --no-cache openssl ncurses libstdc++ libgcc ca-certificates
  54. COPY --from=buildcontainer --chmod=a+rX /app/_build/${MIX_ENV}/rel/plausible /app
  55. COPY --chmod=755 ./rel/docker-entrypoint.sh /entrypoint.sh
  56. USER 999
  57. WORKDIR /app
  58. ENV LISTEN_IP=0.0.0.0
  59. ENTRYPOINT ["/entrypoint.sh"]
  60. EXPOSE 8000
  61. CMD ["run"]