Repository navigation
Exploitation
Tout l'état du site est dans STORAGE_DIR : la base SQLite (avec les jetons d'horodatage, les statistiques et la file Instagram), les originaux, le logo du filigrane, les fichiers de marque et les variantes. Les variantes se recalculent et peuvent être exclues de la sauvegarde. Les originaux doivent être sauvegardés à l'identique : une preuve d'antériorité ne vaut qu'avec le fichier exact qu'elle désigne.
En déploiement Docker, le service backup s'en charge chaque jour : voir Déploiement. Hors Docker : BACKUP_DIR=… npm run backup (même format que le service backup, voir Configuration), ou à la main :
sqlite3 storage/site.db ".backup 'sauvegarde/site-$(date +%F).db'"
rsync -a storage/originals storage/watermarks storage/brand sauvegarde/Pour restaurer :
- Arrêter le serveur.
- Remettre
site.db(et supprimersite.db-waletsite.db-shms'ils traînent),originals/,watermarks/etbrand/en place. - Démarrer : les variantes manquantes sont recalculées au démarrage (ou d'avance avec
npm run variants).
Le jeton Instagram est chiffré avec INSTAGRAM_TOKEN_KEY, ou à défaut avec COOKIE_SECRET : restaurer la base sur un serveur qui a une autre clé impose de reconnecter le compte Instagram.
Le serveur écrit en JSON sur la sortie standard (pino, via Fastify). Les adresses IP y sont tronquées (/24 en IPv4, /48 en IPv6) ; le code et le state OIDC et le jeton d'image Instagram sont masqués dans les URL. En Docker, les journaux sont bornés à 3 × 10 Mo par conteneur. À surveiller :
| Message | Signification |
|---|---|
connexion admin |
ouverture de session (sub) |
connexion sans le rôle admin |
tentative refusée |
connexion refusée par le fournisseur, échec de la vérification OIDC
|
connexion annulée chez Zitadel, ou réponse invalide |
OIDC_ORG_ID non défini : … |
au démarrage : définir OIDC_ORG_ID
|
variantes régénérées |
fin d'un recalcul (changed : nombre de photos) |
rendu des variantes impossible |
original illisible (photo indiquée) |
fournisseur OIDC injoignable |
Zitadel ne répond pas |
originaux horodatés |
jetons obtenus (done : nombre) |
action admin |
journal d'audit : sub, action, paramètres, statut |
erreur inattendue |
erreur serveur (le visiteur ne voit qu'un message générique) |
horodatage impossible, nouvel essai plus tard |
autorité d'horodatage injoignable ou jeton refusé |
authentification locale de test active |
ne doit jamais apparaître en production |
import de photos, photo envoyée, rendu impossible à l’import
|
imports (nombre importé / refusé, photo, fichier illisible) |
publié sur Instagram, publication Instagram impossible, jeton Instagram non renouvelé
|
file Instagram |
base de données indisponible |
/healthz répond 503 |
sauvegarde terminée, sauvegarde en échec
|
conteneur backup (même contenu que last.json) |
Les marches à suivre ponctuelles (mise à jour, chiffrement, deux facteurs, e-mails, app iPhone, demande RGPD, violation, restauration) sont dans Procédures.
| Besoin | Action |
|---|---|
| Recalculer les images |
npm run variants (-- --force pour tout) |
| Changer le nom du site | Admin → Réglages, ou SITE_NAME
|
| Retirer l'accès à quelqu'un | retirer son rôle admin dans Zitadel (effet sous 24 h) ; pour un effet immédiat, supprimer ses sessions : DELETE FROM sessions WHERE sub = '…'
|
| Déconnecter tout le monde | DELETE FROM sessions |
| Appliquer les migrations | automatique au démarrage, ou npm run migrate
|
| Symptôme | Piste |
|---|---|
Le serveur refuse de démarrer : COOKIE_SECRET
|
site « en ligne » (HTTPS ou production) : définir un secret de 32 caractères ou plus |
LOCAL_AUTH_TOKEN est réservé aux tests |
retirer cette variable en ligne |
… n'est pas un montage : les données seraient perdues |
REQUIRE_PERSISTENT_STORAGE=1 (image Docker) et /data non monté : monter le dossier de l'hôte (DATA_DIR) |
Dossier des données introuvable, erreur d'accès en écriture |
dossier absent, ou propriétaire différent de l'utilisateur du conteneur (APP_UID/APP_GID, 99:100 sur Unraid) |
/auth/login répond 503 |
OIDC non configuré (OIDC_ISSUER, OIDC_CLIENT_ID) |
| 502 à la connexion | Zitadel injoignable depuis le serveur |
| « Connexion expirée » | retour de Zitadel après plus de 10 minutes, ou cookies bloqués |
| « Trop de tentatives » (429) | limite de connexions atteinte pour cette IP : attendre 10 minutes, ou ajuster AUTH_RATE_LIMIT
|
| Image absente sur le site | photo en brouillon, ou recalcul en cours (voir le bandeau dans l'admin) |
| Filigrane dans une police inattendue | vérifier que assets/fonts/ est bien déployé |
| Photos « en attente » d'horodatage | accès sortant vers TSA_URL bloqué, ou autorité indisponible ; reprise automatique, ou bouton « Réessayer maintenant » |
Utiliser
- Visite de l'admin
- Aide de l'administration · Help (EN) · Hilfe (DE)
- Apparence et thèmes
- Filigrane et EXIF
- Preuves d'antériorité et droits
- Publication sur Instagram
Installer et configurer
Comprendre
Maintenir