fallback: default_type вне if-блока nginx. observer-web: Hex/deps.compile в образе, без dev-watchers в контейнере.
This commit is contained in:
@@ -9,7 +9,7 @@ WORKDIR /app
|
|||||||
|
|
||||||
RUN git clone --depth 1 https://github.com/thiagoesteves/observer_web.git .
|
RUN git clone --depth 1 https://github.com/thiagoesteves/observer_web.git .
|
||||||
|
|
||||||
RUN mix local.hex --force && mix local.rebar --force && mix deps.get
|
RUN mix local.hex --force && mix local.rebar --force && mix deps.get && mix deps.compile
|
||||||
|
|
||||||
COPY docker/observer_web/build-assets.config.exs config/build-assets.config.exs
|
COPY docker/observer_web/build-assets.config.exs config/build-assets.config.exs
|
||||||
RUN printf '\nimport_config "build-assets.config.exs"\n' >> config/config.exs
|
RUN printf '\nimport_config "build-assets.config.exs"\n' >> config/config.exs
|
||||||
@@ -30,10 +30,13 @@ RUN for i in 1 2 3 4 5; do \
|
|||||||
echo "apk retry $i/5..."; sleep 15; \
|
echo "apk retry $i/5..."; sleep 15; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
RUN mix local.hex --force && mix local.rebar --force
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY --from=builder /app /app
|
COPY --from=builder /app /app
|
||||||
COPY docker/observer_web/dev.exs ./dev.exs
|
COPY docker/observer_web/dev.exs ./dev.exs
|
||||||
|
|
||||||
EXPOSE 4000
|
EXPOSE 4000
|
||||||
|
|
||||||
CMD elixir --sname observer_web@observer_web --cookie eventhub_cookie -S mix run --no-halt dev.exs
|
ENV RELEASE_COOKIE=eventhub_cookie
|
||||||
|
CMD elixir --sname observer_web@observer_web --cookie "${RELEASE_COOKIE}" -S mix run --no-halt dev.exs
|
||||||
|
|||||||
@@ -2,16 +2,15 @@ server {
|
|||||||
listen 80 default_server;
|
listen 80 default_server;
|
||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
||||||
|
|
||||||
location / {
|
location ~ ^/v1/ {
|
||||||
set $json 0;
|
|
||||||
if ($uri ~* "^/v1/") { set $json 1; }
|
|
||||||
if ($http_accept ~* "application/json") { set $json 1; }
|
|
||||||
|
|
||||||
if ($json = 1) {
|
|
||||||
default_type application/json;
|
default_type application/json;
|
||||||
return 503 '{"error":"Service Unavailable","message":"EventHub is temporarily unavailable. Please try again later."}';
|
return 503 '{"error":"Service Unavailable","message":"EventHub is temporarily unavailable. Please try again later."}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
if ($http_accept ~* "application/json") {
|
||||||
|
return 503 '{"error":"Service Unavailable","message":"EventHub is temporarily unavailable. Please try again later."}';
|
||||||
|
}
|
||||||
return 503;
|
return 503;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-34
@@ -1,6 +1,4 @@
|
|||||||
# Development server for Observer Web
|
# Observer Web in Docker: assets pre-built in image, no dev watchers.
|
||||||
|
|
||||||
# Phoenix
|
|
||||||
|
|
||||||
defmodule WebDev.Router do
|
defmodule WebDev.Router do
|
||||||
use Phoenix.Router, helpers: false
|
use Phoenix.Router, helpers: false
|
||||||
@@ -22,10 +20,6 @@ defmodule WebDev.Endpoint do
|
|||||||
use Phoenix.Endpoint, otp_app: :observer_web
|
use Phoenix.Endpoint, otp_app: :observer_web
|
||||||
|
|
||||||
socket("/live", Phoenix.LiveView.Socket)
|
socket("/live", Phoenix.LiveView.Socket)
|
||||||
socket("/phoenix/live_reload/socket", Phoenix.LiveReloader.Socket)
|
|
||||||
|
|
||||||
plug(Phoenix.LiveReloader)
|
|
||||||
plug(Phoenix.CodeReloader)
|
|
||||||
|
|
||||||
plug(Plug.Session,
|
plug(Plug.Session,
|
||||||
store: :cookie,
|
store: :cookie,
|
||||||
@@ -44,38 +38,25 @@ defmodule WebDev.ErrorHTML do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Configuration
|
|
||||||
|
|
||||||
port = "PORT" |> System.get_env("4000") |> String.to_integer()
|
port = "PORT" |> System.get_env("4000") |> String.to_integer()
|
||||||
|
|
||||||
Application.put_env(:observer_web, WebDev.Endpoint,
|
Application.put_env(:observer_web, WebDev.Endpoint,
|
||||||
adapter: Bandit.PhoenixAdapter,
|
adapter: Bandit.PhoenixAdapter,
|
||||||
check_origin: false,
|
check_origin: false,
|
||||||
debug_errors: true,
|
debug_errors: false,
|
||||||
http: [port: port],
|
http: [port: port],
|
||||||
live_view: [signing_salt: "eX7TFPY6Y/+XQ1o2pOUW3DjgAoXGTAdX"],
|
live_view: [signing_salt: "eX7TFPY6Y/+XQ1o2pOUW3DjgAoXGTAdX"],
|
||||||
pubsub_server: ObserverWeb.PubSub,
|
pubsub_server: ObserverWeb.PubSub,
|
||||||
render_errors: [formats: [html: WebDev.ErrorHTML], layout: false],
|
render_errors: [formats: [html: WebDev.ErrorHTML], layout: false],
|
||||||
secret_key_base: "jAu3udxm+8tIRDXLLKo+EupAlEvdLsnNG82O8e9nqylpBM9gP8AjUnZ4PWNttztU",
|
secret_key_base: "jAu3udxm+8tIRDXLLKo+EupAlEvdLsnNG82O8e9nqylpBM9gP8AjUnZ4PWNttztU",
|
||||||
url: [host: "localhost"],
|
url: [host: "localhost"],
|
||||||
watchers: [
|
watchers: []
|
||||||
esbuild: {Esbuild, :install_and_run, [:default, ~w(--sourcemap=inline --watch)]},
|
|
||||||
tailwind: {Tailwind, :install_and_run, [:default, ~w(--watch)]}
|
|
||||||
],
|
|
||||||
live_reload: [
|
|
||||||
patterns: [
|
|
||||||
~r"priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$",
|
|
||||||
~r"lib/web/components/.*(ex)$",
|
|
||||||
~r"lib/web/live/.*(ex)$"
|
|
||||||
]
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
Application.put_env(:phoenix, :serve_endpoints, true)
|
Application.put_env(:phoenix, :serve_endpoints, true)
|
||||||
Application.put_env(:phoenix, :persistent, true)
|
Application.put_env(:phoenix, :persistent, true)
|
||||||
|
|
||||||
Task.async(fn ->
|
Task.async(fn ->
|
||||||
# Stop the default Telemetry server to start a new one with new defaults
|
|
||||||
mode = "OBSERVER_WEB_TELEMETRY_MODE" |> System.get_env("local") |> String.to_atom()
|
mode = "OBSERVER_WEB_TELEMETRY_MODE" |> System.get_env("local") |> String.to_atom()
|
||||||
|
|
||||||
retention_period =
|
retention_period =
|
||||||
@@ -96,20 +77,16 @@ Task.async(fn ->
|
|||||||
Process.sleep(:infinity)
|
Process.sleep(:infinity)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
# ============================================================
|
|
||||||
# Автоподключение к узлам EventHub с задержкой
|
|
||||||
# ============================================================
|
|
||||||
Task.start(fn ->
|
Task.start(fn ->
|
||||||
:timer.sleep(7000) # даём время на полный старт Phoenix
|
:timer.sleep(7000)
|
||||||
nodes = [
|
slots = "OBSERVER_EVENTHUB_SLOTS" |> System.get_env("2") |> String.to_integer()
|
||||||
:"eventhub-node1@eventhub-node1",
|
|
||||||
:"eventhub-node2@eventhub-node2",
|
for slot <- 1..slots do
|
||||||
:"eventhub-node3@eventhub-node3"
|
node = :"eventhub-node#{slot}@eventhub-node#{slot}"
|
||||||
]
|
|
||||||
Enum.each(nodes, fn node ->
|
|
||||||
case Node.connect(node) do
|
case Node.connect(node) do
|
||||||
true -> IO.puts("Connected to #{node}")
|
true -> IO.puts("Connected to #{node}")
|
||||||
false -> IO.puts("Failed to connect to #{node} (will retry manually)")
|
false -> IO.puts("Failed to connect to #{node}")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end)
|
|
||||||
Reference in New Issue
Block a user