Compare commits

..

39 Commits

Author SHA1 Message Date
Karmaa 4dc94c90b2 Merge pull request #57 from LukeGus/dev-1.01
Dev 1.01
2025-07-31 22:38:27 -05:00
LukeGus eb8b465c92 Merge remote-tracking branch 'origin/main' into dev-1.01
# Conflicts:
#	src/apps/SSH/Terminal/SSHTerminal.tsx
2025-07-31 22:30:51 -05:00
Karmaa 3559a6fd87 Update docker-image.yml 2025-07-31 19:13:02 -05:00
LukeGus b70fa4cd52 Fix terminal and tunnel timeout connection errors 2025-07-31 18:54:10 -05:00
Karmaa 43b833c4ae Update SSHTerminal.tsx 2025-07-31 16:19:18 -05:00
Karmaa 38560b8178 Update ssh.ts 2025-07-31 16:18:44 -05:00
Karmaa 4a33024b7f Update SSHTerminal.tsx 2025-07-31 15:24:42 -05:00
Karmaa 38f836b94f Update ssh.ts 2025-07-31 15:20:27 -05:00
Karmaa 4b53139c20 Update ssh.ts to fix 60 second disconnect 2025-07-31 14:55:40 -05:00
Karmaa e0a86b9e18 Update README.md 2025-07-29 01:09:08 -05:00
LukeGus b58b6e729c Update routes and homepage auth. 2025-07-28 22:47:52 -05:00
LukeGus 6eff103cae Migrate docs to new repo 2025-07-28 20:53:48 -05:00
LukeGus 137f8ef472 Update read me 2025-07-28 17:22:49 -05:00
LukeGus 0ca1392670 Update read me 2025-07-28 17:09:28 -05:00
LukeGus c2ed2729be Update read me, license, tools, and auth loading 2025-07-28 17:06:30 -05:00
LukeGus a92ed01129 Fix routing 2025-07-28 15:50:50 -05:00
LukeGus 1cab763bee Fix build error 2025-07-28 15:34:13 -05:00
LukeGus 30bcdd440e Clean up code 2025-07-28 14:56:43 -05:00
LukeGus bc4c2dc7e6 Finalized ssh config editor 2025-07-28 14:23:28 -05:00
LukeGus 962f0064fe Update backend connectivity for SSH 2025-07-27 20:36:54 -05:00
LukeGus eb3008d097 Update backend connectivity 2025-07-27 19:41:24 -05:00
LukeGus 64ac578d61 Fix build errors 2025-07-27 18:59:44 -05:00
LukeGus 50de22618a Fix build errors 2025-07-27 18:54:01 -05:00
LukeGus 493514d7fa Fix build errors 2025-07-27 18:48:26 -05:00
LukeGus 27495aa4ed Fix build errors 2025-07-27 18:41:41 -05:00
LukeGus babe105b2e Fix build errors 2025-07-27 18:12:55 -05:00
LukeGus ec2a1f4215 Fix build errors 2025-07-27 18:04:49 -05:00
LukeGus 6ed822c8b2 Updated building backend, improved oruitng, indivudal ssh tunnel control. 2025-07-27 18:01:44 -05:00
LukeGus 634e625eef Individual SSH Tunnel control 2025-07-27 16:04:32 -05:00
LukeGus 32945adcd9 Ssh tunnel backup before forwardIn rewrite 2025-07-27 14:21:15 -05:00
LukeGus 5e88f8496e Update ssh tunnel to new system 2025-07-26 23:01:45 -05:00
LukeGus abeba66432 Fixes 2025-07-26 21:33:39 -05:00
LukeGus 073e9a969b Update ssh sidebar to follow new scheme 2025-07-26 20:07:25 -05:00
LukeGus 2e62dee798 Started config editor, migrated to one ssh manager for adding hosts. 2025-07-26 15:42:15 -05:00
LukeGus 608111c37b Finalized ssh tunnels, updatetd database schemas, started on config editor. 2025-07-23 00:36:22 -05:00
LukeGus 547701378f Finalized ssh tunnels, updatetd database schemas, started on config editor. 2025-07-21 01:25:38 -05:00
LukeGus cfaa04e42c Added tools (run multi cmds), fixed UI scrolling, added SSH algo's and key types. 2025-07-19 02:27:20 -05:00
LukeGus 49a4d20740 Completed intial SSH section with user/ssh backend 2025-07-18 23:39:23 -05:00
LukeGus 00a827df09 Initial dev-1.0 commit for TS and Shadcn migration 2025-07-17 01:13:30 -05:00
182 changed files with 5325 additions and 12697 deletions
-1
View File
@@ -1 +0,0 @@
VERSION=1.3.1
-40
View File
@@ -1,40 +0,0 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
groups:
dev-patch-updates:
dependency-type: "development"
update-types:
- "patch"
dev-minor-updates:
dependency-type: "development"
update-types:
- "minor"
prod-patch-updates:
dependency-type: "production"
update-types:
- "patch"
prod-minor-updates:
dependency-type: "production"
update-types:
- "minor"
- package-ecosystem: "docker"
directory: "/docker"
schedule:
interval: "daily"
groups:
patch-updates:
update-types:
- "patch"
minor-updates:
update-types:
- "minor"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
+5 -5
View File
@@ -16,10 +16,10 @@ on:
jobs:
build:
runs-on: ubuntu-latest
runs-on: [self-hosted, linux]
steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v4
with:
fetch-depth: 1
@@ -37,7 +37,7 @@ jobs:
network=host
- name: Cache npm dependencies
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: |
~/.npm
@@ -48,7 +48,7 @@ jobs:
${{ runner.os }}-node-
- name: Cache Docker layers
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.ref_name }}-${{ hashFiles('docker/Dockerfile') }}
@@ -78,7 +78,7 @@ jobs:
echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV
- name: Build and Push Multi-Arch Docker Image
uses: docker/build-push-action@v6
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile
-1
View File
@@ -1 +0,0 @@
22
+10 -16
View File
@@ -13,39 +13,33 @@
[![SQLite Badge](https://img.shields.io/badge/-SQLite-003B57?style=flat-square&labelColor=black&logo=sqlite&logoColor=003B57)](#)
[![Radix UI Badge](https://img.shields.io/badge/-Radix%20UI-161618?style=flat-square&labelColor=black&logo=radixui&logoColor=161618)](#)
<br />
<p align="center">
<a href="https://github.com/LukeGus/Termix">
<img alt="Termix Banner" src=./repo-images/HeaderImage.png style="width: auto; height: auto;"> </a>
<img alt="Termix Banner" src=./public/icon.svg style="width: 250px; height: auto;"> </a>
</p>
If you would like, you can support the project here!\
[![GitHub Sponsor](https://img.shields.io/badge/Sponsor-LukeGus-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/LukeGus)
# Overview
<p align="center">
<a href="https://github.com/LukeGus/Termix">
<img alt="Termix Banner" src=./public/icon.svg style="width: 250px; height: 250px;"> </a>
</p>
Termix is an open-source, forever-free, self-hosted all-in-one server management platform. It provides a web-based solution for managing your servers and infrastructure through a single, intuitive interface. Termix offers SSH terminal access, SSH tunneling capabilities, and remote file editing, with many more tools to come.
Termix is an open-source, forever-free, self-hosted all-in-one server management platform. It provides a web-based solution for managing your servers and infrastructure through a single, intuitive interface. Termix offers SSH terminal access, SSH tunneling capabilities, and remote file configuration editing, with many more tools to come.
# Features
- **SSH Terminal Access** - Full-featured terminal with split-screen support (up to 4 panels) and tab system
- **SSH Tunnel Management** - Create and manage SSH tunnels with automatic reconnection and health monitoring
- **Remote File Editor** - Edit files directly on remote servers with syntax highlighting, file management features (uploading, removing, renaming, deleting files)
- **Remote Config Editor** - Edit files directly on remote servers with syntax highlighting and file management
- **SSH Host Manager** - Save, organize, and manage your SSH connections with tags and folders
- **Server Stats** - View CPU, memory, and HDD usage on any SSH server
- **User Authentication** - Secure user management with admin controls and OIDC support with more auth types planned
- **Modern UI** - Clean interface built with React, Tailwind CSS, and Shadcn
- **User Authentication** - Secure user management with admin controls
- **Modern UI** - Clean interface built with React, Tailwind CSS, and the amazing Shadcn
# Planned Features
- **Improved Admin Control** - Give more fine-grained control over user and admin permissions, share hosts, etc
- **More auth types** - Add 2FA, TOTP, etc
- **Improved Admin Control** - Ability to manage admins, and give more fine-grained control over their permissions, share hosts, reset passwords, delete accounts, etc
- **More auth types** - Add 2FA, OCID support, etc
- **Theming** - Modify themeing for all tools
- **Improved SFTP Support** - Ability to manage files easier with the config editor by uploading, creating, and removing files
- **Improved Terminal Support** - Add more terminal protocols such as VNC and RDP (anyone who has experience in integrating RDP into a web-application similar to Apache Guacamole, please contact me by creating an issue)
- **Mobile Support** - Support a mobile app or version of the Termix website to manage servers from your phone
# Installation
Visit the Termix [Docs](https://docs.termix.site/docs) for more information on how to install Termix. Otherwise, view a sample docker-compose file here:
@@ -84,7 +78,7 @@ If you need help with Termix, you can join the [Discord](https://discord.gg/jVQG
</p>
<p align="center">
<video src="https://github.com/user-attachments/assets/f9caa061-10dc-4173-ae7d-c6d42f05cf56" width="800" controls>
<video src="https://github.com/user-attachments/assets/0f95495d-c5db-48f5-b18b-9ab48bb10d31" width="800" controls>
Your browser does not support the video tag.
</video>
</p>
+6 -7
View File
@@ -1,5 +1,5 @@
# Stage 1: Install dependencies and build frontend
FROM node:24-alpine AS deps
FROM node:18-alpine AS deps
WORKDIR /app
RUN apk add --no-cache python3 make g++
@@ -26,7 +26,7 @@ COPY . .
RUN npm run build:backend
# Stage 4: Production dependencies
FROM node:24-alpine AS production-deps
FROM node:18-alpine AS production-deps
WORKDIR /app
COPY package*.json ./
@@ -35,7 +35,7 @@ RUN npm ci --only=production --ignore-scripts --force && \
npm cache clean --force
# Stage 5: Build native modules
FROM node:24-alpine AS native-builder
FROM node:18-alpine AS native-builder
WORKDIR /app
RUN apk add --no-cache python3 make g++
@@ -46,7 +46,7 @@ RUN npm ci --only=production bcryptjs better-sqlite3 --force && \
npm cache clean --force
# Stage 6: Final image
FROM node:24-alpine
FROM node:18-alpine
ENV DATA_DIR=/app/data \
PORT=8080 \
NODE_ENV=production
@@ -67,13 +67,12 @@ COPY --from=native-builder /app/node_modules/better-sqlite3 /app/node_modules/be
COPY --from=backend-builder /app/dist/backend ./dist/backend
COPY package.json ./
COPY .env ./.env
RUN chown -R node:node /app
VOLUME ["/app/data"]
EXPOSE ${PORT} 8081 8082 8083 8084 8085
EXPOSE ${PORT} 8081 8082 8083 8084
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
CMD ["/entrypoint.sh"]
CMD ["/entrypoint.sh"]
+4 -75
View File
@@ -27,34 +27,7 @@ http {
proxy_set_header X-Forwarded-Proto $scheme;
}
location /version/ {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /releases/ {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /alerts/ {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /ssh/ {
location /ssh/db/ {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Host $host;
@@ -71,14 +44,6 @@ http {
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_connect_timeout 75s;
proxy_set_header Connection "";
proxy_buffering off;
proxy_request_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
@@ -93,34 +58,7 @@ http {
proxy_set_header X-Forwarded-Proto $scheme;
}
location /ssh/file_manager/recent {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /ssh/file_manager/pinned {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /ssh/file_manager/shortcuts {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /ssh/file_manager/ssh/ {
location /ssh/config_editor/ {
proxy_pass http://127.0.0.1:8084;
proxy_http_version 1.1;
proxy_set_header Host $host;
@@ -129,17 +67,8 @@ http {
proxy_set_header X-Forwarded-Proto $scheme;
}
location /status/ {
proxy_pass http://127.0.0.1:8085;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /metrics/ {
proxy_pass http://127.0.0.1:8085;
location ~ ^/ssh/config_editor/(recent|pinned|shortcuts) {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
+133 -520
View File
File diff suppressed because it is too large Load Diff
+8 -15
View File
@@ -17,11 +17,10 @@
"@radix-ui/react-avatar": "^1.1.10",
"@radix-ui/react-checkbox": "^1.3.2",
"@radix-ui/react-collapsible": "^1.1.11",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-dialog": "^1.1.14",
"@radix-ui/react-dropdown-menu": "^2.1.15",
"@radix-ui/react-label": "^2.1.7",
"@radix-ui/react-popover": "^1.1.14",
"@radix-ui/react-progress": "^1.1.7",
"@radix-ui/react-scroll-area": "^1.2.9",
"@radix-ui/react-select": "^2.2.5",
"@radix-ui/react-separator": "^1.1.7",
@@ -29,7 +28,7 @@
"@radix-ui/react-slot": "^1.2.3",
"@radix-ui/react-switch": "^1.2.5",
"@radix-ui/react-tabs": "^1.1.12",
"@radix-ui/react-tooltip": "^1.2.8",
"@radix-ui/react-tooltip": "^1.2.7",
"@tailwindcss/vite": "^4.1.11",
"@types/bcryptjs": "^2.4.6",
"@types/multer": "^2.0.0",
@@ -40,9 +39,7 @@
"@xterm/addon-attach": "^0.11.0",
"@xterm/addon-clipboard": "^0.1.0",
"@xterm/addon-fit": "^0.10.0",
"@xterm/addon-search": "^0.15.0",
"@xterm/addon-unicode11": "^0.8.0",
"@xterm/addon-web-links": "^0.11.0",
"@xterm/xterm": "^5.5.0",
"axios": "^1.10.0",
"bcryptjs": "^3.0.2",
@@ -55,19 +52,15 @@
"dotenv": "^17.2.0",
"drizzle-orm": "^0.44.3",
"express": "^5.1.0",
"jose": "^5.2.3",
"jsonwebtoken": "^9.0.2",
"lucide-react": "^0.525.0",
"multer": "^2.0.2",
"nanoid": "^5.1.5",
"next-themes": "^0.4.6",
"node-fetch": "^3.3.2",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-hook-form": "^7.60.0",
"react-resizable-panels": "^3.0.3",
"react-xtermjs": "^1.0.10",
"sonner": "^2.0.7",
"ssh2": "^1.16.0",
"tailwind-merge": "^3.3.1",
"tailwindcss": "^4.1.11",
@@ -76,26 +69,26 @@
"zod": "^4.0.5"
},
"devDependencies": {
"@eslint/js": "^9.34.0",
"@eslint/js": "^9.30.1",
"@types/better-sqlite3": "^7.6.13",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.3",
"@types/jsonwebtoken": "^9.0.10",
"@types/node": "^24.3.0",
"@types/node": "^24.0.13",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@types/ssh2": "^1.15.5",
"@types/ws": "^8.18.1",
"@vitejs/plugin-react-swc": "^3.10.2",
"autoprefixer": "^10.4.21",
"eslint": "^9.34.0",
"eslint": "^9.30.1",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.3.0",
"ts-node": "^10.9.2",
"tw-animate-css": "^1.3.5",
"typescript": "~5.9.2",
"typescript-eslint": "^8.40.0",
"vite": "^7.1.3"
"typescript": "~5.8.3",
"typescript-eslint": "^8.35.1",
"vite": "^7.0.4"
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More