diff --git a/core/archipelago/src/api/rpc/package/install.rs b/core/archipelago/src/api/rpc/package/install.rs index 39cb4cb9..0f871440 100644 --- a/core/archipelago/src/api/rpc/package/install.rs +++ b/core/archipelago/src/api/rpc/package/install.rs @@ -615,31 +615,54 @@ printtoconsole=1\n", }); } - if matches!(package_id, "bitcoin" | "bitcoin-core" | "bitcoin-knots") { + // Build and start companion UI containers for headless services + let ui_builds: Vec<(&str, &str, &str, &str)> = match package_id { + "bitcoin" | "bitcoin-core" | "bitcoin-knots" => { + vec![("bitcoin-ui", "/opt/archipelago/docker/bitcoin-ui", "localhost/bitcoin-ui", "8334:80")] + } + "lnd" => { + vec![("archy-lnd-ui", "/opt/archipelago/docker/lnd-ui", "localhost/lnd-ui", "8081:80")] + } + "electrumx" | "electrs" | "mempool-electrs" => { + vec![("archy-electrs-ui", "/opt/archipelago/docker/electrs-ui", "localhost/electrs-ui", "50002:80")] + } + _ => vec![], + }; + + for (name, ui_dir, image, port) in ui_builds { + let name = name.to_string(); + let ui_dir = ui_dir.to_string(); + let image = image.to_string(); + let port = port.to_string(); tokio::spawn(async move { - let ui_dir = "/opt/archipelago/docker/bitcoin-ui"; + if !std::path::Path::new(&ui_dir).exists() { + info!("UI source not found at {}, skipping", ui_dir); + return; + } + info!("Building UI container {} from {}", name, ui_dir); let _ = tokio::process::Command::new("podman") - .args(["build", "-t", "localhost/bitcoin-ui", ui_dir]) + .args(["build", "-t", &image, &ui_dir]) .output() .await; let _ = tokio::process::Command::new("podman") - .args(["rm", "-f", "bitcoin-ui"]) + .args(["rm", "-f", &name]) .output() .await; let _ = tokio::process::Command::new("podman") .args([ - "run", - "-d", - "--name", - "bitcoin-ui", + "run", "-d", + "--name", &name, "--restart=unless-stopped", - "-p", - "8334:80", - "localhost/bitcoin-ui:latest", + "--network=archy-net", + "--cap-drop=ALL", + "--cap-add=NET_BIND_SERVICE", + "--memory=64m", + "-p", &port, + &format!("{}:latest", image), ]) .output() .await; - info!("Bitcoin UI container started on port 8334"); + info!("{} UI container started on port {}", name, port); }); } } diff --git a/docker/bitcoin-ui/Dockerfile b/docker/bitcoin-ui/Dockerfile index 9f1ea242..86183d48 100644 --- a/docker/bitcoin-ui/Dockerfile +++ b/docker/bitcoin-ui/Dockerfile @@ -1,4 +1,4 @@ -FROM 80.71.235.15:3000/archipelago/nginx:1.29.6-alpine +FROM 80.71.235.15:3000/archipelago/nginx:1.27.4-alpine COPY index.html /usr/share/nginx/html/ COPY 50x.html /usr/share/nginx/html/ COPY assets/ /usr/share/nginx/html/assets/ diff --git a/docker/electrs-ui/Dockerfile b/docker/electrs-ui/Dockerfile index 5d9bd3c5..7ef91e49 100644 --- a/docker/electrs-ui/Dockerfile +++ b/docker/electrs-ui/Dockerfile @@ -1,4 +1,4 @@ -FROM 80.71.235.15:3000/archipelago/nginx:1.29.6-alpine +FROM 80.71.235.15:3000/archipelago/nginx:1.27.4-alpine COPY index.html /usr/share/nginx/html/ COPY 50x.html /usr/share/nginx/html/ COPY assets/ /usr/share/nginx/html/assets/ diff --git a/docker/lnd-ui/Dockerfile b/docker/lnd-ui/Dockerfile index 2de45a66..0afade2b 100644 --- a/docker/lnd-ui/Dockerfile +++ b/docker/lnd-ui/Dockerfile @@ -1,4 +1,4 @@ -FROM 80.71.235.15:3000/archipelago/nginx:1.29.6-alpine +FROM 80.71.235.15:3000/archipelago/nginx:1.27.4-alpine # Copy the HTML file COPY index.html /usr/share/nginx/html/ diff --git a/image-recipe/build-auto-installer-iso.sh b/image-recipe/build-auto-installer-iso.sh index 1f28144d..da858bd8 100755 --- a/image-recipe/build-auto-installer-iso.sh +++ b/image-recipe/build-auto-installer-iso.sh @@ -1370,9 +1370,9 @@ if [ -f "$SCRIPT_DIR/../scripts/image-versions.sh" ]; then echo " ✅ Bundled image-versions.sh" fi -# Bundle docker UI source files for building custom UIs on first boot (fallback if images not captured) -# Skip for unbundled builds -if [ "$UNBUNDLED" != "1" ]; then +# Bundle docker UI source files for building custom UIs on first boot +# Always bundle — these are tiny HTML/CSS files, not container images +if true; then DOCKER_UI_DIR="$SCRIPT_DIR/../docker" if [ -d "$DOCKER_UI_DIR" ]; then echo " Bundling docker UI source files..."