/
Dockerfile
80 lines (59 loc) · 1.99 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
FROM bitwalker/alpine-elixir-phoenix:1.15.0 as builder
RUN apk --no-cache --update add alpine-sdk gmp-dev automake libtool inotify-tools autoconf python3 file qemu-x86_64
# Get Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="$HOME/.cargo/bin:${PATH}"
ENV RUSTFLAGS="-C target-feature=-crt-static"
# prepare build dir
WORKDIR /app
# install hex + rebar
RUN mix local.hex --force && \
mix local.rebar --force
# set build ENV
ENV MIX_ENV="prod"
ARG GODWOKEN_CHAIN
ARG GWSCAN_GRAPHIQL
ARG GRAFANA_HOST
ARG GRAFANA_AUTH_TOKEN
ARG GRAFANA_FOLDER_NAME
ENV GODWOKEN_CHAIN=$GODWOKEN_CHAIN
ENV GWSCAN_GRAPHIQL=$GWSCAN_GRAPHIQL
ENV GRAFANA_HOST=$GRAFANA_HOST
ENV GRAFANA_AUTH_TOKEN=$GRAFANA_AUTH_TOKEN
ENV GRAFANA_FOLDER_NAME=$GRAFANA_FOLDER_NAME
# install mix dependencies
COPY mix.exs mix.lock ./
RUN mix deps.get --only $MIX_ENV
RUN mkdir config
RUN mkdir config/prod
# 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/
COPY config/chains/ config/chains/
COPY native native
RUN mix deps.compile
COPY priv priv
# note: if your project uses a tool like https://purgecss.com/,
# which customizes asset compilation based on what it finds in
# your Elixir templates, you will need to move the asset compilation
# step down so that `lib` is available.
COPY assets assets
# compile assets
RUN cd assets && \
npm install
RUN mix assets.deploy
# Compile the release
COPY lib lib
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
FROM bitwalker/alpine-elixir-phoenix:1.15.0 as deploy
WORKDIR "/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/godwoken_explorer ./
COPY --from=builder /app/assets/node_modules ./node_modules
CMD ["/app/bin/server"]