Self-hosted SSH & RDP access in the browser — terminals, files, vault, SSO.
348
Self-hosted SSH & RDP access in your browser. Linux terminals, Windows desktops, a file manager with sudo, shared team connections and a password vault — running on your own server, with SSO, MFA and a full audit log. Nothing to install on anyone's laptop.
docker run -d --name fusionterm -p 5577:5577 \
-e FORCE_SECURE_COOKIE=false \
-v fusionterm-data:/data \
--restart unless-stopped \
hammadsaqib/fusionterm:latest
Open http://<your-server>:5577, create the admin account and add your first
server.
Using Docker Desktop's Run button? Open Optional settings and set Host port
5577, a volumefusionterm-data→/data, and the environment variableFORCE_SECURE_COOKIE=false. Without the host port the app isn't reachable; without the variable, signing in over plainhttp://doesn't stick.
RDP needs the Apache Guacamole gateway (guacd) next to FusionTerm. Save this
as docker-compose.yml:
services:
fusionterm:
image: hammadsaqib/fusionterm:latest
ports:
- "5577:5577"
environment:
GUACD_HOST: guacd
# Plain-HTTP evaluation only — delete this line once you serve over HTTPS.
FORCE_SECURE_COOKIE: "false"
volumes:
- fusionterm-data:/data
depends_on:
- guacd
init: true
restart: unless-stopped
guacd:
image: guacamole/guacd:1.6.0
platform: linux/amd64
restart: unless-stopped
volumes:
fusionterm-data:
docker compose up -d
docker compose pull && docker compose up -d
# or, with docker run:
docker pull hammadsaqib/fusionterm:latest && docker rm -f fusionterm # then run the quick-start command again
Your data stays in the fusionterm-data volume; upgrades migrate it automatically,
and the database is copied to backups/ in the volume first (last 5 kept). Admins
see a notice in Settings when a new version is out.
FORCE_SECURE_COOKIE, so the sign-in cookie is only sent over
HTTPS. Pass WebSockets (/ws/terminal) through.secret.key, which
encrypts saved passwords — without it they can't be read:
docker run --rm -v fusionterm-data:/data -v "$PWD":/backup alpine \
tar czf /backup/fusionterm-data.tgz -C /data .
docker volume ls.)| Variable | Default | What it does |
|---|---|---|
PORT | 5577 | Port inside the container |
GUACD_HOST / GUACD_PORT | 127.0.0.1 / 4822 | Where the RDP gateway is |
FORCE_SECURE_COOKIE | secure | false only for plain-HTTP evaluation |
SESSION_SECRET | generated | Same value on every instance if you run several |
FUSIONTERM_AUDIT_RETENTION_DAYS | 365 | How long audit entries are kept (0 = forever) |
FUSIONTERM_UPDATE_CHECK | on | 0 = don't check Docker Hub for new versions (closed networks) |
Free for one person (up to 20 saved connections). Gold (2–10 users) and Platinum (11–50) add team members, shared connections, SSO and the phone app; Enterprise for larger teams. Paste the license key into Settings → License — it's verified offline, no license server.
latest — the newest release1.0, 1.0.0 — pin a version for predictable upgradesImages for linux/amd64 and linux/arm64. Runs as a non-root user.
Content type
Image
Digest
sha256:2673d2450…
Size
92.6 MB
Last updated
about 15 hours ago
docker pull hammadsaqib/fusionterm