# Зворотний проксі NetPulse. # # Caddy бере на себе сертифікати Let's Encrypt і оновлює їх сам. Це # знімає з розгортання найчастішу причину нічного дзвінка — прострочений # сертифікат на системі, яка сама має повідомляти про проблеми. { email {$ACME_EMAIL} } # --- інтерфейс і API ------------------------------------------------- {$NETPULSE_DOMAIN} { encode zstd gzip # WebSocket живих оновлень. Окремим блоком, бо йому не можна # ставити таймаут на відповідь: зʼєднання висить годинами й # мовчить, поки на мапі нічого не змінюється. @ws path /api/v1/ws reverse_proxy @ws api:8080 { flush_interval -1 } # API і вшитий у бінарник інтерфейс — за однією адресою, тож # розділяти їх не потрібно: SPA віддає той самий процес. reverse_proxy api:8080 header { Strict-Transport-Security "max-age=31536000; includeSubDomains" X-Content-Type-Options "nosniff" X-Frame-Options "DENY" Referrer-Policy "strict-origin-when-cross-origin" -Server } log { output stdout format console } } # --- колектор зондів ------------------------------------------------- # # Зонди говорять gRPC поверх HTTP/2. Усередині мережі — h2c без TLS: # сертифікат живе тут, а не в кожному примірнику колектора. {$NETPULSE_DOMAIN}:9443 { reverse_proxy h2c://collector:9443 { # Потік Control двонаправлений і довгий: агент тримає його # відкритим, доки живий. Буферизація тут ламає саме те, заради # чого потік існує — миттєву доставку команд. flush_interval -1 } log { output stdout format console } }