Portainer Templates logo

Portainer Templates

Termix Termix

Container

ToolsNetworking

SSH terminal and server manager in the browser, with saved hosts, tunnels and a file editor. Source: https://github.com/Termix-SSH/Termix

Image details

Architecture: amd64, arm64
Image size: 188 MB
User: lukegus

Source details

Stars: 15.5k
Forks: 744
Language: TypeScript
License: Apache-2.0
Updated: 2 minutes ago
Website: termix.site/

Configuration

Type
Container
Platform
linux
Image
ghcr.io/lukegus/termix:latest
Ports
8080:8080/tcp
Volumes
/app/data
Restart
unless-stopped

Notes

Open http://<your-host>:8080 and create an account, which becomes the admin. Registration stays open after that, so switch it off in the admin settings unless you want other people signing up. Hosts, keys and the database live in the /app/data volume, and its secrets are generated there on first start. Behind a reverse proxy it needs websockets. It sends a small anonymous usage report once a day, which you can switch off in Admin Settings > Usage Statistics. Docs: docs.termix.site

Standalone Install

Select an install method, to see config/commands for deploying Termix

Installation method

Install on Portainer

Import all app templates into your Portainer instance, for easy 1-click deploys

  1. Ensure both Docker and Portainer are installed, and up-to-date
  2. Log into your Portainer web UI
  3. Under Settings → App Templates, paste the below URL
  4. Head to Home → App Templates, and the list of apps will show up
  5. Select Termix, fill in any config options, and hit Deploy

Template Import URL

https://raw.githubusercontent.com/Lissy93/portainer-templates/main/templates.json
Show Me demo

More install options in our documentation, or see Termix-SSH/Termix for app-specific guidance.


Termix Logo

Termix


Self-hosted, plugin-based server management


Discord Donate


Donations this month




Overview

Termix is a free, open source, self-hosted server management platform built on plugins. The core keeps your hosts, credentials, users, sharing and sessions. Everything else, like the SSH terminal, remote desktop, file manager, Docker and metrics, is a plugin you can turn on, off or remove.
It runs on web, desktop and mobile. Think of it as a free, self-hosted Termius.

Try the Demo

Try it at demo.termix.site. Any username and password works.

Core

What every install has, with or without plugins:
  • Hosts: Save hosts in nested folders with tags and parent hosts, bulk edit, import and export, and use Quick Connect for one-off connections
  • Credentials: Reuse saved passwords and keys across hosts, with host defaults you can set for the server, a user or a folder
  • Sharing and Roles: Share hosts, credentials and folders with users or roles at four levels: connect, view, edit and manage
  • Accounts: Local accounts, sessions you can see and revoke, trusted devices, API keys and an audit log
  • Security: Passwords, keys and other secrets are encrypted per user, and the database can be encrypted on disk
  • Desktop Sync: The desktop app runs on its own and can link to a Termix server to keep an offline copy of your account
  • Interface: Tabs and split screen, a command palette (double tap left shift), rebindable shortcuts, themes, branding and around 30 languages
  • Databases: SQLite by default, with PostgreSQL and MySQL supported too


Plugins

