# Application web de la veille législative (SvelteKit, adapter-node). # # Démarrée par veille-web.socket à la première requête, elle s'arrête d'elle-même # après IDLE_TIMEOUT secondes sans trafic, et systemd la réveille à la suivante. # # Node ≥ 20.6 requis : les variables ne sont PAS chargées automatiquement en # production, d'où --env-file. [Unit] Description=Veille législative — application web Documentation=file:///opt/veille-legislative/README.md Requires=veille-web.socket After=network.target veille-web.socket [Service] Type=simple User=veille Group=veille WorkingDirectory=/opt/veille-legislative/web ExecStart=/usr/bin/node --env-file=/opt/veille-legislative/.env build Environment=NODE_ENV=production Environment=VEILLE_DB=/opt/veille-legislative/data/veille.db # Mise en sommeil après cinq minutes sans requête. Environment=IDLE_TIMEOUT=300 # Obligatoire derrière un reverse proxy, sinon les soumissions de formulaire # sont refusées (« Cross-site POST form submissions are forbidden »). # Alternative : PROTOCOL_HEADER=x-forwarded-proto + HOST_HEADER=x-forwarded-host Environment=ORIGIN=https://veille.example.org Restart=on-failure RestartSec=5 # Durcissement : l'application ne fait que lire la base. NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true ReadOnlyPaths=/opt/veille-legislative/data ProtectKernelTunables=true ProtectKernelModules=true ProtectControlGroups=true RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX RestrictNamespaces=true LockPersonality=true StandardOutput=journal StandardError=journal SyslogIdentifier=veille-web [Install] WantedBy=multi-user.target