# vm-esh-nas

Docker VM on the `esh-pve-nas` hypervisor (10.0.50.55), at the ESH home
lab. Runs nas-adjacent containers that need local mounts of the shares
served by the Debian NAS at `10.0.50.50` — Filezilla, a Beszel agent, a
Dozzle agent, and Dockge.

## Network

- **LAN IP:** 10.0.50.154
- **FQDN:** `vm-esh-nas.esteban.net`
- **SSH:** `lkraven@vm-esh-nas` (key auth; `/etc/hosts` entry on the workstation)

## Hardware (from latest snapshot)

- **OS:** Debian 12 (bookworm), kernel 6.1.0-32-amd64
- **CPU:** 4 cores, Intel Xeon W-1250 @ 3.30 GHz (shared with the host)
- **RAM:** 3.8 GB total, ~3.1 GB available
- **Root disk:** 125 GB at 7% used
- **NFS mounts (all from `10.0.50.50`):**
  - `/mnt/share` — 96 TB, 4 TB used (general share)
  - `/mnt/music` — 92 TB, empty
  - `/mnt/books` — 92 TB, 96 GB used
  - `/mnt/media` — 111 TB, 20 TB used
  - All in `/etc/fstab`, reconnect on boot.

## What runs here

| Container | Image | Role |
|---|---|---|
| `beszel-agent` | henrygd/beszel-agent:latest | Metrics agent reporting to the hub on ana-docker |
| `dozzle-agent` | amir20/dozzle:latest | Log agent (exposed on port 7007) |
| `dockge-dockge-1` | louislam/dockge:latest | Local compose UI, port 5001 |
| `filezilla` | jlesage/filezilla | Web Filezilla on port 5800 (referenced in homepage bookmarks.yaml under UltraSeedbox) |

## Refresh state

```bash
scripts/refresh-server-info.sh vm-esh-nas
```

## Stack mirror layout

- `stacks-mirror/vm-esh-nas/beszel-agent-esh-nas/` — Beszel agent (canonical in `stacks/beszel/`)
- `filezilla` — canonical in `stacks/filezilla/`
- Other stacks (`dockge`, `dozzle-agent`) not yet canonicalized; run `sync-stacks.sh vm-esh-nas` to pull them into the mirror.

## Placement rule

NAS-adjacent Docker host. Good choice for anything that needs direct NFS
mounts (`/mnt/{share,music,books,media}`) without routing through another
VM. Low RAM ceiling (3.8 GB) — keep heavy workloads elsewhere.

## Known nits

- **Check restart policies after any reboot of this host.** `dockge`,
  `dozzle-agent`, and `beszel-agent` carry restart policies; `filezilla` did
  not, and stayed down silently for four days after the 2026-08-18 reboot
  (fixed 2026-08-22 — `restart: unless-stopped`). Anything else added here
  needs the policy set explicitly.
- `/opt/docker/compose` is world-writable (drwxrwxrwx). Harmless but
  worth tightening at some point.
- `/opt/docker/conf` doesn't exist yet; stacks that need bind-mounted
  config (Traefik, CrowdSec, etc.) would need to create it.
