Mealie : installation, recettes, menus et sauvegarde.
Note d’anonymisation Tous les domaines, comptes, montants, noms de serveurs, adresses et secrets sont fictifs. Les captures doivent être réalisées avec des données de démonstration et leurs métadonnées EXIF supprimées.
1. Utilité et positionnement
Mealie centralise les recettes, ajuste les portions, planifie les repas et transforme les ingrédients en liste de courses.
2. Architecture cible
Internet → Traefik → Mealie:9000 → /app/data
3. Préparer le déploiement
Créez un dossier dédié sous /opt/stacks, générez les secrets avec openssl rand -hex 32, protégez .env en mode 600 et validez toujours le Compose avec docker compose config --quiet. Seul le service Web rejoint le réseau externe proxy-public ; bases et caches restent sur un réseau interne.
Avant le premier démarrage Consultez les notes de version et figez une version testée. Les exemples de tags sont des repères : une mise à jour majeure peut modifier les variables ou le schéma de base.
SQLite suffit généralement à 1–20 utilisateurs et simplifie la sauvegarde. PostgreSQL améliore les écritures concurrentes et active notamment la recherche approximative.
7. Structurer la bibliothèque
Utilisez peu de catégories pour le type de plat et des étiquettes transversales comme rapide, végétarien, hiver ou congélable. Normalisez les unités afin que la liste de courses fusionne correctement.
8. Importer une recette
Contrôlez titre, portions, ingrédients, unités, étapes et image. Un extracteur ne peut pas inventer une structure absente du site source.
9. Planifier et faire les courses
Ajoutez les recettes au calendrier, envoyez leurs ingrédients vers une liste et contrôlez les quantités agrégées avant de partir.
10. Sauvegarde intégrée
Settings → Admin Settings → Backups permet créer, télécharger, téléverser et restaurer. La restauration est destructive.
11. Migrer vers PostgreSQL
Créez un backup intégré, restaurez sur une stack PostgreSQL temporaire ; la documentation indique qu’un rôle superutilisateur peut être temporairement nécessaire, à retirer immédiatement.
Capture 1 à ajouter — Bibliothèque À capturer : recettes fictives Intérêt : présenter le produit À masquer : noms privés
Capture 2 à ajouter — Recette À capturer : ingrédients et étapes Intérêt : montrer la structure À masquer : photo familiale
Capture 3 à ajouter — Planificateur À capturer : semaine artificielle Intérêt : montrer l’usage À masquer : habitudes réelles
Capture 4 à ajouter — Sauvegardes À capturer : liste de backups Intérêt : documenter la maintenance À masquer : noms sensibles
Plan de sauvegarde et restauration
Conservez la configuration, les secrets et un export cohérent des données hors de l’hôte. Une sauvegarde n’est validée qu’après restauration sur une seconde stack isolée. Documentez la version de l’image utilisée pour la restauration.
Cette installation est prête à être adaptée et relue avant publication. Les captures proposées apportent une preuve visuelle aux étapes complexes sans exposer de données personnelles ou d’infrastructure.
Quand on détient un PEA dans une banque, un compte-titres chez un courtier en ligne, de l’épargne salariale et quelques cryptomonnaies, plus personne ne sait répondre simplement à la question : « combien ai-je, où, et est-ce bien réparti ? ». Ghostfolio est un tableau de bord patrimonial open source qui consolide ces actifs, calcule la performance réelle, détecte les déséquilibres et suit les dividendes. Ce guide présente ses fonctionnalités en détail, puis l’installation auto-hébergée complète, la saisie des données, les imports, la maintenance et la restauration.
Note d’anonymisation Les captures d’écran de cet article proviennent du compte de démonstration officiel de Ghostfolio, qui contient un portefeuille fictif : aucune donnée personnelle n’y apparaît. Les domaines (finance.exemple.net), comptes, établissements et montants utilisés dans les exemples sont également fictifs.
1. Ghostfolio en bref
Ghostfolio est un logiciel de gestion de patrimoine développé en TypeScript (Angular pour l’interface, NestJS pour l’API, PostgreSQL pour les données et Redis pour le cache). Il est publié sous licence AGPL-3.0. Deux modes d’utilisation existent :
Mode
Principe
Pour qui
Ghostfol.io (cloud)
Compte hébergé par l’éditeur, gratuit ou Premium
Tester rapidement, ne rien administrer
Auto-hébergé
Image Docker officielle sur votre serveur
Garder la maîtrise totale de données financières sensibles
Ce guide traite de l’auto-hébergement. Les données financières font partie des plus sensibles qui soient : les garder chez soi, derrière un reverse proxy maîtrisé, est précisément l’intérêt de la démarche.
Capture à ajouter Vue d’ensemble : valeur nette, performance et évolution du portefeuille de démonstration. Source : démo officielle ghostfol.io.
2. Ce que Ghostfolio fait… et ne fait pas
Avant d’installer quoi que ce soit, il faut comprendre le positionnement de l’outil, sinon on finit par lui demander ce qu’il ne sait pas faire.
Besoin
Ghostfolio
Commentaire
Consolider plusieurs courtiers et enveloppes
Oui
Cœur du produit
Performance réelle depuis l’origine, par année, sur 1 an
Oui
Calculée à partir des transactions
Allocation par classe d’actifs, pays, secteur, devise
Oui
Pour les ETF, décomposition selon les données disponibles
Suivi des dividendes
Oui
Historique et projection
Liquidités et soldes de comptes
Oui
Saisie manuelle ou import
Budget mensuel, dépenses courantes
Non
Rôle d’un outil comme Actual Budget
Synchronisation automatique avec la banque
Non
Saisie ou import des transactions
Calcul fiscal français (PFU, abattements PEA)
Non
Ghostfolio n’est pas un logiciel fiscal
Immobilier, véhicules, objets
Partiellement
Saisie manuelle de valeurs pour suivre le patrimoine global
Complémentarité Ghostfolio et un outil de budget sont complémentaires : le budget répond à « puis-je dépenser ? », Ghostfolio à « comment évolue ce que j’ai épargné ? ». Évitez de saisir deux fois la même information dans les deux outils.
3. Tour d’horizon des fonctionnalités
3.1 Vue d’ensemble
L’écran d’accueil affiche la valeur nette, la performance du jour, le graphique d’évolution et plusieurs plages de temps : aujourd’hui, depuis le début de l’année, 1 an, 5 ans et depuis l’origine. Le mode Zen masque les montants et ne conserve que les pourcentages, pratique pour consulter son portefeuille en public ou pour s’empêcher de réagir aux variations quotidiennes.
3.2 Positions (holdings)
Chaque actif détenu apparaît avec sa quantité, sa valeur, son poids dans le portefeuille et sa performance. Un clic ouvre la fiche détaillée : historique des transactions, prix moyen d’achat, dividendes perçus et graphique de cours.
Capture à ajouter Les positions : poids, valeur et performance de chaque actif. Source : démo officielle ghostfol.io.
3.3 Allocations
C’est la fonctionnalité qui justifie souvent à elle seule l’adoption de l’outil. Ghostfolio ventile le portefeuille selon plusieurs axes :
Compte et plateforme : exposition par établissement, utile pour mesurer le risque de contrepartie ;
Devise : part du patrimoine exposée au dollar, à la livre ou au franc suisse ;
Pays, régions et marchés : marchés développés, émergents, États-Unis ;
Secteurs : technologie, santé, finance, etc. ;
Symboles : poids individuel de chaque ligne.
Capture à ajouter Les allocations par classe d’actifs, devise, compte et région. Source : démo officielle ghostfol.io.
3.4 Analyse et performance
La page d’analyse compare l’évolution du portefeuille à un indice de référence, détaille les meilleures et les pires positions et présente les investissements par période. On visualise immédiatement si les apports réguliers ont été tenus et comment la valeur a évolué indépendamment de ces apports.
Capture à ajouter Analyse : performance comparée à un indice de référence et investissements par période. Source : démo officielle ghostfol.io.
3.5 X-ray : l’analyse statique des risques
X-ray passe le portefeuille au crible de règles simples : concentration excessive sur un compte, une devise ou une classe d’actifs, frais trop élevés par rapport aux montants investis, liquidités en excès ou insuffisantes. Chaque règle est notée et peut être ajustée. C’est un excellent garde-fou contre la dérive progressive d’une allocation.
Capture à ajouter X-ray : règles de diversification et de frais appliquées au portefeuille. Source : démo officielle ghostfol.io.
3.6 FIRE : projection vers l’indépendance financière
Le calculateur FIRE projette le capital dans le temps selon un taux d’épargne et un rendement annuel hypothétiques, et estime le revenu qu’une règle de retrait de 4 % permettrait de tirer du portefeuille. C’est un outil de réflexion, pas une promesse : les hypothèses de rendement doivent rester prudentes.
Capture à ajouter Projection FIRE : évolution estimée du capital et revenu de retrait. Source : démo officielle ghostfol.io.
3.7 Activités
Toutes les transactions sont listées dans la page Activités : achats, ventes, dividendes, intérêts, frais, passifs et biens de valeur. C’est ici que l’on saisit, importe, exporte et corrige les données. La qualité de tout le reste dépend de cette page.
Capture à ajouter Les activités : la source de vérité de tous les calculs. Source : démo officielle ghostfol.io.
3.8 Fonctions complémentaires
Watchlist pour suivre des actifs non détenus ;
Multi-utilisateurs : chaque membre du foyer a son propre portefeuille ;
Accès partagé en lecture seule ou en mode public, par exemple pour un conseiller ;
Mode sombre et interface disponible en français ;
Export JSON complet des activités ;
API pour automatiser l’import depuis des scripts.
4. Architecture de l’installation
Internet
│ HTTPS
▼
Cloudflare Tunnel / Traefik ── réseau Docker « proxy-public »
│
▼
ghostfolio:3333 ──────────── réseau interne « ghostfolio-internal »
├── postgres:5432 données : comptes, activités, utilisateurs
└── redis:6379 cache et files de tâches (collecte des cours)
Composant
Rôle
À sauvegarder
Ghostfolio
Interface Web, API, calculs, collecte des cours
Non, l’image suffit
PostgreSQL
Toutes les données métier
Oui, impérativement
Redis
Cache et file des tâches de collecte
Non
Fichier .env
Mots de passe et clés de signature
Oui, de manière chiffrée
Ressources observées pour un usage familial : environ 500 Mo à 1 Go de RAM pour l’ensemble, très peu de CPU hors collecte des cours, et quelques centaines de Mo de disque pour PostgreSQL.
5. Prérequis
Un hôte Docker avec Docker Engine et le plugin Compose à jour ;
Un reverse proxy fonctionnel (Traefik dans cet article) et un réseau externe partagé, ici proxy-public ;
Un nom de domaine dédié, par exemple finance.exemple.net, avec certificat valide ;
Un emplacement de sauvegarde situé hors de l’hôte.
6. Préparer les secrets
Le fichier d’exemple officiel .env.example définit les variables nécessaires. Toutes les valeurs sensibles doivent être générées aléatoirement.
mkdir -p /opt/stacks/ghostfolio
cd /opt/stacks/ghostfolio
cat > .env <<EOF
COMPOSE_PROJECT_NAME=ghostfolio
# CACHE
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=$(openssl rand -hex 32)
# POSTGRES
POSTGRES_DB=ghostfolio-db
POSTGRES_USER=ghostfolio
POSTGRES_PASSWORD=$(openssl rand -hex 32)
# VARIOUS
ACCESS_TOKEN_SALT=$(openssl rand -hex 32)
JWT_SECRET_KEY=$(openssl rand -hex 32)
EOF
# DATABASE_URL est ajoutée ensuite pour que le shell ne remplace pas les variables
echo 'DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?connect_timeout=300' >> .env
chmod 600 .env
Variable
Rôle
POSTGRES_*
Création de la base au premier démarrage
DATABASE_URL
Chaîne de connexion utilisée par Ghostfolio
REDIS_*
Connexion au cache, protégée par mot de passe
ACCESS_TOKEN_SALT
Sel utilisé pour les jetons d’accès des utilisateurs
JWT_SECRET_KEY
Clé de signature des sessions
Ne perdez jamais ces deux clés Le jeton de sécurité de chaque utilisateur dépend de ACCESS_TOKEN_SALT. Si vous perdez ou modifiez cette valeur après la création des comptes, les jetons existants deviennent invalides. Sauvegardez le fichier .env avec la base, dans un emplacement chiffré.
Ne publiez pas la sortie de docker compose config docker compose config affiche toutes les variables remplacées, donc les mots de passe en clair. Pour valider le fichier, utilisez docker compose config --quiet.
7. Le fichier Compose
Le fichier ci-dessous s’appuie sur le Compose officiel du dépôt Ghostfolio, avec trois adaptations : aucun port publié sur l’hôte, deux réseaux séparés et des données stockées dans le dossier de la stack pour simplifier les sauvegardes.
cap_drop: ALL et no-new-privileges : les conteneurs démarrent sans aucune capacité Linux superflue. PostgreSQL récupère uniquement celles dont il a besoin pour gérer ses fichiers.
$${...} : le double dollar empêche Compose de remplacer la variable ; c’est le shell du conteneur qui la lit au démarrage.
condition: service_healthy : Ghostfolio attend que PostgreSQL et Redis répondent réellement avant de démarrer, ce qui évite les erreurs de migration au premier lancement.
Réseau internal : PostgreSQL et Redis ne sont joignables ni depuis Traefik ni depuis l’extérieur.
stop_grace_period: 1m : laisse le temps à l’application de terminer proprement ses tâches.
Figer la version après validation Le tag latest suit la dernière version stable. Une fois l’installation validée, relevez la version réellement déployée avec docker image inspect ghostfolio/ghostfolio:latest --format '{{index .Config.Labels "org.opencontainers.image.version"}}' ou dans À propos, puis figez-la dans le Compose pour maîtriser les mises à jour.
Au premier lancement, Ghostfolio applique ses migrations Prisma puis démarre l’API. Dans les journaux, on doit voir l’application écouter sur le port 3333. Attendez que les trois conteneurs soient healthy :
NAME STATUS
ghostfolio Up 2 minutes (healthy)
gf-postgres Up 2 minutes (healthy)
gf-redis Up 2 minutes (healthy)
Message ou symptôme
Cause probable
Correction
REDIS_PASSWORD variable is not set
Variable absente du .env
Vérifier le fichier et sa lecture par Compose
Can't reach database server
DATABASE_URL incorrecte ou base pas prête
Vérifier le nom du service postgres et les identifiants
password authentication failed
Mot de passe modifié après initialisation de la base
Les variables POSTGRES_* ne s’appliquent qu’à la création ; restaurer l’ancien mot de passe
Exposition sur Internet Ghostfolio contient l’intégralité de votre patrimoine financier. Si l’instance n’est utilisée que par le foyer, envisagez de ne pas la publier sur Internet du tout et de n’y accéder qu’en local ou via VPN. À défaut, ajoutez une protection en amont (authentification du reverse proxy, filtrage d’IP, CrowdSec).
10. Créer le compte administrateur
Ghostfolio n’utilise pas de couple identifiant / mot de passe classique. À l’inscription, l’application génère un jeton de sécurité qui sert ensuite à se connecter. Le premier compte créé sur une instance auto-hébergée devient administrateur.
Ouvrir https://finance.exemple.net et choisir Démarrer.
Copier immédiatement le jeton de sécurité affiché et l’enregistrer dans un gestionnaire de mots de passe.
Accepter les conditions et accéder au tableau de bord vide.
Ouvrir Mon Ghostfolio → Paramètres et choisir la langue française, la devise de référence EUR et le format de date.
Dans Admin Control → Paramètres, désactiver l’inscription des nouveaux utilisateurs une fois les comptes du foyer créés.
Jeton de sécurité Le jeton de sécurité n’est affiché qu’une fois. Sans lui, il faut qu’un administrateur en régénère un nouveau. Ne le stockez jamais dans un fichier texte non chiffré.
Plusieurs personnes Pour chaque membre du foyer, créez un compte séparé : les portefeuilles restent indépendants. L’accès partagé permet ensuite de consulter un autre portefeuille en lecture seule sans partager son jeton.
11. Modéliser plateformes et comptes
C’est l’étape la plus importante, et celle que l’on regrette le plus d’avoir bâclée. Ghostfolio distingue deux notions :
La plateforme : l’établissement qui détient vos avoirs (banque, courtier, teneur de compte d’épargne salariale, plateforme crypto) ;
Le compte : une enveloppe précise ouverte dans cet établissement (PEA, CTO, PEE, livret, portefeuille crypto).
Plateforme fictive
Compte
Devise
Remarque
Banque Alpha
PEA
EUR
Enveloppe fiscale distincte du CTO
Banque Alpha
PEA-PME
EUR
Compte séparé, même plateforme
Courtier Bêta
CTO
EUR
Peut contenir des titres en USD
Épargne Entreprise
PEE
EUR
Fonds souvent non cotés
Épargne Entreprise
PERCO / PER collectif
EUR
Avoirs bloqués jusqu’à la retraite
Crypto Gamma
Portefeuille spot
EUR
Cryptomonnaies
Banque Alpha
Livret
EUR
Liquidités de précaution
Cette organisation permet d’obtenir à la fois une vue par enveloppe fiscale et une vue par établissement. La seconde est souvent négligée : elle révèle par exemple que 80 % du patrimoine dépend d’un seul courtier.
Capture à ajouter Les comptes et leur solde de liquidités, rattachés à leurs plateformes. Source : démo officielle ghostfol.io.
Bon réflexe Renseignez le solde de liquidités de chaque compte. Sans lui, la valeur d’un compte-titres après une vente paraît chuter, alors que l’argent est simplement redevenu des espèces.
12. Comprendre les types d’activités
Type
Usage
Effet sur le portefeuille
BUY
Achat d’un titre
Augmente la quantité détenue
SELL
Vente
Diminue la quantité, réalise une plus ou moins-value
DIVIDEND
Dividende perçu
Ajoute un revenu, sans changer la quantité
INTEREST
Intérêts (livret, obligations)
Ajoute un revenu
FEE
Frais isolés (droits de garde)
Diminue la performance
LIABILITY
Dette (crédit)
Diminue la valeur nette
ITEM
Bien de valeur (véhicule, objet)
Suivi manuel de la valeur
Les frais de courtage d’un achat se saisissent dans le champ frais de l’activité BUY, pas comme une activité FEE séparée : sinon ils seraient comptés deux fois.
13. Sources de données et symboles
Chaque actif est associé à une source de données qui fournit son cours :
Source
Usage typique
YAHOO
Actions et ETF cotés ; symboles du type CW8.PA, AAPL
COINGECKO
Cryptomonnaies, identifiées par l’identifiant CoinGecko (bitcoin, ethereum)
MANUAL
Actifs sans cotation publique : fonds d’épargne salariale, parts non cotées
GHOSTFOLIO
Source fournie par l’éditeur avec un abonnement Premium
Vérifiez la place de cotation Un même ticker peut désigner des titres différents selon la place de cotation. Recherchez toujours l’actif par son nom ou son ISIN dans le formulaire d’ajout, puis vérifiez la devise et la place affichées. Un mauvais choix produit une courbe crédible mais totalement fausse.
Cas de l’épargne salariale
Les fonds de PEE et PERCO n’ont généralement pas de cours public exploitable. Créez l’actif en source MANUAL, saisissez les achats avec la valeur liquidative de la date d’investissement, puis renseignez régulièrement la valeur liquidative dans Admin Control → Données de marché. Pour l’abondement employeur, une convention simple consiste à le saisir comme un achat dont le prix est réel mais dont l’apport ne provient pas de vous ; notez votre convention et appliquez-la toujours de la même façon.
14. Saisir ou importer les activités
14.1 Saisie manuelle
Pour quelques lignes, le bouton + de la page Activités suffit : choisir le type, rechercher l’actif, puis saisir date, quantité, prix unitaire, frais et compte.
14.2 Import CSV
Pour un historique important, l’import CSV est bien plus rapide. Le format reconnu est celui du fichier d’exemple officiel test/import/ok.csv du dépôt Ghostfolio :
Date,Code,DataSource,Currency,Price,Quantity,Action,Fee,Note
2024-01-15,CW8.PA,YAHOO,EUR,480.25,4,buy,1.99,Achat mensuel PEA
2024-02-15,CW8.PA,YAHOO,EUR,495.10,4,buy,1.99,Achat mensuel PEA
2024-03-20,AAPL,YAHOO,USD,172.30,5,buy,2.50,CTO
2024-05-16,AAPL,YAHOO,USD,0.25,5,dividend,0,Dividende trimestriel
2024-06-10,bitcoin,COINGECKO,EUR,62000,0.01,buy,1.20,Achat crypto
Colonne
Contenu
Piège à éviter
Date
Format ISO AAAA-MM-JJ
Format français JJ/MM/AAAA mal interprété
Code
Symbole de la source
Symbole Yahoo sans suffixe de place
DataSource
YAHOO, COINGECKO, MANUAL
Mélanger les sources pour un même actif
Currency
Devise de cotation de l’actif
Indiquer EUR pour un titre coté en USD
Price
Prix unitaire hors frais
Mettre le montant total
Quantity
Nombre de titres
Quantité négative pour une vente
Action
buy, sell, dividend, fee, interest
Libellés français du courtier
Fee
Frais de l’opération
Frais déjà inclus dans le prix
Le séparateur décimal doit être un point et le fichier encodé en UTF-8. L’export d’un courtier français utilise souvent le point-virgule, la virgule décimale et des dates françaises : un petit script de conversion est presque toujours nécessaire.
14.3 Convertir un export de courtier
#!/usr/bin/env python3
# Conversion d'un export CSV de courtier (format français) vers le format Ghostfolio.
# Adaptez le dictionnaire COLONNES et TYPES aux libellés de votre courtier.
import csv, sys
from datetime import datetime
COLONNES = {"date": "Date opération", "isin": "ISIN", "type": "Sens",
"quantite": "Quantité", "prix": "Cours", "frais": "Frais"}
TYPES = {"Achat": "buy", "Vente": "sell", "Dividende": "dividend"}
SYMBOLES = {"FR0010315770": "CW8.PA"} # ISIN -> symbole Yahoo
def nombre(texte):
return float(texte.replace("\u00a0", "").replace(" ", "").replace(",", ".") or 0)
source, cible = sys.argv[1], sys.argv[2]
with open(source, encoding="utf-8-sig") as f, open(cible, "w", newline="", encoding="utf-8") as g:
lecteur = csv.DictReader(f, delimiter=";")
ecrivain = csv.writer(g)
ecrivain.writerow(["Date", "Code", "DataSource", "Currency", "Price", "Quantity", "Action", "Fee", "Note"])
for ligne in lecteur:
isin = ligne[COLONNES["isin"]].strip()
if isin not in SYMBOLES or ligne[COLONNES["type"]] not in TYPES:
print(f"Ignoré : {ligne}", file=sys.stderr)
continue
date = datetime.strptime(ligne[COLONNES["date"]], "%d/%m/%Y").strftime("%Y-%m-%d")
ecrivain.writerow([date, SYMBOLES[isin], "YAHOO", "EUR",
nombre(ligne[COLONNES["prix"]]), abs(nombre(ligne[COLONNES["quantite"]])),
TYPES[ligne[COLONNES["type"]]], nombre(ligne[COLONNES["frais"]]), isin])
Le script affiche toutes les lignes ignorées : aucune ligne ne doit disparaître silencieusement entre l’export du courtier et l’import Ghostfolio.
14.4 Méthode d’import sans regret
Faire une sauvegarde PostgreSQL juste avant l’import (section 18).
Importer un premier fichier de cinq lignes seulement.
Vérifier dans la boîte de dialogue d’import l’aperçu proposé : actifs reconnus, devises, comptes.
Après validation, contrôler les positions concernées.
Importer ensuite le reste, compte par compte, en commençant par le plus simple.
Après chaque compte, comparer les quantités avec le dernier relevé du courtier.
Pas de réimport par-dessus un import Ghostfolio ne sait pas qu’une ligne réimportée après correction remplace une ligne déjà présente. Réimporter un fichier corrigé par-dessus le précédent crée des doublons. Supprimez d’abord les activités du lot fautif, ou restaurez la sauvegarde prise avant l’import.
15. Cryptomonnaies
Utilisez la source COINGECKO et l’identifiant CoinGecko, pas le ticker : plusieurs jetons partagent le même ticker.
Un transfert entre deux portefeuilles qui vous appartiennent ne doit pas créer un nouvel achat : la quantité totale ne change pas, seul le compte change.
Les récompenses de staking peuvent être saisies comme un achat à prix nul ou comme des intérêts, selon la façon dont vous voulez mesurer la performance : choisissez une convention et notez-la.
Les frais réseau payés en crypto diminuent la quantité détenue ; contrôlez la quantité finale par actif.
16. Devises et taux de change
La devise de référence (EUR) sert à l’affichage global ; chaque actif conserve sa devise de cotation. Ghostfolio convertit en utilisant les taux de change historiques. Si une erreur indique qu’aucun taux de change n’a été trouvé pour une date, les cours de la paire concernée n’ont pas encore été collectés.
Ouvrir Admin Control → Données de marché.
Filtrer sur les devises.
Sélectionner la paire concernée, par exemple EURUSD.
Lancer la collecte des données historiques.
Patienter quelques minutes, puis recharger le portefeuille.
Le cas GBp Pour un titre coté à Londres en pence (GBp), collectez aussi la paire de la devise parente GBP. Les montants en pence valent un centième de livre : une erreur de devise sur ces titres multiplie la valeur par cent.
17. Contrôler la qualité des données
La performance affichée n’est pas un bon indicateur de qualité : elle dépend de trop de paramètres. Les contrôles fiables sont ailleurs :
Contrôle
Comment
Ce qu’il révèle
Quantité finale par actif
Comparer avec le relevé du courtier
Activité manquante ou en double
Liquidités par compte
Comparer avec le solde espèces
Dividende ou vente non saisi
Valeur totale d’un compte
Comparer avec la valorisation du courtier
Mauvais actif ou mauvaise devise
Écran X-ray
Lire les alertes
Concentration inattendue, frais anormaux
Données de marché
Rechercher les actifs sans cours
Symbole non reconnu par la source
18. Sauvegarder
La donnée critique est la base PostgreSQL. Redis n’est qu’un cache et se reconstruit seul. Le fichier .env doit accompagner chaque sauvegarde : sans lui, impossible de reconnecter les utilisateurs.
#!/usr/bin/env bash
# /opt/stacks/ghostfolio/backup-ghostfolio.sh
set -Eeuo pipefail
STACK=/opt/stacks/ghostfolio
DEST=/srv/backups/ghostfolio
STAMP=$(date +%Y%m%d-%H%M%S)
RETENTION_DAYS=30
cd "$STACK"
set -a; . ./.env; set +a
mkdir -p "$DEST"
docker compose exec -T postgres \
pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" --format=custom \
> "$DEST/ghostfolio-db-$STAMP.dump"
tar -czf "$DEST/ghostfolio-config-$STAMP.tar.gz" compose.yaml .env
chmod 600 "$DEST"/ghostfolio-*-"$STAMP".*
# Vérification minimale : le dump doit être lisible
docker compose exec -T postgres pg_restore --list < "$DEST/ghostfolio-db-$STAMP.dump" > /dev/null \
&& echo "Sauvegarde valide : ghostfolio-db-$STAMP.dump"
find "$DEST" -type f -mtime +"$RETENTION_DAYS" -delete
Double sécurité En complément, exportez régulièrement vos activités en JSON depuis la page Activités. Ce fichier est indépendant de la version de la base et permet de reconstruire un portefeuille sur n’importe quelle instance Ghostfolio.
Restaurer le .env d’origine avant de démarrer la stack.
Démarrer PostgreSQL et Redis, puis restaurer le dump.
Démarrer Ghostfolio : les migrations éventuelles s’appliquent.
Se connecter avec le jeton de sécurité habituel.
Comparer quelques quantités et la valeur totale avec l’état connu.
Attention Testez la restauration au moins une fois sur une stack temporaire, avec un autre nom de projet Compose et sans publication Traefik. Une sauvegarde jamais restaurée n’est qu’une hypothèse.
20. Mettre à jour
Lire le CHANGELOG.md du dépôt pour repérer les changements importants.
Lancer le script de sauvegarde.
Modifier le tag de l’image si la version est figée.
Exécuter docker compose pull && docker compose up -d.
Les mises à jour appliquent parfois des migrations du schéma PostgreSQL. Revenir à l’ancienne image sans restaurer la base peut alors échouer : c’est pourquoi la sauvegarde précède toujours la mise à jour. Pour PostgreSQL lui-même, un changement de version majeure (15 vers 16, par exemple) nécessite un export et une réimportation, pas un simple changement de tag.
21. Pièges fréquemment rencontrés
Perdre ACCESS_TOKEN_SALT ou le jeton de sécurité administrateur.
Modifier POSTGRES_PASSWORD après l’initialisation de la base.
Confondre plateforme et compte, puis devoir tout réorganiser.
Choisir un actif uniquement par son ticker, sur la mauvaise place de cotation.
Saisir les frais à la fois dans l’achat et dans une activité FEE.
Créer un achat pour un simple transfert de crypto entre ses propres portefeuilles.
Réimporter un fichier corrigé sans supprimer le premier import.
Sauvegarder Redis et oublier PostgreSQL.
Monter PostgreSQL d’une version majeure en changeant simplement le tag.
22. Checklist de validation
Les trois conteneurs sont healthy.
Aucun port n’est publié sur l’hôte ; PostgreSQL et Redis sont sur un réseau interne.
Le jeton administrateur et le fichier .env sont sauvegardés de manière chiffrée.
L’inscription publique est désactivée.
Chaque enveloppe est un compte distinct, rattaché à la bonne plateforme.
Les quantités finales correspondent aux relevés.
Aucun actif n’apparaît sans cours dans les données de marché.
La sauvegarde quotidienne fonctionne et une restauration a été testée.
Ghostfolio apporte une vision consolidée que ni les banques ni les courtiers ne fournissent, parce que chacun ne voit que sa propre partie du patrimoine. Sa valeur dépend toutefois entièrement de la qualité des données : une modélisation claire des plateformes et des comptes, des imports réalisés par petits lots, des quantités vérifiées et une sauvegarde testée transforment un tableau de bord séduisant en véritable outil de décision.