diff --git a/SKILL.md b/SKILL.md index d81a135..2033ed7 100644 --- a/SKILL.md +++ b/SKILL.md @@ -29,6 +29,7 @@ Installs [ttyd](https://github.com/tsl0922/ttyd) - a simple command-line tool fo | `TTYD_COMMAND` | Command to run | `/bin/bash` | | `TTYD_CREDENTIAL` | Basic auth (user:pass) | (none) | | `TTYD_OPTIONS` | Additional ttyd options | (none) | +| `TTYD_DOMAIN` | Domain for Caddy auto-config | (none) | ## Usage @@ -54,7 +55,20 @@ TTYD_CREDENTIAL="admin:secret" ./scripts/run.sh TTYD_COMMAND="htop" ./scripts/run.sh ``` -### With Caddy (HTTPS) +### Auto-configuration with Caddy + +If the `caddy` skill is present, ttyd will automatically register itself: + +```bash +# Set domain for auto-config +TTYD_DOMAIN="terminal.example.com" +``` + +This creates a snippet in `caddy/snippets.d/ttyd.caddy` that Caddy imports on startup. + +### Manual Caddy Config + +If not using auto-config: ```caddyfile terminal.example.com { diff --git a/scripts/autorun.sh b/scripts/autorun.sh index 0da8b0f..299541e 100644 --- a/scripts/autorun.sh +++ b/scripts/autorun.sh @@ -2,6 +2,9 @@ set -e TTYD_VERSION="${TTYD_VERSION:-1.7.7}" +SKILLS_DIR="${SKILLS_DIR:-/skills}" +TTYD_PORT="${TTYD_PORT:-7681}" +TTYD_DOMAIN="${TTYD_DOMAIN:-}" # Idempotent ttyd installation install_ttyd() { @@ -32,4 +35,46 @@ install_ttyd() { echo "ttyd installed: $(ttyd --version)" } +# Configure Caddy if present +configure_caddy() { + local caddy_dir="$SKILLS_DIR/caddy" + + if [ ! -d "$caddy_dir" ]; then + echo "Caddy not found - ttyd will run standalone on port $TTYD_PORT" + return 0 + fi + + echo "Caddy detected - configuring reverse proxy..." + + # Create snippets directory for modular config + local snippets_dir="$caddy_dir/snippets.d" + mkdir -p "$snippets_dir" + + # Generate ttyd snippet + local snippet="$snippets_dir/ttyd.caddy" + + if [ -n "$TTYD_DOMAIN" ]; then + # Domain-based routing + cat > "$snippet" << EOF +# Auto-generated by ttyd skill +$TTYD_DOMAIN { + reverse_proxy localhost:$TTYD_PORT +} +EOF + echo "Caddy config: $TTYD_DOMAIN -> localhost:$TTYD_PORT" + else + # Path-based routing (fallback) + cat > "$snippet" << EOF +# Auto-generated by ttyd skill +# Add to your site block: +# handle /terminal/* { +# uri strip_prefix /terminal +# reverse_proxy localhost:$TTYD_PORT +# } +EOF + echo "Caddy snippet created: $snippet (manual path-based config)" + fi +} + install_ttyd +configure_caddy