From 8acfb0169b48af1d5543b53066873cd43e905d19 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sat, 31 Jan 2026 11:19:34 -0800 Subject: [PATCH] Replace NGINX with Vite dev server in Docker setup - Use Node.js runtime instead of OpenResty/NGINX - Clone isle.pizza frontend from master branch - Add entrypoint script that runs prepare:assets and starts Vite - Remove ISLE_EMSCRIPTEN_HOST build flag - Delete nginx.conf (no longer needed) --- docker/emscripten/Dockerfile | 21 ++++++--- docker/emscripten/entrypoint.sh | 8 ++++ docker/emscripten/nginx.conf | 82 --------------------------------- 3 files changed, 23 insertions(+), 88 deletions(-) create mode 100644 docker/emscripten/entrypoint.sh delete mode 100644 docker/emscripten/nginx.conf diff --git a/docker/emscripten/Dockerfile b/docker/emscripten/Dockerfile index fcfab66f..08a9fb87 100644 --- a/docker/emscripten/Dockerfile +++ b/docker/emscripten/Dockerfile @@ -31,15 +31,24 @@ COPY --chown=emscripten:emscripten packaging/ ./packaging/ COPY --chown=emscripten:emscripten extensions/ ./extensions/ COPY --chown=emscripten:emscripten CMakeLists.txt . -RUN emcmake cmake -S . -B build -DISLE_BUILD_CONFIG=OFF -DISLE_DEBUG=OFF -DCMAKE_BUILD_TYPE=Release -DISLE_EMSCRIPTEN_HOST=/assets && \ +RUN emcmake cmake -S . -B build -DISLE_BUILD_CONFIG=OFF -DISLE_DEBUG=OFF -DCMAKE_BUILD_TYPE=Release && \ emmake cmake --build build -j 32 RUN echo "Fetching isle.pizza frontend..."; \ - git clone --depth 1 -b legacy https://github.com/isledecomp/isle.pizza /tmp/isle.pizza; + git clone --depth 1 https://github.com/isledecomp/isle.pizza /tmp/isle.pizza; -FROM openresty/openresty:alpine +FROM node:22-alpine + +WORKDIR /app + +COPY --from=builder /tmp/isle.pizza ./ +COPY --from=builder /src/build/isle.js /src/build/isle.wasm ./ + +RUN npm ci + +COPY docker/emscripten/entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh -COPY docker/emscripten/nginx.conf /usr/local/openresty/nginx/conf/nginx.conf -COPY --from=builder /tmp/isle.pizza /usr/local/openresty/nginx/html -COPY --from=builder /src/build/isle.* /usr/local/openresty/nginx/html EXPOSE 6931 + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker/emscripten/entrypoint.sh b/docker/emscripten/entrypoint.sh new file mode 100644 index 00000000..b5e8d366 --- /dev/null +++ b/docker/emscripten/entrypoint.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +echo "Setting up LEGO Island assets..." +npm run prepare:assets -- -f -p /assets + +echo "Starting development server..." +exec npm run dev -- --host 0.0.0.0 --port 6931 diff --git a/docker/emscripten/nginx.conf b/docker/emscripten/nginx.conf deleted file mode 100644 index cbd53d25..00000000 --- a/docker/emscripten/nginx.conf +++ /dev/null @@ -1,82 +0,0 @@ -events { - worker_connections 1024; -} - -http { - init_by_lua_block { - function find_entry_in_dir(parent_dir, name_to_find) - local safe_parent_dir = string.gsub(parent_dir, "'", "'\\''") - local lower_name_to_find = string.lower(name_to_find) - local pipe = io.popen("ls -A '" .. safe_parent_dir .. "' 2>/dev/null") - if not pipe then return nil end - - for entry in pipe:lines() do - if string.lower(entry) == lower_name_to_find then - pipe:close() - return entry - end - end - pipe:close() - return nil - end - - function find_recursive_path(path_to_check) - local current_resolved_path = "/" - - for component in string.gmatch(path_to_check, "([^/]+)") do - local found_entry = find_entry_in_dir(current_resolved_path, component) - if not found_entry then - return nil - end - - if current_resolved_path == "/" then - current_resolved_path = current_resolved_path .. found_entry - else - current_resolved_path = current_resolved_path .. "/" .. found_entry - end - end - return current_resolved_path - end - } - - include /usr/local/openresty/nginx/conf/mime.types; - - server { - listen 6931; - server_name localhost; - - add_header 'Cross-Origin-Embedder-Policy' 'require-corp'; - add_header 'Cross-Origin-Opener-Policy' 'same-origin'; - add_header 'Cross-Origin-Resource-Policy' 'cross-origin'; - - location / { - root /usr/local/openresty/nginx/html; - index index.html isle.html; - try_files $uri $uri/ =404; - } - - location /assets/ { - content_by_lua_block { - local request_uri = ngx.var.uri - local resolved_path = find_recursive_path(request_uri) - - if not resolved_path then - local fallback_uri = ngx.re.sub(request_uri, [[^/assets/]], "/assets/DATA/disk/", "i") - resolved_path = find_recursive_path(fallback_uri) - end - - if resolved_path then - ngx.exec("/internal" .. resolved_path) - else - ngx.exit(ngx.HTTP_NOT_FOUND) - end - } - } - - location /internal/assets/ { - internal; - root /; - rewrite ^/internal(.*)$ $1 break; - } - } -}