From b41ae20f769fec9d216738706273955a1d1dd65f Mon Sep 17 00:00:00 2001 From: Stavros Date: Sat, 23 Mar 2024 20:08:20 +0200 Subject: [PATCH] feat: add getashell app (#2914) * feat: add getashell app * refactor: update logo and version --- apps/getashell/config.json | 18 ++++++++++++ apps/getashell/docker-compose.yml | 38 +++++++++++++++++++++++++ apps/getashell/metadata/description.md | 8 ++++++ apps/getashell/metadata/logo.jpg | Bin 0 -> 17498 bytes 4 files changed, 64 insertions(+) create mode 100644 apps/getashell/config.json create mode 100644 apps/getashell/docker-compose.yml create mode 100644 apps/getashell/metadata/description.md create mode 100644 apps/getashell/metadata/logo.jpg diff --git a/apps/getashell/config.json b/apps/getashell/config.json new file mode 100644 index 00000000..943a2fe6 --- /dev/null +++ b/apps/getashell/config.json @@ -0,0 +1,18 @@ +{ + "$schema": "../schema.json", + "name": "Get A Shell", + "available": true, + "exposable": true, + "port": 8281, + "id": "getashell", + "tipi_version": 1, + "version": "v0.1.1", + "categories": ["utilities"], + "description": "Simple web ui to create ssh shells for testing.", + "short_desc": "SSH shells from a Web UI", + "author": "steveiliop56", + "source": "https://github.com/steveiliop56/getashell", + "form_fields": [], + "supported_architectures": ["arm64", "amd64"] + } + \ No newline at end of file diff --git a/apps/getashell/docker-compose.yml b/apps/getashell/docker-compose.yml new file mode 100644 index 00000000..6a0d20fc --- /dev/null +++ b/apps/getashell/docker-compose.yml @@ -0,0 +1,38 @@ +version: "3.9" +services: + getashell: + image: ghcr.io/steveiliop56/getashell:v0.1.1 + container_name: getashell + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/:/app/data + - /var/run/docker.sock:/var/run/docker.sock:ro + ports: + - ${APP_PORT}:3000 + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.getashell-web-redirect.redirectscheme.scheme: https + traefik.http.services.getashell.loadbalancer.server.port: 2368 + # Web + traefik.http.routers.getashell-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.getashell-insecure.entrypoints: web + traefik.http.routers.getashell-insecure.service: getashell + traefik.http.routers.getashell-insecure.middlewares: getashell-web-redirect + # Websecure + traefik.http.routers.getashell.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.getashell.entrypoints: websecure + traefik.http.routers.getashell.service: getashell + traefik.http.routers.getashell.tls.certresolver: myresolver + # Local domain + traefik.http.routers.getashell-local-insecure.rule: Host(`getashell.${LOCAL_DOMAIN}`) + traefik.http.routers.getashell-local-insecure.entrypoints: web + traefik.http.routers.getashell-local-insecure.service: getashell + traefik.http.routers.getashell-local-insecure.middlewares: getashell-web-redirect + # Local domain secure + traefik.http.routers.getashell-local.rule: Host(`getashell.${LOCAL_DOMAIN}`) + traefik.http.routers.getashell-local.entrypoints: websecure + traefik.http.routers.getashell-local.service: getashell + traefik.http.routers.getashell-local.tls: true \ No newline at end of file diff --git a/apps/getashell/metadata/description.md b/apps/getashell/metadata/description.md new file mode 100644 index 00000000..b371350f --- /dev/null +++ b/apps/getashell/metadata/description.md @@ -0,0 +1,8 @@ +## Get A Shell 🐚 + +Have you ever wanted to just spin up a quick server than you can ssh into to test something real quick? Well with get a shell +you can just spin up the ui select a distro and click _Get me a shell!_ and 💥 you have an ssh server with your specified distro. No need to spin up vms, run commands or anything harder than a click! + +![Preview](https://github.com/steveiliop56/getashell/blob/main/screenshots/app.png?raw=true) + +> Warning ⚠️: The app is in early stages of development, I am still quite new to both writing full stack apps and using technologies like drizzle and react. Any contributions are welcome. diff --git a/apps/getashell/metadata/logo.jpg b/apps/getashell/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78cfcd4e7fec444950b97796ca412d140fb751d2 GIT binary patch literal 17498 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