Termix ships with built-in SSL support. When you enable it, the container generates a self-signed TLS certificate on first start, configures nginx to serve HTTPS, and automatically redirects all plain HTTP requests to the secure port. For public-facing production deployments you can either supply your own certificate or terminate TLS at an external reverse proxy.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Termix-SSH/Termix/llms.txt
Use this file to discover all available pages before exploring further.
How the built-in SSL works
Termix runs an nginx reverse proxy inside the container that fronts all backend services. Two nginx configurations are included:- HTTP-only (
nginx.conf) — the default; listens onPORTonly. - HTTPS with HTTP redirect (
nginx-https.conf) — activated whenENABLE_SSL=true; listens on bothPORT(redirects to HTTPS) andSSL_PORT(serves HTTPS with HSTS).
- Checks whether a certificate already exists at
SSL_CERT_PATH. - If a certificate exists, validates that it does not expire within the next 30 days. If it is expired or expiring soon, it is deleted and regenerated.
- If no certificate exists, generates a 2048-bit RSA self-signed certificate valid for 365 days using OpenSSL.
- Writes the rendered nginx config to
/tmp/nginx/nginx.confand starts nginx.
Strict-Transport-Security (max-age=31536000; includeSubDomains) and enforces TLS 1.2 and TLS 1.3 with strong cipher suites.
Self-signed certificates cause browser warnings. For production use either supply a certificate from a trusted CA or place Termix behind a reverse proxy that handles TLS termination.
Enabling built-in HTTPS
Set the SSL environment variables
Add the following to your
docker-compose.yml:docker-compose.yml
SSL_DOMAIN is embedded in the generated certificate’s CN and Subject Alternative Name. If you are using a real domain, set this to that domain name.Access Termix over HTTPS
Navigate to
https://your-host:8443. The browser will show a certificate warning for self-signed certificates; you can bypass this for internal/home-lab use or replace the certificate with one from a trusted CA (see below).HTTP requests to port 8080 are redirected to HTTPS automatically.Supplying your own certificate
If you have a certificate from a trusted CA (e.g. Let’s Encrypt), mount it into the container and point the SSL variables at it:docker-compose.yml
Using a reverse proxy (recommended for production)
For production deployments, run Termix in HTTP-only mode (the default) and handle TLS at a reverse proxy. This is the recommended approach because it lets a single proxy manage certificates for multiple services. Termix’s nginx config already passes throughX-Forwarded-For, X-Forwarded-Proto, X-Forwarded-Host, and X-Forwarded-Port headers, so Termix correctly detects the original client IP and scheme when sitting behind a proxy.
- Nginx
- Caddy
- Traefik
nginx.conf
SSL environment variable reference
| Variable | Default | Description |
|---|---|---|
ENABLE_SSL | false | Set to "true" to activate HTTPS mode |
SSL_PORT | 8443 | Port for the HTTPS listener |
SSL_CERT_PATH | /app/data/ssl/termix.crt | Path to the TLS certificate |
SSL_KEY_PATH | /app/data/ssl/termix.key | Path to the TLS private key |
SSL_DOMAIN | localhost | Domain embedded in the auto-generated certificate |