113 lines
3.9 KiB
Markdown
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}
|
|
```
|