Termix is a web-based server management platform with SSH terminal and remote desktop (RDP/VNC) capabilities. It lets you define named connections and open browser-based sessions to your hosts — no client software required on the accessing device.
Run it when you want a quick way to reach your homelab hosts from any browser (a phone, a borrowed laptop, a tablet) without setting up a full bastion or VPN client.
Browser → Traefik (TLS + lan-only) → termix :8080
↓
┌──────────┴──────────┐
SSH to hosts guacd :4822
↓
RDP/VNC to hosts
Two containers:
- termix — web frontend; joined to both
termixandtraefiknetworks - guacd — Guacamole proxy daemon that handles RDP/VNC/Telnet protocol translation; internal
termixnetwork only, not exposed to the host
Termix discovers guacd by container name via Docker DNS. No env var configuration is required — they just need to share the termix network.
- Traefik running with the
traefikexternal network created /mnt/SSD/Containers/termixdirectory created on the host
sudo mkdir -p /mnt/SSD/Containers/termixcp .env.example .envEdit .env:
| Variable | Description |
|---|---|
TZ |
Timezone (default: America/New_York) |
TERMIX_DOMAIN |
FQDN Traefik will route to Termix (e.g. termix.virtuallyboring.com) |
docker compose up -d
docker compose logs -f termix- Via Traefik:
https://<TERMIX_DOMAIN>(LAN only) - Direct:
http://<host-ip>:8090
On first visit, Termix will prompt you to create an admin account. Do this immediately — the UI is unauthenticated until an account exists.
Fill in a username and password. This becomes the primary admin user. Enable 2FA (TOTP) at this step or from account settings afterward — recommended since this is a terminal interface.
Navigate to Connections → Add New and fill in:
| Field | Notes |
|---|---|
| Name | Friendly label shown in the UI |
| Host | IP or hostname of the target machine |
| Port | SSH port (default: 22) |
| Username | SSH user on the target |
| Auth | Password or SSH private key (key is preferred) |
Navigate to Connections → Add New and set the protocol to RDP, then fill in:
| Field | Notes |
|---|---|
| Name | Friendly label |
| Host | IP or hostname of the Windows Server |
| Port | RDP port (default: 3389) |
| Username | Windows username (e.g. Administrator or DOMAIN\user) |
| Password | Windows password |
| Security | NLA for modern Windows; fall back to Any if NLA fails |
| Ignore cert | Enable if using a self-signed certificate |
RDP connections are proxied through guacd — if guacd is not running, the connection will fail silently. Verify with docker compose ps that guacd is up.
docker compose pull
docker compose up -d