diff --git a/README.md b/README.md index 48af05c..31221b0 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,6 @@ The suite is organized into three independent but complementary scripts, each ma - Web UI for managing all aspects of the router (VLANs, reservations, blocklists, VPN, DDNS, firewall, and more) without editing JSON by hand - Runs as a Docker container alongside the existing scripts - Changes made in the dashboard are queued and applied to the live system automatically via a 1-minute systemd timer -- Set up via `install.py`, which configures SMTP, generates a secret key, and starts the container --- @@ -82,6 +81,7 @@ These packages are required. `install.py` checks that they are installed and wil | `avahi-daemon` | mDNS reflector for cross-VLAN service discovery | `core.py` | | `wireguard-tools` | WireGuard VPN (`wg`, `wg-quick`) | `core.py` (when WireGuard VLANs are configured) | | `docker` | Runs the Routlin Dashboard container | `install.py` (dashboard only) | +| `caddy` | Reverse proxy for external HTTPS access to the dashboard | `install.py` (external access only) | --- @@ -122,6 +122,7 @@ All configuration lives in two JSON files. Edit these to match your network befo | `.dashboard-done` | UUIDs of already-processed queue entries; prevents duplicate execution. | | `.dashboard-last-run` | Epoch timestamp of the last timer execution. | | `.dashboard-lock` | PID lock file preventing concurrent timer runs. | +| `.dns-metrics` | Cumulative lifetime DNS metrics across all VLAN instances. Created and updated each time `--view-metrics` is run. | | `.ddns-last-ip-*` | Cached public IP per DDNS provider. Managed by `ddns.py`. | | `.ddns-last-service` | Tracks IP-check service rotation. Managed by `ddns.py`. | diff --git a/routlin/install.py b/routlin/install.py index 1b98ed5..a53f58b 100644 --- a/routlin/install.py +++ b/routlin/install.py @@ -287,6 +287,9 @@ def setup_docker_compose(): COMPOSE_FILE.write_text(content) print(f"\n Written: {COMPOSE_FILE}") + print("\n Stopping existing container...") + subprocess.run(["docker", "compose", "down"], cwd=COMPOSE_FILE.parent, check=False) + print("\n Starting dashboard container...") compose_dir = COMPOSE_FILE.parent result = subprocess.run(