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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 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
|
|
|
}
|