2026-06-15 00:14:42 +02:00
|
|
|
{
|
|
|
|
|
skip_install_trust
|
|
|
|
|
|
|
|
|
|
{$CADDY_GLOBAL_OPTIONS}
|
|
|
|
|
|
|
|
|
|
frankenphp {
|
|
|
|
|
{$FRANKENPHP_CONFIG}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{$CADDY_EXTRA_CONFIG}
|
|
|
|
|
|
|
|
|
|
{$SERVER_NAME:localhost} {
|
|
|
|
|
log {
|
|
|
|
|
{$CADDY_SERVER_LOG_OPTIONS}
|
|
|
|
|
# Redact the authorization query parameter that can be set by Mercure
|
|
|
|
|
format filter {
|
|
|
|
|
request>uri query {
|
|
|
|
|
replace authorization REDACTED
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
root /app/public
|
|
|
|
|
encode zstd br gzip
|
|
|
|
|
|
|
|
|
|
mercure {
|
|
|
|
|
# Publisher JWT key
|
|
|
|
|
publisher_jwt {env.MERCURE_PUBLISHER_JWT_KEY} {env.MERCURE_PUBLISHER_JWT_ALG}
|
|
|
|
|
# Subscriber JWT key
|
|
|
|
|
subscriber_jwt {env.MERCURE_SUBSCRIBER_JWT_KEY} {env.MERCURE_SUBSCRIBER_JWT_ALG}
|
|
|
|
|
# Allow anonymous subscribers (double-check that it's what you want)
|
|
|
|
|
anonymous
|
|
|
|
|
# Enable the subscription API (double-check that it's what you want)
|
|
|
|
|
subscriptions
|
|
|
|
|
# Extra directives
|
|
|
|
|
{$MERCURE_EXTRA_DIRECTIVES}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
vulcain
|
|
|
|
|
|
|
|
|
|
{$CADDY_SERVER_EXTRA_DIRECTIVES}
|
|
|
|
|
|
|
|
|
|
# Disable Topics tracking if not enabled explicitly: https://github.com/jkarlin/topics
|
|
|
|
|
header ?Permissions-Policy "browsing-topics=()"
|
|
|
|
|
|
2026-06-30 21:07:45 +02:00
|
|
|
# Backend (Symfony) owns /api/* and Mercure; everything else is the SPA.
|
|
|
|
|
# `route` preserves declaration order so the backend matchers win before the
|
|
|
|
|
# SPA catch-all.
|
|
|
|
|
@backend path /api/* /.well-known/mercure*
|
|
|
|
|
|
|
|
|
|
handle @backend {
|
|
|
|
|
@phpRoute {
|
|
|
|
|
not path /.well-known/mercure*
|
|
|
|
|
not file {path}
|
|
|
|
|
}
|
|
|
|
|
rewrite @phpRoute index.php
|
2026-06-15 00:14:42 +02:00
|
|
|
|
2026-06-30 21:07:45 +02:00
|
|
|
@frontController path index.php
|
|
|
|
|
php @frontController {
|
|
|
|
|
{$FRANKENPHP_SITE_CONFIG}
|
|
|
|
|
|
|
|
|
|
worker {
|
|
|
|
|
file ./public/index.php
|
|
|
|
|
{$FRANKENPHP_WORKER_CONFIG}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-06-15 00:14:42 +02:00
|
|
|
|
2026-06-30 21:07:45 +02:00
|
|
|
file_server {
|
|
|
|
|
hide *.php
|
2026-06-15 00:14:42 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-30 21:07:45 +02:00
|
|
|
# Single-page app: serve built static assets, falling back to index.html so
|
|
|
|
|
# client-side routes (/login, /register, …) resolve. The dist is copied to
|
|
|
|
|
# /app/frontend-dist by the prod image build (see Dockerfile).
|
|
|
|
|
handle {
|
|
|
|
|
root * /app/frontend-dist
|
|
|
|
|
try_files {path} /index.html
|
|
|
|
|
file_server
|
2026-06-15 00:14:42 +02:00
|
|
|
}
|
|
|
|
|
}
|