Files
veye-lalwa_ynh/conf/systemd.service
T
Cyber MawonajandClaude Opus 5 07b349be86 Paquet YunoHost pour Vèy Lalwa — v1.0.1~ynh1
Format de paquetage 2, helpers 2.1, sur le modèle de jwe_ynh.

Ce que l'installation fait, dans cet ordre : extraire l'archive, rendre le
.env depuis les réponses d'installation, construire l'application web (npm ci,
polices, build, prune), monter l'environnement Python, puis remplir la base
depuis le corpus de recherche embarqué.

Trois choix qui méritent d'être dits :

- La base, le cache et l'export vivent dans data_dir, jamais dans le répertoire
  d'installation. « ynh_setup_source --full_replace » efface celui-ci
  intégralement à chaque mise à jour : y laisser la base effacerait tout le
  travail de veille accumulé. Vérifié en simulant la mise à jour — 59 textes,
  367 sources et 3 passages survivent à l'effacement.
- Un domaine dédié, sans question « path ». Les liens internes sont absolus et
  SvelteKit demanderait une recompilation avec « paths.base » pour tenir sur
  un sous-chemin. Mieux vaut une contrainte annoncée qu'un sous-chemin à
  moitié fonctionnel.
- Les identifiants Légifrance sont facultatifs, et les tests s'exécutent sans :
  cela vérifie au passage le mode dégradé documenté. Le rapport de passage
  affiche alors « legifrance ignoré — repli sur … », et les deux autres
  collecteurs détectent quand même les 7 ajouts et les 4 changements de
  décision.

Un minuteur systemd distinct porte le passage de collecte, le helper
« ynh_config_add_systemd » ne gérant que l'unité principale. Il est arrêté
avant toute mise à jour : un passage qui démarrerait pendant le remplacement
des fichiers travaillerait sur un arbre à moitié écrit.

Vérifié avant publication, pas après : séquence npm complète depuis l'archive
publiée, environnement Python, remplissage, démarrage du service lisant la base
de data_dir, origine déduite des en-têtes du proxy, passage en mode dégradé, et
simulation d'effacement du répertoire d'installation. shellcheck sans
avertissement, TOML valides.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 23:33:28 -04:00

53 lines
1.8 KiB
Desktop File

[Unit]
Description=Vèy Lalwa — veille législative, application web
Documentation=https://labola.o-k-i.net/cyber-mawonaj/veye-lalwa
After=network.target
[Service]
Type=simple
User=__APP__
Group=__APP__
WorkingDirectory=__INSTALL_DIR__/web
Environment="PATH=__PATH_WITH_NODEJS__"
EnvironmentFile=__INSTALL_DIR__/.env
ExecStart=__NODEJS_DIR__/node build
Restart=on-failure
RestartSec=5
StandardOutput=append:/var/log/__APP__/__APP__.log
StandardError=inherit
# Sandboxing options to harden security
# Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html
NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
RestrictNamespaces=yes
RestrictRealtime=yes
DevicePolicy=closed
ProtectClock=yes
ProtectHostname=yes
ProtectProc=invisible
ProtectSystem=full
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
LockPersonality=yes
SystemCallArchitectures=native
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap @cpu-emulation @privileged
# Denying access to capabilities that should not be relevant for webapps
# Doc: https://man7.org/linux/man-pages/man7/capabilities.7.html
CapabilityBoundingSet=~CAP_RAWIO CAP_MKNOD
CapabilityBoundingSet=~CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE
CapabilityBoundingSet=~CAP_SYS_BOOT CAP_SYS_TIME CAP_SYS_MODULE CAP_SYS_PACCT
CapabilityBoundingSet=~CAP_LEASE CAP_LINUX_IMMUTABLE CAP_IPC_LOCK
CapabilityBoundingSet=~CAP_BLOCK_SUSPEND CAP_WAKE_ALARM
CapabilityBoundingSet=~CAP_SYS_TTY_CONFIG
CapabilityBoundingSet=~CAP_MAC_ADMIN CAP_MAC_OVERRIDE
CapabilityBoundingSet=~CAP_NET_ADMIN CAP_NET_BROADCAST CAP_NET_RAW
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_SYSLOG
[Install]
WantedBy=multi-user.target