From 24892db8fd7112f6e196088d87e77d2629af5219 Mon Sep 17 00:00:00 2001 From: Robert Prehn <3952444+prehnRA@users.noreply.github.com> Date: Fri, 8 Jan 2021 12:47:00 -0600 Subject: [PATCH] fix: Build assets as part of Docker build --- Dockerfile | 18 ++++++++++++++++-- apps/app/assets/package.json | 1 - config/prod.exs | 10 ++++++++-- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 240008b0..44a10029 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM elixir:1.8.0-alpine +FROM elixir:1.8.0-alpine AS elixir1 RUN apk add make gcc libc-dev @@ -30,7 +30,21 @@ RUN mix deps.compile ADD ./script /root/app/script ADD ./apps /root/app/apps -RUN mix phx.digest RUN MAKE=cmake mix compile +FROM node:15.0 + +WORKDIR /root/app/apps/app/assets/ +COPY --from=0 /root/app/apps/app/assets/ /root/app/apps/app/assets +COPY --from=0 /root/app/deps/phoenix/ /root/app/apps/app/assets/node_modules/phoenix +COPY --from=0 /root/app/deps/phoenix_html/ /root/app/apps/app/assets/node_modules/phoenix_html +RUN npm install +RUN npm run deploy + +FROM elixir1 + +COPY --from=1 /root/app/apps/app/priv/static/ /root/app/apps/app/priv/static + +RUN mix phx.digest + CMD ["mix", "phx.server"] diff --git a/apps/app/assets/package.json b/apps/app/assets/package.json index 8e7d0715..825d13c2 100644 --- a/apps/app/assets/package.json +++ b/apps/app/assets/package.json @@ -5,7 +5,6 @@ "scripts": { "deploy": "webpack --mode production", "watch": "webpack --mode development --watch", - "preinstall": "npx npm-force-resolutions", "profile": "webpack --mode development --plugin webpack/lib/debug/ProfilingPlugin" }, "dependencies": { diff --git a/config/prod.exs b/config/prod.exs index b221b0a5..c4b10dd0 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -20,10 +20,15 @@ secret_key_base = System.get_env("SECRET_KEY_BASE") ] |> Enum.map(fn {otp_app, module, start_server} -> endpoint = Module.concat(module, "Endpoint") + extra_opts = + if start_server do + [cache_static_manifest: "priv/static/cache_manifest.json"] + else + [] + end - config otp_app, endpoint, + config otp_app, endpoint, [ url: [host: "example.com", port: 80], - cache_static_manifest: "priv/static/cache_manifest.json", http: [ port: String.to_integer(System.get_env("PORT") || "4000"), transport_options: [socket_opts: [:inet6]] @@ -32,6 +37,7 @@ secret_key_base = System.get_env("SECRET_KEY_BASE") pubsub_server: App.PubSub, live_view: [signing_salt: "g5ltUbnQ"], server: start_server + ] ++ extra_opts end) # ## Using releases (Elixir v1.9+)