1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- # we can not use the pre-built tar because the distribution is
- # platform specific, it makes sense to build it in the docker
- #### Builder
- FROM hexpm/elixir:1.16.0-erlang-26.2.1-alpine-3.18.4 as buildcontainer
- ARG MIX_ENV=ce
- # preparation
- ENV MIX_ENV=$MIX_ENV
- ENV NODE_ENV=production
- ENV NODE_OPTIONS=--openssl-legacy-provider
- # custom ERL_FLAGS are passed for (public) multi-platform builds
- # to fix qemu segfault, more info: https://github.com/erlang/otp/pull/6340
- ARG ERL_FLAGS
- ENV ERL_FLAGS=$ERL_FLAGS
- RUN mkdir /app
- WORKDIR /app
- # install build dependencies
- RUN apk add --no-cache git nodejs yarn python3 npm ca-certificates wget gnupg make gcc libc-dev && \
- npm install npm@latest -g
- COPY mix.exs ./
- COPY mix.lock ./
- COPY config ./config
- RUN mix local.hex --force && \
- mix local.rebar --force && \
- mix deps.get --only prod && \
- mix deps.compile
- COPY assets/package.json assets/package-lock.json ./assets/
- COPY tracker/package.json tracker/package-lock.json ./tracker/
- RUN npm install --prefix ./assets && \
- npm install --prefix ./tracker
- COPY assets ./assets
- COPY tracker ./tracker
- COPY priv ./priv
- COPY lib ./lib
- COPY extra ./extra
- RUN npm run deploy --prefix ./tracker && \
- mix assets.deploy && \
- mix phx.digest priv/static && \
- mix download_country_database && \
- mix sentry.package_source_code
- WORKDIR /app
- COPY rel rel
- RUN mix release plausible
- # Main Docker Image
- FROM alpine:3.18.4
- LABEL maintainer="plausible.io <hello@plausible.io>"
- ARG BUILD_METADATA={}
- ENV BUILD_METADATA=$BUILD_METADATA
- ENV LANG=C.UTF-8
- ARG MIX_ENV=ce
- ENV MIX_ENV=$MIX_ENV
- RUN adduser -S -H -u 999 -G nogroup plausible -g 'Plausible Analytics'
- RUN apk upgrade --no-cache
- RUN apk add --no-cache openssl ncurses libstdc++ libgcc ca-certificates
- COPY --from=buildcontainer --chmod=a+rX /app/_build/${MIX_ENV}/rel/plausible /app
- COPY --chmod=755 ./rel/docker-entrypoint.sh /entrypoint.sh
- USER 999
- WORKDIR /app
- ENV LISTEN_IP=0.0.0.0
- ENTRYPOINT ["/entrypoint.sh"]
- EXPOSE 8000
- CMD ["run"]
|