wrolpi/docker/web/Caddyfile
Roland b8a532c8d9
Key changes:
- Add MapLibre GL JS viewer with light/dark themes, terrain layer,
  and embedded static map page for coordinate sharing
- Add map pin support with persistent map_pins.yaml config
- Add map region subscriptions and downloader with progress tracking,
  sourcing pre-extracted PMTiles from a cold CDN
- Add map export to PNG and GPS coordinate copy via context menu
- Add MapViewer React component alongside reworked Map page
- Add map catalog and region-building script (build_map_regions.py)
- Remove OSM import/render scripts, leaflet files, Apache configs,
  renderd service, and osm-map-dumper Docker container
- Update Caddyfile to serve PMTiles and map static assets
- Update build/install/repair scripts for Protomaps dependencies
- Drop map_file table, add/drop map_subscription table (alembic)
- Adding button to skip primary drive mounting during onboarding.
2026-04-04 13:48:19 -06:00

160 lines
3.4 KiB
Caddyfile

# Caddy config for WROLPi services (Docker).
{
# No ACME - WROLPi is designed for offline use.
auto_https disable_redirects
}
:80 {
handle / {
root * /var/www
rewrite * /landing.html
file_server
}
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
}
handle {
redir https://{host}:8443{uri} permanent
}
}
:443 {
tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
header Access-Control-Allow-Origin "*"
header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
header Access-Control-Allow-Headers "Content-Type, Accept"
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/* {
reverse_proxy controller:8087
}
handle /controller {
redir * /controller/ 301
}
# Main API.
handle /api/* {
reverse_proxy api:8081
}
# 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
}
# 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"
# Static media files with directory browsing.
handle_path /media/* {
root * /opt/media
header Content-Disposition "inline"
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 {
reverse_proxy app:3000
}
handle_errors 502 503 504 {
redir * "http://{host}:8087/?fallback=true" 302
}
}
# 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
}
# Map viewer - serves MapLibre static assets and PMTiles data via Caddy.
:8084 {
tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
header ?Access-Control-Allow-Origin "*"
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
}
}