Procédure de migration VPS → VPS (base + documents)#131
Draft
Cyril-CB wants to merge 2 commits into
Draft
Conversation
- scripts/migration/export-data.sh : export coherent (base SQLite + documents) depuis le serveur source vers une archive .tar.gz unique - scripts/migration/import-data.sh : import sur le serveur cible avec sauvegarde de securite, generation d'un nouveau SECRET_KEY et application des migrations - docs/migration-vps.md : guide pas-a-pas (transfert, systemd, Nginx, HTTPS, verification, rollback) - README.md : lien vers le guide de migration https://claude.ai/code/session_01Rgf2WkjyUY564jBCBDRCsC
- Export/import des dossiers factures, modeles_contrats, contrats_generes, exports (en plus de documents) - Re-chiffrement automatique des parametres app_settings (SMTP, cles API, tarifs ALSH, salaire socle, options) lors du changement de SECRET_KEY : nouveau script reencrypt_settings.py ; la cle d'origine transite de facon transitoire dans l'archive et est jetee apres import - Archive creee en permissions 600 (donnees + cle sensibles), rappel de suppression apres migration - Sauvegarde de securite de chaque dossier existant avant ecrasement - Guide migration-vps.md et README mis a jour https://claude.ai/code/session_01Rgf2WkjyUY564jBCBDRCsC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contexte
L'application est aujourd'hui testée sur le serveur de test ; le centre prendra ensuite son propre VPS. Il fallait une procédure reproductible pour transférer l'intégralité d'une installation de production vers un nouveau serveur. Jusqu'ici il n'existait aucune procédure documentée ni script dédié.
Ce qui est migré
cspilot.db— copie cohérente via l'API backup SQLite (indispensable, base en mode WAL).documents/,factures/,modeles_contrats/,contrats_generes/,exports/.app_settings: config SMTP/notifications, clés API (OpenAI/Anthropic/Groq), tarifs ALSH, salaire socle, options d'affichage.Point clé : paramètres chiffrés + nouveau SECRET_KEY
Les valeurs de
app_settingssont chiffrées (Fernet) avec une clé dérivée duSECRET_KEY. Comme la cible reçoit un nouveauSECRET_KEY, ces valeurs deviendraient illisibles. La solution retenue :scripts/migration/reencrypt_settings.py) ;L'archive (base + clé) est créée en permissions
600; le script rappelle de la supprimer des deux côtés après migration.Fichiers
scripts/migration/export-data.sh(VPS source) — copie cohérente de la base + dossiers présents + clé d'origine, archive.tar.gz(SHA-256 affiché), option--stop-service.scripts/migration/import-data.sh(VPS cible) — sauvegarde de sécurité de tout existant, restauration base + dossiers, génération.env/SECRET_KEY si absent, re-chiffrement des paramètres, application des migrations de schéma.scripts/migration/reencrypt_settings.py— re-chiffrement autonome (sans contexte Flask) des valeursapp_settingsde l'ancienne vers la nouvelle clé.docs/migration-vps.md— guide pas-à-pas : pré-requis, transfert (scp + vérif SHA-256), import, reconstruction systemdcspilot+ Nginx + HTTPS (certbot), vérification, rollback.README.md— lien vers le guide.Choix de conception
backup_db.py(copie cohérente) etmigration_manager.py(schéma) ;reencrypt_settings.pyrépliqueutils._get_fernet.SECRET_KEYvalidée en amont, sans perte de paramètres grâce au re-chiffrement.Tests effectués (migration « à blanc », 2 dossiers = 2 VPS)
email_password,email_smtp_server,anthropic_api_key) avec une clé connue.bash -nOK sur les 2 scripts,py_compileOK sur le script Python.https://claude.ai/code/session_01Rgf2WkjyUY564jBCBDRCsC