Back to library

Caddy Web Server

Fleet skill: Caddy Web Server — software inventory and operations reference

fleet
by skynetv1.0.0
software-caddyfleetfleetsoftware

0

Total Uses

0

Successes

0%

Success Rate

Compatible Agents

claude-codecodexgeminikimi

Instruction

--- name: software-caddy description: "Expert guidance for managing the Caddy Web Server (v2.10.2) as a fleet-wide reverse proxy, primarily on Dev Server (192.168.86.33). Use for HTTPS termination, domain routing, and proxying to Spark (192.168.86.48) services." metadata: author: skynet version: 1.0.0 --- # Caddy Web Server (v2.10.2) Caddy is the primary reverse proxy and HTTPS edge for James's fleet. It runs on **Dev Server (192.168.86.33)** as a `systemd` service, managing all external and internal traffic routing. ## Fleet Installation Status | Machine | Role | IP | Status | |---------|------|----|--------| | **Dev Server** | **Primary Edge Proxy** | 192.168.86.33 | **Active (systemd)** | | DGX Spark | Backend Services | 192.168.86.48 | Not Installed (Proxied) | | Mac Mini Vault | Key Management | 192.168.86.27 | Internal Only | | Dev Workstation | Development | 192.168.86.22 | Optional (Local Testing) | ## Key Locations - **Caddyfile:** `/etc/caddy/Caddyfile` - **Site Configs (Included):** `/etc/caddy/conf.d/*.caddy` (if directory used) - **Certificates/Data:** `/var/lib/caddy/.local/share/caddy` - **Admin API:** `http://localhost:2019` - **Binary:** `/usr/bin/caddy` ## Essential Commands (Run on Dev Server) ### Management ```bash # Apply configuration changes gracefully (Preferred) ssh server "sudo caddy reload --config /etc/caddy/Caddyfile" # System-level management ssh server "sudo systemctl status caddy" ssh server "sudo systemctl restart caddy" ssh server "sudo systemctl reload caddy" ``` ### Configuration & Validation ```bash # Validate Caddyfile syntax before reloading ssh server "caddy validate --config /etc/caddy/Caddyfile" # Format the Caddyfile (Standardize indentation) ssh server "sudo caddy fmt --overwrite /etc/caddy/Caddyfile" # View current JSON configuration (as Caddy sees it) ssh server "curl -s localhost:2019/config/ | jq" ``` ### Observability ```bash # Real-time logs for all sites ssh server "journalctl -u caddy -f -n 100" # Filter logs for errors only ssh server "journalctl -u caddy -g 'error' --no-pager" ``` ## Fleet-Specific Patterns ### Reverse Proxy to DGX Spark (192.168.86.48) Most web services run on Spark. Use this pattern in the Caddyfile: ```caddyfile # Example: LiteLLM Gateway litellm.skynet.home { reverse_proxy 192.168.86.48:8000 } # Example: n8n Workflows n8n.skynet.home { reverse_proxy 192.168.86.48:5678 } ``` ### Common Proxy Headers Caddy automatically handles `X-Forwarded-For` and `X-Forwarded-Proto`, but some apps (like Nextcloud or certain Python frameworks) need explicit trust. ```caddyfile # Standard transparent proxy block (transparent) { header_up Host {host} header_up X-Real-IP {remote_host} } app.skynet.home { import transparent reverse_proxy 192.168.86.48:3000 } ``` ## Common Workflows ### 1. Adding a New Project Subdomain 1. SSH into **Dev Server**. 2. Edit `/etc/caddy/Caddyfile`. 3. Add a new block pointing to the machine:port (e.g., `192.168.86.48:PORT`). 4. Run `caddy fmt --overwrite /etc/caddy/Caddyfile`. 5. Run `caddy reload --config /etc/caddy/Caddyfile`. ### 2. Handling Wildcard SSL (Local DNS) Since this is an internal fleet, Caddy uses the `acme_server` or local CA if configured. For external domains, it uses ZeroSSL/Let's Encrypt. - Verify DNS is pointed to `192.168.86.33` before adding the domain to Caddyfile. ### 3. Debugging Connection Refused If a site returns 502 Bad Gateway: 1. Verify the backend is running: `ssh spark "docker ps"` or `ssh spark "netstat -tulpn | grep PORT"`. 2. Check if the backend is reachable from Dev Server: `ssh server "curl -I 192.168.86.48:PORT"`. 3. Check Caddy logs for `dial tcp` errors. ## Troubleshooting ### Config Validation Fails - **Issue:** `caddy validate` shows syntax error. - **Fix:** Ensure all `{}` are matched and directives are correctly spelled. Check for missing trailing slashes if using `route` or `handle`. ### Permission Denied on Caddyfile - **Issue:** Cannot write to `/etc/caddy/Caddyfile`. - **Fix:** Always use `sudo` for editing and reloading. Caddy runs as the `caddy` user, but the service management requires root. ### Admin API Not Responding - **Issue:** `localhost:2019` times out. - **Fix:** Ensure `admin` is not disabled in the global options block of the Caddyfile. ```caddyfile { admin localhost:2019 } ``` ## Reference - Full Documentation: https://caddyserver.com/docs/ - Caddyfile Directives: https://caddyserver.com/docs/caddyfile/directives

Install

curl -s https://skills.skynet.ceo/api/skills/software-caddy/skill.md