diff --git a/CHANGELOG.md b/CHANGELOG.md
index a2e8e807..d793cf8c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,8 @@
- Added `deploy/unraid/Dockerfile.all-in-one`, embedding PostgreSQL 16/PostGIS, FastAPI, nginx and the built React frontend in one image.
- Added `deploy/unraid/all-in-one-start.sh` to start embedded PostGIS, apply Alembic migrations, start the backend and serve nginx.
- Added `deploy/unraid/nginx-all-in-one.conf` with localhost backend proxying inside the same container.
+- Added a PNG DockerMan icon and made the Unraid template name match the running `geointel` container.
+- Updated Tower deploy scripts to install `/boot/config/plugins/dockerMan/templates-user/my-geointel.xml` and `/boot/config/plugins/dockerMan/images/geointel-icon.png`.
- Updated Tower deploy scripts to stop the old multi-container stack without removing volumes and start the all-in-one stack.
- Updated the Unraid template so the Docker can be edited from Unraid with one web port, storage path, PostGIS data path and app icon.
- Hardened live migration and browser runtime smoke scripts with startup retries and an icon check.
diff --git a/README.md b/README.md
index 63d1e35a..c8622c05 100644
--- a/README.md
+++ b/README.md
@@ -76,6 +76,7 @@ Unraid template assets live in:
- `deploy/unraid/geointel.env.example`
- `deploy/unraid/geointel-unraid-template.xml`
- `deploy/unraid/geointel-icon.svg`
+- `deploy/unraid/geointel-icon.png`
- `docker-compose.unraid.yml`
Copy the Unraid env template to `.env` in the checkout and edit ports/paths there:
@@ -97,6 +98,8 @@ GEOINTEL_POSTGIS_DATA_PATH=/mnt/user/appdata/geointel/postgres-data
The backend and PostGIS ports are intentionally not exposed to the LAN in the all-in-one runtime. See `deploy/unraid/README.md` for full setup, port-change and cleanup notes.
+On Tower/Unraid, `scripts/deploy_tower.ps1` and `scripts/deploy_tower.sh` also install the editable DockerMan template as `/boot/config/plugins/dockerMan/templates-user/my-geointel.xml` and the PNG icon as `/boot/config/plugins/dockerMan/images/geointel-icon.png`.
+
## Sprint 2 quick start
- Update dependencies:
diff --git a/backend/tests/test_sprint31_unraid_template.py b/backend/tests/test_sprint31_unraid_template.py
index 472d0248..e85b2050 100644
--- a/backend/tests/test_sprint31_unraid_template.py
+++ b/backend/tests/test_sprint31_unraid_template.py
@@ -9,11 +9,11 @@ ROOT = Path(__file__).resolve().parents[2]
def test_unraid_template_documents_editable_runtime_settings() -> None:
template = (ROOT / "deploy" / "unraid" / "geointel-unraid-template.xml").read_text(encoding="utf-8")
- assert "GeoIntel Kempen" in template
+ assert "geointel" in template
assert "GeoIntel all-in-one runs the complete GeoIntel Kempen V1 stack in one Docker container" in template
assert "geointel-all-in-one:latest" in template
assert "http://[IP]:[PORT:80]/" in template
- assert "http://[IP]:[PORT:80]/geointel-icon.svg" in template
+ assert "http://192.168.10.150:1202/geointel-icon.png" in template
assert 'Target="80"' in template
assert 'Target="/app/storage"' in template
assert 'Target="/var/lib/postgresql/data"' in template
@@ -84,6 +84,7 @@ def test_unraid_all_in_one_runtime_starts_embedded_postgis_backend_and_nginx() -
assert 'exec nginx -g "daemon off;"' in start_script
assert "proxy_pass http://127.0.0.1:8000/api/" in nginx_config
assert "proxy_pass http://127.0.0.1:8000/health" in nginx_config
+ assert "location = /geointel-icon.png" in nginx_config
assert "frontend/node_modules" in dockerignore
assert "storage" in dockerignore
assert "postgres-data" in dockerignore
@@ -94,6 +95,8 @@ def test_tower_deploy_uses_single_container_unraid_compose() -> None:
bash = (ROOT / "scripts" / "deploy_tower.sh").read_text(encoding="utf-8")
for script in (powershell, bash):
+ assert "/boot/config/plugins/dockerMan/templates-user/my-geointel.xml" in script
+ assert "/boot/config/plugins/dockerMan/images/geointel-icon.png" in script
assert "docker compose down --remove-orphans || true" in script
assert "docker compose -f docker-compose.unraid.yml config" in script
assert "docker compose -f docker-compose.unraid.yml build geointel" in script
@@ -104,9 +107,13 @@ def test_tower_deploy_uses_single_container_unraid_compose() -> None:
def test_frontend_and_unraid_icon_assets_are_present() -> None:
deploy_icon = (ROOT / "deploy" / "unraid" / "geointel-icon.svg").read_text(encoding="utf-8")
frontend_icon = (ROOT / "frontend" / "public" / "geointel-icon.svg").read_text(encoding="utf-8")
+ deploy_png = ROOT / "deploy" / "unraid" / "geointel-icon.png"
+ frontend_png = ROOT / "frontend" / "public" / "geointel-icon.png"
index = (ROOT / "frontend" / "index.html").read_text(encoding="utf-8")
assert "