Replace nginx with Caddy for TLS termination and reverse proxying.
- Replace nginx with Caddy as the web server for both Docker and native
(RPi/Debian) deployments. Caddy handles HTTPS termination, reverse
proxying to all services (API, React app, Controller, Kiwix, Help, Map),
and serves the media/download file browsers.
- Generate a Root CA and signed leaf certificates for HTTPS. The Root CA
uses Name Constraints to restrict signing to local addresses only
(.local, localhost, and RFC 1918 private IP ranges), mitigating MITM
risk if the CA key is compromised.
- Add an HTTP landing page that guides users through one-time CA
certificate installation on iOS, Android, macOS, Windows, Linux, and
Firefox, with auto-redirect when the cert is already trusted.
- Add trailing-slash redirects for /controller, /docs, /media, and
/download so bare paths don't fall through to the React catch-all.
- Add a Root CA download link on the Settings page under Configs.
- Update help.sh diagnostics for IPv6 listener detection and HTTP/2
status codes.
- Remove all nginx config files and the https_proxy Docker container.
- Bump wrolpi-help submodule with certificate documentation.
2026-03-07 12:08:27 -07:00
|
|
|
# Caddy config for WROLPi services (Docker).
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
# No ACME - WROLPi is designed for offline use.
|
|
|
|
|
auto_https disable_redirects
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
:443 {
|
|
|
|
|
tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
|
|
|
|
|
|
2026-03-07 19:17:38 -07:00
|
|
|
header Access-Control-Allow-Origin "*"
|
|
|
|
|
header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
|
|
|
|
|
header Access-Control-Allow-Headers "Content-Type, Accept"
|
|
|
|
|
|
2026-04-05 13:14:32 -06:00
|
|
|
handle /ca.crt {
|
|
|
|
|
root * /opt/media/config/ssl
|
|
|
|
|
header Content-Type "application/x-x509-ca-cert"
|
|
|
|
|
header Content-Disposition "attachment; filename=\"wrolpi-ca.crt\""
|
|
|
|
|
file_server
|
|
|
|
|
}
|
|
|
|
|
|
Replace nginx with Caddy for TLS termination and reverse proxying.
- Replace nginx with Caddy as the web server for both Docker and native
(RPi/Debian) deployments. Caddy handles HTTPS termination, reverse
proxying to all services (API, React app, Controller, Kiwix, Help, Map),
and serves the media/download file browsers.
- Generate a Root CA and signed leaf certificates for HTTPS. The Root CA
uses Name Constraints to restrict signing to local addresses only
(.local, localhost, and RFC 1918 private IP ranges), mitigating MITM
risk if the CA key is compromised.
- Add an HTTP landing page that guides users through one-time CA
certificate installation on iOS, Android, macOS, Windows, Linux, and
Firefox, with auto-redirect when the cert is already trusted.
- Add trailing-slash redirects for /controller, /docs, /media, and
/download so bare paths don't fall through to the React catch-all.
- Add a Root CA download link on the Settings page under Configs.
- Update help.sh diagnostics for IPv6 listener detection and HTTP/2
status codes.
- Remove all nginx config files and the https_proxy Docker container.
- Bump wrolpi-help submodule with certificate documentation.
2026-03-07 12:08:27 -07:00
|
|
|
handle /favicon.ico {
|
|
|
|
|
root * /etc/caddy
|
|
|
|
|
rewrite * /favicon.ico
|
|
|
|
|
file_server
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
handle /apple-touch-icon.png {
|
|
|
|
|
root * /etc/caddy
|
|
|
|
|
rewrite * /icon.png
|
|
|
|
|
file_server
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# WebSocket for React dev server.
|
|
|
|
|
handle /ws {
|
|
|
|
|
reverse_proxy app:3000
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Controller - system management API and UI.
|
|
|
|
|
handle_path /controller/* {
|
2026-04-07 20:01:49 -06:00
|
|
|
reverse_proxy controller:80
|
Replace nginx with Caddy for TLS termination and reverse proxying.
- Replace nginx with Caddy as the web server for both Docker and native
(RPi/Debian) deployments. Caddy handles HTTPS termination, reverse
proxying to all services (API, React app, Controller, Kiwix, Help, Map),
and serves the media/download file browsers.
- Generate a Root CA and signed leaf certificates for HTTPS. The Root CA
uses Name Constraints to restrict signing to local addresses only
(.local, localhost, and RFC 1918 private IP ranges), mitigating MITM
risk if the CA key is compromised.
- Add an HTTP landing page that guides users through one-time CA
certificate installation on iOS, Android, macOS, Windows, Linux, and
Firefox, with auto-redirect when the cert is already trusted.
- Add trailing-slash redirects for /controller, /docs, /media, and
/download so bare paths don't fall through to the React catch-all.
- Add a Root CA download link on the Settings page under Configs.
- Update help.sh diagnostics for IPv6 listener detection and HTTP/2
status codes.
- Remove all nginx config files and the https_proxy Docker container.
- Bump wrolpi-help submodule with certificate documentation.
2026-03-07 12:08:27 -07:00
|
|
|
}
|
|
|
|
|
handle /controller {
|
|
|
|
|
redir * /controller/ 301
|
|
|
|
|
}
|
|
|
|
|
|
ai: the /api/chat agent loop — SSE streaming, modes, tool execution
Tool definitions are generated in-process from the /api/ai blueprint's
own OpenAPI operations (operationId = tool name, description = tool
description, dataclass bodies + declared parameters = one flat JSON
schema) — the spec IS the catalog, nothing to drift. Manage endpoints
never become tools. A mode is a server-enforced system prompt + tool
allowlist (Help / Research / System per ai.md); the executor can only
reach allowlisted /api/ai endpoints, path parameters are encoded and
traversal-rejected so a crafted argument cannot escape an endpoint.
POST /api/chat streams SSE (status/token/tool_call/tool_result/done/
error), starts llama-server on demand, validates tool args server-side
with instructive errors the model can retry on, caps tool results with
a paging hint, and bounds the loop by ai.yaml max_tool_calls plus a
hard timeout. Caddy passes the stream unbuffered (flush_interval -1)
in both deployments.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-25 21:47:50 -06:00
|
|
|
# AI chat streams Server-Sent Events; never buffer them.
|
|
|
|
|
handle /api/chat* {
|
|
|
|
|
reverse_proxy api:8081 {
|
|
|
|
|
flush_interval -1
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
Replace nginx with Caddy for TLS termination and reverse proxying.
- Replace nginx with Caddy as the web server for both Docker and native
(RPi/Debian) deployments. Caddy handles HTTPS termination, reverse
proxying to all services (API, React app, Controller, Kiwix, Help, Map),
and serves the media/download file browsers.
- Generate a Root CA and signed leaf certificates for HTTPS. The Root CA
uses Name Constraints to restrict signing to local addresses only
(.local, localhost, and RFC 1918 private IP ranges), mitigating MITM
risk if the CA key is compromised.
- Add an HTTP landing page that guides users through one-time CA
certificate installation on iOS, Android, macOS, Windows, Linux, and
Firefox, with auto-redirect when the cert is already trusted.
- Add trailing-slash redirects for /controller, /docs, /media, and
/download so bare paths don't fall through to the React catch-all.
- Add a Root CA download link on the Settings page under Configs.
- Update help.sh diagnostics for IPv6 listener detection and HTTP/2
status codes.
- Remove all nginx config files and the https_proxy Docker container.
- Bump wrolpi-help submodule with certificate documentation.
2026-03-07 12:08:27 -07:00
|
|
|
# Main API.
|
|
|
|
|
handle /api/* {
|
|
|
|
|
reverse_proxy api:8081
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2026-03-29 18:58:31 -06:00
|
|
|
# WROLPi blobs (planet overview map, fonts, etc.)
|
|
|
|
|
handle_path /blobs/* {
|
|
|
|
|
root * /opt/wrolpi-blobs
|
|
|
|
|
file_server
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Map static assets (fonts, sprites) for embedded MapLibre viewer.
|
|
|
|
|
handle_path /map-assets/* {
|
|
|
|
|
root * /opt/wrolpi/modules/map/static
|
|
|
|
|
file_server
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-08 09:54:00 -06:00
|
|
|
# Custom MIME types not in Caddy's defaults.
|
|
|
|
|
@yaml path *.yaml *.yml
|
|
|
|
|
header @yaml Content-Type "text/yaml"
|
|
|
|
|
|
|
|
|
|
@epub path *.epub
|
|
|
|
|
header @epub Content-Type "application/epub+zip"
|
|
|
|
|
|
|
|
|
|
@mobi path *.mobi
|
|
|
|
|
header @mobi Content-Type "application/x-mobipocket-ebook"
|
|
|
|
|
|
Replace nginx with Caddy for TLS termination and reverse proxying.
- Replace nginx with Caddy as the web server for both Docker and native
(RPi/Debian) deployments. Caddy handles HTTPS termination, reverse
proxying to all services (API, React app, Controller, Kiwix, Help, Map),
and serves the media/download file browsers.
- Generate a Root CA and signed leaf certificates for HTTPS. The Root CA
uses Name Constraints to restrict signing to local addresses only
(.local, localhost, and RFC 1918 private IP ranges), mitigating MITM
risk if the CA key is compromised.
- Add an HTTP landing page that guides users through one-time CA
certificate installation on iOS, Android, macOS, Windows, Linux, and
Firefox, with auto-redirect when the cert is already trusted.
- Add trailing-slash redirects for /controller, /docs, /media, and
/download so bare paths don't fall through to the React catch-all.
- Add a Root CA download link on the Settings page under Configs.
- Update help.sh diagnostics for IPv6 listener detection and HTTP/2
status codes.
- Remove all nginx config files and the https_proxy Docker container.
- Bump wrolpi-help submodule with certificate documentation.
2026-03-07 12:08:27 -07:00
|
|
|
# Static media files with directory browsing.
|
|
|
|
|
handle_path /media/* {
|
|
|
|
|
root * /opt/media
|
2026-03-08 09:54:00 -06:00
|
|
|
header Content-Disposition "inline"
|
Replace nginx with Caddy for TLS termination and reverse proxying.
- Replace nginx with Caddy as the web server for both Docker and native
(RPi/Debian) deployments. Caddy handles HTTPS termination, reverse
proxying to all services (API, React app, Controller, Kiwix, Help, Map),
and serves the media/download file browsers.
- Generate a Root CA and signed leaf certificates for HTTPS. The Root CA
uses Name Constraints to restrict signing to local addresses only
(.local, localhost, and RFC 1918 private IP ranges), mitigating MITM
risk if the CA key is compromised.
- Add an HTTP landing page that guides users through one-time CA
certificate installation on iOS, Android, macOS, Windows, Linux, and
Firefox, with auto-redirect when the cert is already trusted.
- Add trailing-slash redirects for /controller, /docs, /media, and
/download so bare paths don't fall through to the React catch-all.
- Add a Root CA download link on the Settings page under Configs.
- Update help.sh diagnostics for IPv6 listener detection and HTTP/2
status codes.
- Remove all nginx config files and the https_proxy Docker container.
- Bump wrolpi-help submodule with certificate documentation.
2026-03-07 12:08:27 -07:00
|
|
|
file_server browse
|
|
|
|
|
}
|
|
|
|
|
handle /media {
|
|
|
|
|
redir * /media/ 301
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Downloads with Content-Disposition header.
|
|
|
|
|
handle_path /download/* {
|
|
|
|
|
root * /opt/media
|
|
|
|
|
header Content-Disposition "attachment"
|
|
|
|
|
file_server browse
|
|
|
|
|
}
|
|
|
|
|
handle /download {
|
|
|
|
|
redir * /download/ 301
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# React app with fallback to Controller.
|
|
|
|
|
handle {
|
2026-03-07 19:17:38 -07:00
|
|
|
reverse_proxy app:3000
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
handle_errors 502 503 504 {
|
2026-04-07 20:01:49 -06:00
|
|
|
redir * "http://{host}:8080/?fallback=true" 302
|
Replace nginx with Caddy for TLS termination and reverse proxying.
- Replace nginx with Caddy as the web server for both Docker and native
(RPi/Debian) deployments. Caddy handles HTTPS termination, reverse
proxying to all services (API, React app, Controller, Kiwix, Help, Map),
and serves the media/download file browsers.
- Generate a Root CA and signed leaf certificates for HTTPS. The Root CA
uses Name Constraints to restrict signing to local addresses only
(.local, localhost, and RFC 1918 private IP ranges), mitigating MITM
risk if the CA key is compromised.
- Add an HTTP landing page that guides users through one-time CA
certificate installation on iOS, Android, macOS, Windows, Linux, and
Firefox, with auto-redirect when the cert is already trusted.
- Add trailing-slash redirects for /controller, /docs, /media, and
/download so bare paths don't fall through to the React catch-all.
- Add a Root CA download link on the Settings page under Configs.
- Update help.sh diagnostics for IPv6 listener detection and HTTP/2
status codes.
- Remove all nginx config files and the https_proxy Docker container.
- Bump wrolpi-help submodule with certificate documentation.
2026-03-07 12:08:27 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Kiwix HTTPS proxy (replaces zim_https container).
|
|
|
|
|
:8085 {
|
|
|
|
|
tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
|
|
|
|
|
header ?Access-Control-Allow-Origin "*"
|
|
|
|
|
header ?Access-Control-Allow-Methods "GET, OPTIONS"
|
|
|
|
|
reverse_proxy zim:80
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Help HTTPS proxy (replaces help_https container).
|
|
|
|
|
:8086 {
|
|
|
|
|
tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
|
|
|
|
|
header ?Access-Control-Allow-Origin "*"
|
|
|
|
|
header ?Access-Control-Allow-Methods "GET, OPTIONS"
|
|
|
|
|
reverse_proxy help:80
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-29 18:58:31 -06:00
|
|
|
# Map viewer - serves MapLibre static assets and PMTiles data via Caddy.
|
Replace nginx with Caddy for TLS termination and reverse proxying.
- Replace nginx with Caddy as the web server for both Docker and native
(RPi/Debian) deployments. Caddy handles HTTPS termination, reverse
proxying to all services (API, React app, Controller, Kiwix, Help, Map),
and serves the media/download file browsers.
- Generate a Root CA and signed leaf certificates for HTTPS. The Root CA
uses Name Constraints to restrict signing to local addresses only
(.local, localhost, and RFC 1918 private IP ranges), mitigating MITM
risk if the CA key is compromised.
- Add an HTTP landing page that guides users through one-time CA
certificate installation on iOS, Android, macOS, Windows, Linux, and
Firefox, with auto-redirect when the cert is already trusted.
- Add trailing-slash redirects for /controller, /docs, /media, and
/download so bare paths don't fall through to the React catch-all.
- Add a Root CA download link on the Settings page under Configs.
- Update help.sh diagnostics for IPv6 listener detection and HTTP/2
status codes.
- Remove all nginx config files and the https_proxy Docker container.
- Bump wrolpi-help submodule with certificate documentation.
2026-03-07 12:08:27 -07:00
|
|
|
:8084 {
|
|
|
|
|
tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
|
|
|
|
|
header ?Access-Control-Allow-Origin "*"
|
2026-03-29 18:58:31 -06:00
|
|
|
header ?Access-Control-Allow-Methods "GET, HEAD, OPTIONS"
|
|
|
|
|
header ?Access-Control-Expose-Headers "Content-Range, Content-Length"
|
|
|
|
|
|
|
|
|
|
# PMTiles file list from WROLPi API.
|
|
|
|
|
handle /api/map/* {
|
|
|
|
|
reverse_proxy api:8081
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# WROLPi blobs (planet overview map).
|
|
|
|
|
handle_path /blobs/* {
|
|
|
|
|
root * /opt/wrolpi-blobs
|
|
|
|
|
file_server
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# PMTiles data files from media directory (Range Requests supported by default).
|
|
|
|
|
handle_path /data/* {
|
|
|
|
|
root * /opt/media/map
|
|
|
|
|
file_server
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# MapLibre static assets (HTML, JS, CSS, fonts, sprites).
|
|
|
|
|
handle {
|
|
|
|
|
root * /opt/wrolpi/modules/map/static
|
|
|
|
|
file_server
|
|
|
|
|
}
|
Replace nginx with Caddy for TLS termination and reverse proxying.
- Replace nginx with Caddy as the web server for both Docker and native
(RPi/Debian) deployments. Caddy handles HTTPS termination, reverse
proxying to all services (API, React app, Controller, Kiwix, Help, Map),
and serves the media/download file browsers.
- Generate a Root CA and signed leaf certificates for HTTPS. The Root CA
uses Name Constraints to restrict signing to local addresses only
(.local, localhost, and RFC 1918 private IP ranges), mitigating MITM
risk if the CA key is compromised.
- Add an HTTP landing page that guides users through one-time CA
certificate installation on iOS, Android, macOS, Windows, Linux, and
Firefox, with auto-redirect when the cert is already trusted.
- Add trailing-slash redirects for /controller, /docs, /media, and
/download so bare paths don't fall through to the React catch-all.
- Add a Root CA download link on the Settings page under Configs.
- Update help.sh diagnostics for IPv6 listener detection and HTTP/2
status codes.
- Remove all nginx config files and the https_proxy Docker container.
- Bump wrolpi-help submodule with certificate documentation.
2026-03-07 12:08:27 -07:00
|
|
|
}
|