# 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} ```