Plugins add everything else. The official ones ship with Termix, and admins can install, update or remove plugins from the Plugins tab. Each plugin has its own repo.
PluginWhat it does
ACME CertificatesGets the Termix HTTPS certificate from Let's Encrypt or any ACME provider and renews it for you.
AI AssistantAn AI assistant that reads your setup and proposes changes for you to approve.
AlertsOne inbox for every alert in Termix, with delivery to webhooks, ntfy, Discord and email.
AutomationsRun steps on your hosts on a schedule or when something happens.
DockerManage Docker and Podman containers on your hosts over SSH, with logs, stats and a console.
File ManagerBrowse, edit and move files over SFTP, including straight from one server to another.
FleetsGroup hosts into fleets and run commands, package actions and file transfers on all of them at once.
HashiCorp VaultConnect to hosts with short-lived SSH certificates signed by HashiCorp Vault.
HomepageA drag and drop widget page for your servers and services, plus service links for the dashboard.
Host MetricsLive CPU, memory, disk, network and GPU stats, plus tools to manage your hosts.
LDAPSign in with your LDAP or Active Directory username and password.
Network TopologyDraws your hosts and the links between them as a live, interactive graph.
OPKSSHConnect to hosts with short-lived OpenPubkey SSH certificates after signing in with your identity provider.
PasskeysSign in with a passkey or security key instead of a password.
ProxmoxImport Proxmox VE guests as hosts, keep them in sync and watch node stats.
Remote DesktopRDP, VNC and Telnet sessions in your browser, with clipboard, file transfer, sharing and recording.
Secret SourcesPull host passwords and keys from 1Password when you connect instead of storing them in Termix.
SerialOpen a serial console to a router, switch or other device plugged into your computer.
Session RecordingRecord terminal and remote desktop sessions and play them back or download them later.
Session SharingShare live sessions by link or with another user, and present sessions to a group in meeting rooms.
Single sign-onSign in with any OpenID Connect provider, GitHub or Google.
SnippetsSave the commands you run often and run them in a terminal or on many hosts in one click.
SSH TerminalSSH terminal sessions with tabs, split screen, history, macros and a local terminal in the desktop app.
Step CAConnect to hosts with short-lived SSH certificates from a smallstep step-ca server.
TailscaleAdd tailnet devices as hosts and connect with Tailscale SSH.
Termix IdentityPublish your SSH public keys under a public handle and run your own SSH certificate authority.
Tmux MonitorBrowse and control tmux sessions, windows and panes across your hosts.
TOTPTwo-factor sign in with a code from an authenticator app, with backup codes.
TunnelsSSH port forwarding that reconnects on its own, plus client tunnels from the desktop app.
Usage StatisticsSends a small anonymous daily report so we can see how Termix is used.
Wake-on-LANWake sleeping machines by sending a Wake-on-LAN packet to their MAC address.
WarpgateConnect to hosts through a Warpgate SSH bastion.
Web EndpointOpen a host's web UI inside Termix, directly or over an SSH tunnel.
WorkspacesSave your open tabs and split layouts and reopen them in one click.

Want to build your own? Start from the plugin template. Plugins you can install are listed in the registry. Turn on the community registry in Plugins, Registries to install plugins made by other people, or add your own registry. See submitting a plugin and hosting your own registry.

Platform Support

Platform Distribution
Web Any modern browser (Chrome, Safari, Firefox) | PWA support
Windows x64/ia32 Portable | EXE and MSI Installer | Chocolatey
Linux x64/arm64/armv7l Portable | AUR | AppImage | Deb | Flatpak
macOS Universal/x64/arm64, v12.0+ Apple App Store | DMG | Homebrew
iOS/iPadOS v15.1+ Apple App Store | IPA
Android v7.0+ Google Play Store | APK


Installation

See the docs for install steps on every platform.
Sample Docker Compose file (you can leave out guacd and the network if you don't plan to use the Remote Desktop plugin):
services:
  termix:
    image: ghcr.io/termix-ssh/termix:latest
    container_name: termix
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - termix-data:/app/data
    environment:
      PORT: "8080"
      GUACD_HOST: "guacd"
      GUACD_TUNNEL_HOST: "termix"
      GUACD_RECORDING_PATH: "/termix-data/session_recordings/guacamole"
      GUACD_DRIVE_PATH: "/termix-data/rdp-drive"
    depends_on:
      - guacd
    networks:
      - termix-net

  guacd:
    image: guacamole/guacd:1.6.0
    container_name: guacd
    restart: unless-stopped
    volumes:
      - termix-data:/termix-data
    networks:
      - termix-net

volumes:
  termix-data:
    driver: local

networks:
  termix-net:
    driver: bridge

Cloud Hosting

If Termix runs on the network it manages, an outage takes it down right when you need it. A VPS keeps it reachable, gives you a static IP and works from anywhere without a VPN or port forward.
GINERNET sponsors Termix and the docs have a setup guide for their VPS.

Donate

Termix has no paid plans. Donations cover servers, domains and development time.
Donate

Sponsors

For a paid sponsor spot, email [email protected].




Blacksmith     Cloudflare     Akamai     AWS     Rack Genius     Ginernet     Hetzner



Support

Bugs and ideas for Termix itself (login, hosts, credentials, sharing, sync, the app and desktop app) go in this repo: report a bug or request a feature.
Every plugin has its own repo, so a problem with the terminal, file manager, Docker, remote desktop or any other plugin goes in that plugin's repo (see the table above, or use Report an issue on the plugin's page in the app, which fills in your versions for you). Not sure where it goes? Open it here and it will be moved.
You need a GitHub account. Add as much detail as you can, in English if possible.
For discussions and questions, join the Discord server. Update videos are on YouTube.

License

Apache License 2.0. See LICENSE.

