Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Support] devzwf - Termix

Featured Replies

Overview: Support for Docker image Termix

Application Name: Termix
Application:  https://github.com/LukeGus/Termix

Documentation: https://github.com/LukeGus/Termix

 

Termix is an open-source forever free self-hosted SSH (other protocols planned, see [Planned Features](#planned-features)) server management panel inspired by [Nexterm](https://github.com/gnmyt/Nexterm). Its purpose is to provide an all-in-one docker-hosted web solution to manage your servers in one easy place. I'm using this project to help me learn [React](https://github.com/facebook/react), [Vite](https://github.com/vitejs/vite-plugin-react), and [Docker](https://www.docker.com) but also because I could never settle on a server management software that I enjoyed to use.

 

> [!WARNING]  

> This app is in the VERY early stages of development. Expect bugs, data loss, and unexplainable issues! For that reason, I recommend you securely tunnel your connection to Termix through a VPN.

 

Make sure to look at the complete documentation

 

Please post any questions/issues relating to this docker template you have in this thread.

  • Author

reserved

  • 8 months later...

Missing Path for Persistent Data

This app requires /app/data to be mapped to a directory outside of the docker vdisk. Otherwise app configuration is lost on rebuild. Please add this path to the template and map it to somewhere in /mnt/user/appdata/termix/*

  • Author
4 hours ago, eggplant said:

Missing Path for Persistent Data

This app requires /app/data to be mapped to a directory outside of the docker vdisk. Otherwise app configuration is lost on rebuild. Please add this path to the template and map it to somewhere in /mnt/user/appdata/termix/*

Thanks for the feedback
I will take care of it
thanks

  • Author
On 11/14/2025 at 4:08 PM, eggplant said:

Missing Path for Persistent Data

This app requires /app/data to be mapped to a directory outside of the docker vdisk. Otherwise app configuration is lost on rebuild. Please add this path to the template and map it to somewhere in /mnt/user/appdata/termix/*

Update Done.
Thanks for the report

  • 1 month later...

After termix 1.10 release container throws erros:

Executing Unraid Docker Hook for Tailscale

ERROR: No root privileges!

ERROR: Unraid Docker Hook script throw an error!

Starting container without Tailscale!

Starting container...

  • Author

I will have a look,
i did not upgrade yet
will revert back with update

Edit : thinking of it quick, this is weird , as this template do not set anything for tailscale ?
did you add anything ?

Edited by ZappyZap

@ZappyZap i just installed it for the first time and have having a similar issue. Can't load the app at all. I've not changed anything in the setup except port. All stock.


syscall: 'open',
path: '/app/data/.env'
}
[10:54:22 AM] [ERROR] [] Failed to initialize JWT secret [op:jwt_init_failed]
Error: EACCES: permission denied, open '/app/data/.env'
at async open (node:internal/fs/promises:641:25)
at async Object.writeFile (node:internal/fs/promises:1215:14)
at async SystemCrypto.updateEnvFile (file:///app/dist/backend/backend/utils/system-crypto.js:285:13)
at async SystemCrypto.generateAndGuideUser (file:///app/dist/backend/backend/utils/system-crypto.js:184:9)
at async SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:49:13)
at async file:///app/dist/backend/backend/starter.js:76:9 {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/app/data/.env'
}
[10:54:22 AM] [ERROR] [] Failed to initialize backend services [op:startup_failed]
Error: JWT secret initialization failed
at SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:55:19)
at async file:///app/dist/backend/backend/starter.js:76:9
[10:54:24 AM] [ERROR] [] Failed to update .env file with JWT_SECRET [op:env_file_update_failed]
Error: EACCES: permission denied, open '/app/data/.env'
at async open (node:internal/fs/promises:641:25)
at async Object.writeFile (node:internal/fs/promises:1215:14)
at async SystemCrypto.updateEnvFile (file:///app/dist/backend/backend/utils/system-crypto.js:285:13)
at async SystemCrypto.generateAndGuideUser (file:///app/dist/backend/backend/utils/system-crypto.js:184:9)
at async SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:49:13)
at async file:///app/dist/backend/backend/starter.js:76:9 {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/app/data/.env'
}
[10:54:24 AM] [ERROR] [] Failed to initialize JWT secret [op:jwt_init_failed]
Error: EACCES: permission denied, open '/app/data/.env'
at async open (node:internal/fs/promises:641:25)
at async Object.writeFile (node:internal/fs/promises:1215:14)
at async SystemCrypto.updateEnvFile (file:///app/dist/backend/backend/utils/system-crypto.js:285:13)
at async SystemCrypto.generateAndGuideUser (file:///app/dist/backend/backend/utils/system-crypto.js:184:9)
at async SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:49:13)
at async file:///app/dist/backend/backend/starter.js:76:9 {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/app/data/.env'
}
[10:54:24 AM] [ERROR] [] Failed to initialize backend services [op:startup_failed]
Error: JWT secret initialization failed
at SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:55:19)
at async file:///app/dist/backend/backend/starter.js:76:9
[10:54:28 AM] [ERROR] [] Failed to update .env file with JWT_SECRET [op:env_file_update_failed]
Error: EACCES: permission denied, open '/app/data/.env'
at async open (node:internal/fs/promises:641:25)
at async Object.writeFile (node:internal/fs/promises:1215:14)
at async SystemCrypto.updateEnvFile (file:///app/dist/backend/backend/utils/system-crypto.js:285:13)
at async SystemCrypto.generateAndGuideUser (file:///app/dist/backend/backend/utils/system-crypto.js:184:9)
at async SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:49:13)
at async file:///app/dist/backend/backend/starter.js:76:9 {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/app/data/.env'
}
[10:54:28 AM] [ERROR] [] Failed to initialize JWT secret [op:jwt_init_failed]
Error: EACCES: permission denied, open '/app/data/.env'
at async open (node:internal/fs/promises:641:25)
at async Object.writeFile (node:internal/fs/promises:1215:14)
at async SystemCrypto.updateEnvFile (file:///app/dist/backend/backend/utils/system-crypto.js:285:13)
at async SystemCrypto.generateAndGuideUser (file:///app/dist/backend/backend/utils/system-crypto.js:184:9)
at async SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:49:13)
at async file:///app/dist/backend/backend/starter.js:76:9 {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/app/data/.env'
}
[10:54:28 AM] [ERROR] [] Failed to initialize backend services [op:startup_failed]
Error: JWT secret initialization failed
at SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:55:19)
at async file:///app/dist/backend/backend/starter.js:76:9
Configuring web UI to run on port: 8080
SSL disabled - using HTTP-only configuration (default)
Starting nginx...
Starting backend services...
[10:54:24 AM] [INFO] [] Termix Backend starting - Version: 1.10.0 [op:startup]
Configuring web UI to run on port: 8080
SSL disabled - using HTTP-only configuration (default)
Starting nginx...
Starting backend services...
  • Author

thanks for the feedback, i will check and get back to you

20 minutes ago, PZ303 said:

@ZappyZap i just installed it for the first time and have having a similar issue. Can't load the app at all. I've not changed anything in the setup except port. All stock.


syscall: 'open',
path: '/app/data/.env'
}
[10:54:22 AM] [ERROR] [] Failed to initialize JWT secret [op:jwt_init_failed]
Error: EACCES: permission denied, open '/app/data/.env'
at async open (node:internal/fs/promises:641:25)
at async Object.writeFile (node:internal/fs/promises:1215:14)
at async SystemCrypto.updateEnvFile (file:///app/dist/backend/backend/utils/system-crypto.js:285:13)
at async SystemCrypto.generateAndGuideUser (file:///app/dist/backend/backend/utils/system-crypto.js:184:9)
at async SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:49:13)
at async file:///app/dist/backend/backend/starter.js:76:9 {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/app/data/.env'
}
[10:54:22 AM] [ERROR] [] Failed to initialize backend services [op:startup_failed]
Error: JWT secret initialization failed
at SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:55:19)
at async file:///app/dist/backend/backend/starter.js:76:9
[10:54:24 AM] [ERROR] [] Failed to update .env file with JWT_SECRET [op:env_file_update_failed]
Error: EACCES: permission denied, open '/app/data/.env'
at async open (node:internal/fs/promises:641:25)
at async Object.writeFile (node:internal/fs/promises:1215:14)
at async SystemCrypto.updateEnvFile (file:///app/dist/backend/backend/utils/system-crypto.js:285:13)
at async SystemCrypto.generateAndGuideUser (file:///app/dist/backend/backend/utils/system-crypto.js:184:9)
at async SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:49:13)
at async file:///app/dist/backend/backend/starter.js:76:9 {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/app/data/.env'
}
[10:54:24 AM] [ERROR] [] Failed to initialize JWT secret [op:jwt_init_failed]
Error: EACCES: permission denied, open '/app/data/.env'
at async open (node:internal/fs/promises:641:25)
at async Object.writeFile (node:internal/fs/promises:1215:14)
at async SystemCrypto.updateEnvFile (file:///app/dist/backend/backend/utils/system-crypto.js:285:13)
at async SystemCrypto.generateAndGuideUser (file:///app/dist/backend/backend/utils/system-crypto.js:184:9)
at async SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:49:13)
at async file:///app/dist/backend/backend/starter.js:76:9 {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/app/data/.env'
}
[10:54:24 AM] [ERROR] [] Failed to initialize backend services [op:startup_failed]
Error: JWT secret initialization failed
at SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:55:19)
at async file:///app/dist/backend/backend/starter.js:76:9
[10:54:28 AM] [ERROR] [] Failed to update .env file with JWT_SECRET [op:env_file_update_failed]
Error: EACCES: permission denied, open '/app/data/.env'
at async open (node:internal/fs/promises:641:25)
at async Object.writeFile (node:internal/fs/promises:1215:14)
at async SystemCrypto.updateEnvFile (file:///app/dist/backend/backend/utils/system-crypto.js:285:13)
at async SystemCrypto.generateAndGuideUser (file:///app/dist/backend/backend/utils/system-crypto.js:184:9)
at async SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:49:13)
at async file:///app/dist/backend/backend/starter.js:76:9 {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/app/data/.env'
}
[10:54:28 AM] [ERROR] [] Failed to initialize JWT secret [op:jwt_init_failed]
Error: EACCES: permission denied, open '/app/data/.env'
at async open (node:internal/fs/promises:641:25)
at async Object.writeFile (node:internal/fs/promises:1215:14)
at async SystemCrypto.updateEnvFile (file:///app/dist/backend/backend/utils/system-crypto.js:285:13)
at async SystemCrypto.generateAndGuideUser (file:///app/dist/backend/backend/utils/system-crypto.js:184:9)
at async SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:49:13)
at async file:///app/dist/backend/backend/starter.js:76:9 {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/app/data/.env'
}
[10:54:28 AM] [ERROR] [] Failed to initialize backend services [op:startup_failed]
Error: JWT secret initialization failed
at SystemCrypto.initializeJWTSecret (file:///app/dist/backend/backend/utils/system-crypto.js:55:19)
at async file:///app/dist/backend/backend/starter.js:76:9
Configuring web UI to run on port: 8080
SSL disabled - using HTTP-only configuration (default)
Starting nginx...
Starting backend services...
[10:54:24 AM] [INFO] [] Termix Backend starting - Version: 1.10.0 [op:startup]
Configuring web UI to run on port: 8080
SSL disabled - using HTTP-only configuration (default)
Starting nginx...
Starting backend services...

That's permission issue so just change your /app/data directory to 777 and it should be fine, that container doesn't have UID/GID variables, then you can try tailscale but I suspect whole container has to be rebuilt.

  • Author

Thanks @cpu
@PZ303 Cpu is correct, seems like a permission issue in your case

@cpu
i just upgrade from 1.9.0 to 1.10.0 no issue.


Configuring web UI to run on port: 8080
SSL disabled - using HTTP-only configuration (default)
Starting nginx...
Starting backend services...
[9:15:46 AM] [INFO] [📦] Termix Backend starting - Version: 1.10.0 [op:startup]
[9:15:46 AM] [SUCCESS] [🗄️] JWT secret auto-generated and saved to .env [op:jwt_auto_generated]
[9:15:46 AM] [SUCCESS] [🗄️] Database key auto-generated and saved to .env [op:db_key_auto_generated]
[9:15:46 AM] [SUCCESS] [🗄️] Internal auth token auto-generated and saved to .env [op:internal_auth_auto_generated]
[9:15:46 AM] [INFO] [🚀] SSL not enabled - skipping certificate generation [op:ssl_disabled_default]
[9:15:46 AM] [INFO] [🗄️] Initializing SQLite database [op:db_init]
[9:15:46 AM] [SUCCESS] [🗄️] Schema migration completed [op:schema_migration]
[9:15:48 AM] [INFO] [📡] Found 0 autostart hosts and 0 total hosts for endpointHost resolution


i will need to dig a bit further on this one ....

Edited by ZappyZap

So tailscale does work inside container and thus serve?

Tried to create second container and yes throws permission error at first - appdata/termix is root:root while appdata/termix/data is nobody:users - fixable with permisssion. But tailscale does not work

Edited by cpu

@cpu @ZappyZap Thanks! 777 my the folder inside appdata fixed it.

Ok looks like tailscale plugin error as other containers throw same error

  • Author

ok make sense , as i am not using tailscale , i will try installing it on my dev instance et retest
so do not look like an issue with this template.
Thanks

Yes so the outcome is from 1.10.0 container does not allow to inject tailscale so only option is either sidecar or tailscale service.

@ZappyZap

Does this app support SSH logins using a signed certificate? In addition to the usual SSH public and private keys, I need to present a signed public key to my target.

private key: id_ed25519

public key: id_ed25519.pub

signed certificate: id_ed25519-cert.pub

This uses ssh's "-o CertificateFile=id_ed25519-cert.pub" syntax.

  • Author
5 minutes ago, frakman1 said:

@ZappyZap

Does this app support SSH logins using a signed certificate? In addition to the usual SSH public and private keys, I need to present a signed public key to my target.

private key: id_ed25519

public key: id_ed25519.pub

signed certificate: id_ed25519-cert.pub

This uses ssh's "-o CertificateFile=id_ed25519-cert.pub" syntax.

Pretty good question, i dont use cert with this app , but directly iwth SSH
the best would be to ask on the github : https://github.com/LukeGus/Termix
let me know

  • 3 weeks later...

Any workaround for the permission issue? It seems to be related to unraid (I'm using compose instead of your app but the issue exists on both). An issue exists and they suggest to use the root user which I really wouldn't use 😰
https://github.com/Termix-SSH/Support/issues/425

Edited by Ikeasofa

I ran into the same issue. For now, I would suggest opening a terminal on Unraid and doing the following, assuming you are using the default path.

chown -R 1000:1000 /mnt/user/appdata/termix/data
chmod -R 755 /mnt/user/appdata/termix/data

Edited by d8sychain

  • 1 month later...

V2.0 showing a failed to load hosts error.

v2.0.0 also requires additional container to utilise RDP/VNC

services:

termix-dev:

image: ghcr.io/lukegus/termix:dev-2.0.0

container_name: termix-dev

restart: unless-stopped

ports:

- "8080:8080"

volumes:

- /home/YOUR_USER/apps/termix-dev:/app/data

environment:

PORT: "8080"

depends_on:

- guacd

networks:

- termix-net

guacd:

image: guacamole/guacd:latest

container_name: guacd

restart: unless-stopped

ports:

- "4822:4822"

networks:

- termix-net

networks:

termix-net:

driver: bridge

I have "desktop service not found' on a new install trying to RDP. Can use mstsc and remmina just fine. Cant see any obvious notes in the documentation.

EDIT - i just saw the post right above my comment (its been a long day). I dont really want to run another non hosted container to get RDP to work. I'll check in if you manage to get it all in one docker. It looks good otherwise, but if i have to run guacamole anyway, i'd just use that.

Edited by Oxxy

  • Author
9 hours ago, Oxxy said:

I have "desktop service not found' on a new install trying to RDP. Can use mstsc and remmina just fine. Cant see any obvious notes in the documentation.

EDIT - i just saw the post right above my comment (its been a long day). I dont really want to run another non hosted container to get RDP to work. I'll check in if you manage to get it all in one docker. It looks good otherwise, but if i have to run guacamole anyway, i'd just use that.

I will tend to agree with your last statement.
Unless me or somebody make a single container with all the piece , you need to run an other ocntainer.

9 hours ago, ZappyZap said:

I will tend to agree with your last statement.

What you have done so far looks good, responsive and clean. Thanks for your work.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.