Files
nas-runbooks/common/trilium-update-procedure.md

113 lines
3.9 KiB
Markdown

# Procédure de Mise à Jour Trilium (`triliumnext/trilium`)
Ce document formalise la procédure d'exploitation, de sauvegarde et de mise à jour du conteneur **Trilium Notes** sur le NAS Synology.
---
## 1. Contexte & Historique de Version
| Attribut | Valeur Initiale (Départ) | Valeur Cible (Post-MAJ) |
|---|---|---|
| **Version Serveur** | `0.103.0` (db schema `238`) | **`0.105.0`** (db schema `240`) |
| **Image Docker** | `triliumnext/trilium:latest` (sha256:2384e4...) | **`triliumnext/trilium:v0.105.0`** |
| **Date d'exécution** | 14/05/2026 | **21/08/2026** |
| **Port hôte** | `4292:8080` | `4292:8080` |
| **Volume de données** | `/volume1/docker/trilium` | `/volume1/docker/trilium` |
| **Volume notes** | 726 notes (initial) | **782 notes** (post-migration) |
---
## 2. Investigation sur la Politique de Restart (`restart: no`)
- **Constat dans le registre** : `ports-registry.md` notait `restart NO (voir alerte)`.
- **Investigation technique** :
- L'image de départ tournait avec `unless-stopped` / `on-failure:5` selon la stack Portainer 252.
- Aucune anomalie de boucle de crash n'a été constatée dans les logs Trilium (`All consistency checks passed with no errors detected`).
- Conformément à la doctrine de prudence demandée dans le brief, la politique de restart a été explicitement fixée à `restart: "no"` dans le fichier compose `/volume1/docker/trilium/docker-compose.yml` et `/volume1/docker/portainer/compose/252/docker-compose.yml`.
---
## 3. Procédure de Sauvegarde
Trilium stocke ses données sous format SQLite (`document.db` + `document.db-wal`).
### Étape A — Arrêt propre et checkpoint SQLite
```bash
docker stop Trilium
```
*L'arrêt propre permet à SQLite de vider le fichier WAL (`document.db-wal`) dans la base principale (`document.db`).*
### Étape B — Copie intégrale du répertoire et vérification d'intégrité
```bash
# Sauvegarde des fichiers clés
mkdir -p /volume1/docker/trilium_db_backup_20260821_pre_v0.105.0
cp -p /volume1/docker/trilium/document.db /volume1/docker/trilium_db_backup_20260821_pre_v0.105.0/
cp -p /volume1/docker/trilium/config.ini /volume1/docker/trilium_db_backup_20260821_pre_v0.105.0/
cp -p /volume1/docker/trilium/session_secret.txt /volume1/docker/trilium_db_backup_20260821_pre_v0.105.0/
# Vérification SQLite PRAGMA integrity_check
python3 -c "
import sqlite3
conn = sqlite3.connect('/volume1/docker/trilium/document.db')
c = conn.cursor()
c.execute('PRAGMA integrity_check;')
print(c.fetchall()) # Doit afficher [('ok',)]
"
```
### Étape C — Sauvegarde native Trilium
Lors du démarrage avec une nouvelle version, Trilium génère automatiquement un backup natif avant migration dans `/volume1/docker/trilium/backup-before-migration.db`.
---
## 4. Configuration `docker-compose.yml` (Pinning strict)
Fichier : `/volume1/docker/trilium/docker-compose.yml`
```yaml
services:
trilium:
image: triliumnext/trilium:v0.105.0
container_name: Trilium
mem_limit: 8g
cpu_shares: 2048
healthcheck:
test: ["CMD-SHELL", "nc -z 127.0.0.1 8080 || exit 1"]
interval: 10s
timeout: 5s
retries: 3
start_period: 90s
security_opt:
- no-new-privileges:false
environment:
- TRILIUM_DATA_DIR=/home/node/trilium-data
- USER_UID=1026
- USER_GID=100
ports:
- 4292:8080
volumes:
- /volume1/docker/trilium:/home/node/trilium-data:rw
restart: "no"
```
---
## 5. Commandes de Recréation et Validation
```bash
# 1. Pull de l'image pinnée
docker pull triliumnext/trilium:v0.105.0
# 2. Recréation
cd /volume1/docker/trilium
docker-compose down
docker-compose up -d
# 3. Vérification des logs et des migrations (db 238 -> 240)
docker logs Trilium --tail 50
# 4. Vérification API et statut HTTP
curl -s http://192.168.100.33:4292/api/setup/status
# Réponse : {"isInitialized":true,"schemaExists":true,"authRequired":false,"syncVersion":39}
```