Serve Termix on your own domain behind Caddy, Nginx or Traefik. Fill in your domain and copy the result. It's a starting point, some apps need their own base URL or extra headers set too.

Proxying termix.example.com to http://termix:8080

Add this to your Caddyfile

termix.example.com {
	reverse_proxy http://termix:8080
}

Check the logs first

Nine times out of ten the logs tell you exactly what went wrong.

  • In Portainer, go to Containers, click the container, then Logs. Or run docker logs termix
  • Exit codes help too: 137 means killed, usually out of memory. 126 or 127 means the command inside the image is broken.

Port already in use

If deployment fails with "Bind for 0.0.0.0:8080 failed: port is already allocated", something else on your server is using that port.

  • Find what's using it: sudo ss -tlnp | grep :8080
  • Stop the other service, or pick a different host port. In 8080:8080 only the left number is yours to change, the right one belongs to the app.

Running but the page won't load

The container is up but nothing appears in your browser.

  • Use your server's real IP: http://your-server-ip:8080. The 0.0.0.0 link Portainer shows isn't a real address.
  • Give it a minute after first deploy, termix can take a while to initialise.
  • Make sure your firewall allows the port, e.g. sudo ufw allow 8080

Image won't pull

Test the pull directly on the host: docker pull ghcr.io/lukegus/termix:latest

  • "manifest unknown" means the tag no longer exists. This template uses latest, so try pinning a specific version instead.
  • "toomanyrequests" is the Docker Hub rate limit. Log in with docker login to raise it.
  • "no space left on device" means a full disk. Reclaim space with docker system prune

"exec format error"

This means the image was built for a different CPU architecture than your server.

  • This image supports: amd64, arm64
  • Check yours with uname -m: x86_64 is amd64, aarch64 is arm64. Raspberry Pi and other ARM boards are the usual culprits.

Container keeps restarting

The unless-stopped restart policy relaunches the app after every crash, so the real error can scroll past.

  • Check the logs right after a restart, the last few lines before it died are the useful ones.
  • Get the exit code with docker inspect termix --format '{{.State.ExitCode}}'
  • Still stuck? Redeploy once with the restart policy set to no so the failure stays visible.

Raise an issue

Found something which isn't working as it should? Here's how to report it.

A single container

Termix runs as one container, the simplest kind of app here. Just the one image to pull and nothing else wired up alongside it.

The app image

An image is the app packed up ready to go, everything Termix needs bundled into one download. This template pulls ghcr.io/lukegus/termix:latest, which Docker fetches once (about 188 MB) and then starts your own copy from.

Where the image comes from

Docker pulls its images from registries, public libraries of ready-built apps. Termix's comes from the GitHub Container Registry, published by lukegus.

Version tags

The bit after the colon in the image name is the version tag. Here it's latest, which always points at the newest build, so a redeploy can bump you to a newer release without you asking. Pin a specific tag if you would rather stay on one version.

Which machines it runs on

Every image is built for particular CPU types. This one ships for amd64, arm64, so it runs on both regular x86 servers and ARM boards like a Raspberry Pi.

Ports

A port is the door the app answers on. A mapping like 8080:8080 means it's reachable on port 8080 of your server, where the left number is yours to change and the right one belongs to the app. Once it's running, open http://your-server-ip:8080 in a browser. It opens:

  • 8080:8080, likely the web interface

Volumes

A volume is where Termix keeps its files so they survive an update or a restart. Without one, anything it saves would sit inside the container and vanish the moment it's recreated. This template mounts:

  • /app/data as a volume Docker manages for you

Restart policy

The restart policy here is unless-stopped, so Docker restarts Termix after a crash or reboot, but leaves it off when you stop it on purpose. You can change this on the deploy screen. The choices are no (never restart), on-failure (only after a crash), unless-stopped (restart unless you stop it), and always (bring it back no matter what).

Networking

Nothing custom is set, so Termix sits on Docker's default bridge network: its own private space that reaches the outside world only through the ports it publishes.

Container name

Once it's deployed, Portainer names the container termix. That's what you'll spot in the containers list and use in commands like docker logs termix.

Platform

The platform is linux, the kind of system the container is built to run on. Docker and Portainer handle this on a normal Linux server.

Open source license

Termix is open source, released under the Apache-2.0 license. In plain terms the code is out in the open, so you're free to run it and change it to fit what you need.

Portainer app templates

Zooming out, this whole page comes from a Portainer app template: a short recipe telling Portainer how to set Termix up. Add the template list to Portainer once, then deploying Termix is a click rather than a wall of config.