Delete page "unnamed"

2026-09-08 18:08:27 +02:00
parent 7d5e677680
commit 43ed0b5189

@@ -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`.