From bc544a9b492b828a58c78dcf875a48d0ad8e2613 Mon Sep 17 00:00:00 2001 From: Jonathan Agmon Date: Sun, 22 Mar 2026 22:23:55 +0200 Subject: [PATCH] Add ttyd --- remote/ttyd/.env.example | 6 ++++++ remote/ttyd/Dockerfile | 20 ++++++++++++++++++ remote/ttyd/compose.yml | 45 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 remote/ttyd/.env.example create mode 100644 remote/ttyd/Dockerfile create mode 100644 remote/ttyd/compose.yml diff --git a/remote/ttyd/.env.example b/remote/ttyd/.env.example new file mode 100644 index 0000000..2fa6085 --- /dev/null +++ b/remote/ttyd/.env.example @@ -0,0 +1,6 @@ +DOMAIN_NAME= +SUBDOMAIN= +TAG= +GENERIC_TIMEZONE= +IP_ADDRESS= +TERM=xterm-256color diff --git a/remote/ttyd/Dockerfile b/remote/ttyd/Dockerfile new file mode 100644 index 0000000..9df4219 --- /dev/null +++ b/remote/ttyd/Dockerfile @@ -0,0 +1,20 @@ +FROM tsl0922/ttyd:alpine + +# Install ping and ssh client +RUN apk update && apk add --no-cache \ + iputils \ + openssh-client \ + curl \ + bind-tools \ + bash-completion \ + coreutils + +RUN rm -rf /var/cache/apk/* + +RUN addgroup -g 1000 ttyd && \ + adduser -D -u 1000 -G ttyd tty + +USER 1000:1000 + +# Set default command to start ttyd with bash +CMD ["ttyd", "/bin/bash"] \ No newline at end of file diff --git a/remote/ttyd/compose.yml b/remote/ttyd/compose.yml new file mode 100644 index 0000000..92204f6 --- /dev/null +++ b/remote/ttyd/compose.yml @@ -0,0 +1,45 @@ +services: + ttyd: + build: + context: . + network: host + image: ttyd:alpine + container_name: ttyd + hostname: ttyd + restart: unless-stopped + command: ["ttyd", "-W", "-o", "-u", "1000", "-g", "1000", "bash"] + stdin_open: true + tty: true + labels: + - traefik.enable=true + - traefik.http.routers.$SUBDOMAIN.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`) + - traefik.http.routers.$SUBDOMAIN.tls=true + - traefik.http.routers.$SUBDOMAIN.entrypoints=web,websecure + - traefik.http.routers.$SUBDOMAIN.tls.certresolver=cloudflare + - traefik.http.middlewares.$SUBDOMAIN.headers.SSLRedirect=true + - traefik.http.middlewares.$SUBDOMAIN.headers.STSSeconds=315360000 + - traefik.http.middlewares.$SUBDOMAIN.headers.browserXSSFilter=true + - traefik.http.middlewares.$SUBDOMAIN.headers.contentTypeNosniff=true + - traefik.http.middlewares.$SUBDOMAIN.headers.forceSTSHeader=true + - traefik.http.middlewares.$SUBDOMAIN.headers.SSLHost=${DOMAIN_NAME} + - traefik.http.middlewares.$SUBDOMAIN.headers.STSIncludeSubdomains=true + - traefik.http.middlewares.$SUBDOMAIN.headers.STSPreload=true + - traefik.http.middlewares.$SUBDOMAIN.headers.frameDeny=true + - traefik.http.routers.$SUBDOMAIN.middlewares=authentik-forwardauth@docker + # - traefik.http.routers.$SUBDOMAIN.middlewares=$SUBDOMAIN@docker + - traefik.http.services.$SUBDOMAIN.loadbalancer.server.port=7681 + - traefik.docker.network=jump + env_file: + - .env + # volumes: + networks: + jump: + lan: + ipv4_address: $IP_ADDRESS + user: "1000:1000" +# volumes: +networks: + jump: + external: true + lan: + external: true