Sauvegarde et restauration
Tout vit dans une seule base PostgreSQL, donc une sauvegarde est un simple pg_dump. Paramètres → Sauvegarde et restauration dans l'application affiche ces commandes pré-remplies pour votre déploiement. Exécutez-les sur l'hôte où la pile est déployée ; elles utilisent le conteneur Postgres existant, aucun accès supplémentaire n'est nécessaire.
La section comporte deux onglets, chacun divisé en Sauvegarde et Restauration :
- Complète : toute la base, prise sur l'hôte, pour le jour où la machine meurt.
- Partielle : les modules que vous cochez, dans un seul zip, pour déménager ou garder une copie lisible.
Sauvegarde complète
Dump simple :
cd deploy
docker compose --env-file .env --env-file network.env exec -T postgres \
pg_dump -U otw opentraderworld > otw-backup-$(date +%F).sqlLa chiffrer (recommandé)
Un dump contient vos données en clair. Faites-le passer par gpg (ou age) pour que le fichier soit chiffré sur le disque. Une phrase secrète vous sera demandée :
docker compose --env-file .env --env-file network.env exec -T postgres \
pg_dump -U otw opentraderworld | gpg -c --cipher-algo AES256 -o otw-backup-$(date +%F).sql.gpgNotes de sécurité
- Les clés API et identifiants des fournisseurs (flux d'actualités, fournisseurs de données de marché) sont déjà chiffrés au repos avec
OTW_SECRET_KEY, ils n'apparaissent donc que sous forme chiffrée dans le dump. - Sauvegardez
OTW_SECRET_KEY(depuisdeploy/.env) séparément, pas dans le même dump, sinon ces secrets chiffrés ne pourront pas être restaurés. - Le dump inclut des tokens de session actifs. Traitez le fichier comme un secret, ou supprimez la table
sessionsaprès la restauration et reconnectez-vous. - Stockez la sauvegarde chiffrée hors de la machine et faites tourner les anciennes copies.
Partielle (par module)
L'onglet Partielle prend les modules que vous cochez et vous donne un seul fichier zip, pour déplacer un journal vers une autre instance ou garder une copie lisible. Elle s'exécute application en marche, contrairement à la sauvegarde complète.
Sauvegarde partielle
- Ouvrez Paramètres → Sauvegarde et restauration → Partielle → Sauvegarde.
- Cochez les modules voulus. Chacun affiche son nombre de lignes et sa taille, le total de la sélection s'affiche sous la liste, et Contenu de la sélection le détaille table par table. Les barres historiques sont décochées au départ : c'est de loin la plus grosse table, et elles peuvent être retéléchargées auprès de votre fournisseur.
- Laissez Inclure les identifiants de fournisseurs stockés désactivé sauf si vous savez pourquoi vous en avez besoin. Ces valeurs sont chiffrées avec le
OTW_SECRET_KEYde cette instance et illisibles ailleurs. - Cliquez sur Télécharger les données sélectionnées. Vous obtenez
otw-data-YYYY-MM-DD.zip.
Dans le zip : manifest.json (ce qu'il contient, quelle version l'a écrit) et un tables/<name>.jsonl par table, un objet JSON par ligne. N'importe quel outil peut le lire.
Restauration partielle
Ouvrez Paramètres → Sauvegarde et restauration → Partielle → Restauration sur l'instance cible et choisissez le fichier.
Le fichier est lu dès que vous le choisissez, et rien n'est écrit : vous obtenez la version qui l'a écrit et, par module et par table, le nombre de lignes qu'il contient face au nombre présent actuellement. Une très grande table est signalée par une estimation, marquée
~. Un fichier que cette instance refuserait (endommagé, ou issu d'une version plus récente) est refusé à ce stade, avant tout engagement de votre part.Choisissez comment il doit se combiner avec les données déjà présentes :
- Ajouter ce qui manque conserve tout l'existant et n'ajoute que les lignes qui ne sont pas encore là. Rien n'est écrasé.
- Remplacer efface les données de chaque module du fichier, puis charge la version du fichier. Il vous demande de saisir
REPLACE, et enregistre d'abord une copie des données actuelles.
La ligne sous le choix traduit ces comptes en ce qui va se passer. Remplacer est exact : efface les N lignes d'ici, met à leur place les M lignes du fichier. Fusionner ne peut donner qu'un plafond, ajoute jusqu'à M lignes : une ligne dont la clé est déjà là est ignorée, et seul le chargement lui-même sait combien cela représente.
Cliquez sur Charger ce fichier.
Tout se passe dans une seule transaction : si une partie échoue, rien n'est modifié.
Un fichier d'une version plus récente est refusé
Charger un paquet écrit par une version plus récente est refusé plutôt que tenté. Mettez d'abord l'instance à jour, puis chargez-le.
Les lignes conservent leurs identifiants d'origine, et le fichier entier est lu en mémoire, donc une très grande sélection (typiquement les barres historiques) est refusée avec un message qui renvoie à la sauvegarde pg_dump ci-dessus. C'est le bon outil pour "tout, y compris ce que je ne regarde jamais".
Restauration complète
Dans une base neuve et vide (une pile tout juste créée) :
cd deploy
docker compose --env-file .env --env-file network.env exec -T postgres \
psql -U otw opentraderworld < otw-backup-2026-07-06.sqlDepuis une sauvegarde chiffrée :
gpg -d otw-backup-2026-07-06.sql.gpg | \
docker compose --env-file .env --env-file network.env exec -T postgres \
psql -U otw opentraderworldAssurez-vous que la pile restaurée utilise le même OTW_SECRET_KEY qu'au moment de la sauvegarde, sinon les identifiants de fournisseurs stockés seront illisibles.