diff --git a/unnamed.md b/unnamed.md deleted file mode 100644 index 9838be3..0000000 --- a/unnamed.md +++ /dev/null @@ -1,132 +0,0 @@ -# Déploiement - -## Prérequis - -- Python ≥ 3.13.5 -- Git -- Un compte de service non-root (ex: `pronote-sync`) -- Chemins cibles : - - `/opt/pronote-sync` (code) - - `/var/lib/pronote-sync` (état) - - `/var/log/pronote-sync` (logs) - - `/etc/pronote-sync` (configuration) - -## Installation - -```bash -# Créer le compte de service -sudo useradd --system --no-create-home --shell /usr/sbin/nologin pronote-sync - -# Cloner le dépôt -sudo git clone https://git.antoineve.me/AntoineVe/college-infos /opt/pronote-sync -sudo chown -R pronote-sync:pronote-sync /opt/pronote-sync - -# Créer l'environnement virtuel -cd /opt/pronote-sync -sudo -u pronote-sync python3.13 -m venv .venv -sudo -u pronote-sync .venv/bin/pip install -e ".[dev]" - -# Créer les répertoires -sudo install -d -m 0700 -o pronote-sync -g pronote-sync /etc/pronote-sync -sudo install -d -m 0750 -o pronote-sync -g pronote-sync /var/lib/pronote-sync -sudo install -d -m 0750 -o pronote-sync -g pronote-sync /var/log/pronote-sync -``` - -## Configuration - -```bash -sudo -u pronote-sync cp /opt/pronote-sync/.env.example /etc/pronote-sync/pronote-sync.env -``` - -L'opérateur doit renseigner les secrets (`PRONOTE_PASSWORD`, `CALDAV_PASSWORD`, `XMPP_PASSWORD`, `AI_API_KEY`) dans ce fichier. - -Ne jamais placer de secret dans une unité systemd, une commande shell ou un journal. Voir [Sécurité](Sécurité). - -## Contrôles pré-déploiement - -```bash -.venv/bin/python scripts/check_secrets.py -.venv/bin/python -m pip check -.venv/bin/pronote-sync --dry-run -``` - -- `check_secrets.py` : - - Sort avec le code **0** (propre), **1** (secrets détectés), **2** (erreur). - - Inspecte les fichiers textuels, en excluant `.env`, les environnements virtuels, les répertoires générés, `tests/` et `GUIDE_DEV_PYTHON.md`. - - Utilisez `--staged` pour vérifier uniquement les fichiers indexés par Git avant un commit. -- `pip check` : Vérifie la cohérence des dépendances. -- `--dry-run` : Valide le pipeline sans écrire dans CalDAV/XMPP. - -## Installation systemd - -Les fichiers fournis dans `deploy/systemd/` sont : - -- `pronote-sync.service` (oneshot, exécute la synchronisation) -- `pronote-sync.timer` (quotidien à 18:00, avec `Persistent=true`) - -Le service utilise les protections suivantes : `NoNewPrivileges`, `PrivateTmp`, `ProtectHome`, `ProtectSystem=strict`, `ReadWritePaths` pour l'état et les logs. - -```bash -sudo install -m 0644 deploy/systemd/pronote-sync.service /etc/systemd/system/ -sudo install -m 0644 deploy/systemd/pronote-sync.timer /etc/systemd/system/ -sudo systemctl daemon-reload -sudo systemctl enable --now pronote-sync.timer -systemctl list-timers pronote-sync.timer -``` - -Adaptez `User`, `Group`, `WorkingDirectory`, `EnvironmentFile`, les chemins dans `ExecStartPre`, `ExecStart`, `StateDirectory`, `LogsDirectory` et `ReadWritePaths` avant l'installation. - -## Test manuel - -```bash -sudo systemctl start pronote-sync.service -sudo systemctl status pronote-sync.service -``` - -Une exécution en échec laisse le service en état **failed** : configurez une supervision pour alerter sur cet état. - -## Journaux - -```bash -sudo tail -f /var/log/pronote-sync/pronote-sync.log -sudo journalctl -u pronote-sync.service --since today -sudo journalctl -u pronote-sync.service -f -systemctl status pronote-sync.timer -``` - -## Rotation des journaux - -La configuration `deploy/logrotate/pronote_sync` applique : - -- Rotation quotidienne -- 7 archives conservées -- Compression avec `delaycompress` -- Création du fichier avec le mode `0640` pour le compte de service - -```bash -sudo install -m 0644 deploy/logrotate/pronote_sync /etc/logrotate.d/pronote_sync -sudo logrotate --debug /etc/logrotate.d/pronote_sync -``` - -## Mise à jour - -```bash -# Récupérer la nouvelle version du code -sudo -u pronote-sync git -C /opt/pronote-sync pull --ff-only - -# Mettre à jour les dépendances -sudo -u pronote-sync /opt/pronote-sync/.venv/bin/pip install -e ".[dev]" - -# Contrôles pré-redémarrage -sudo -u pronote-sync /opt/pronote-sync/.venv/bin/python scripts/check_secrets.py -sudo -u pronote-sync /opt/pronote-sync/.venv/bin/python -m pip check -sudo -u pronote-sync /opt/pronote-sync/.venv/bin/pronote-sync --dry-run - -# Recharger et redémarrer -sudo systemctl daemon-reload -sudo systemctl restart pronote-sync.timer -sudo systemctl start pronote-sync.service -journalctl -u pronote-sync.service -n 100 --no-pager -``` - -Voir aussi : [Configuration](Configuration) pour les variables d'environnement, [Sécurité](Sécurité) pour la gestion des secrets et `check_secrets`. \ No newline at end of file