feat: gateway sécurisé, miroir de schéma automatique et sync incrémentale

- Schéma Hostinger recopié automatiquement depuis PG Debian (colonnes, PK,
  index) : plus d'init.sql maintenu à la main (corrige articles.artcentrale,
  mvtart.no_id et les 12 tables manquantes)
- Stratégies : full transactionnel (DELETE + INSERT, garde-fou de volume) et
  window (signature mensuelle + 10 derniers jours) pour les grosses tables
- Attente de la fin de la sync Debian (_run), pg_try_advisory_lock,
  cron 07:30 Europe/Paris, force honoré, alertes webhook
- Dashboard : basic auth, CSP sans script inline, plus d'innerHTML,
  port 3002 non publié (accès via Nginx Proxy Manager)
- Secrets hors du compose (.env), frps épinglé 0.71.0 avec TLS forcé,
  allowPorts et additionalScopes
- Suppression de sync.sh, tables.js, utils.js, init.sql ; README de déploiement

L'ancien mot de passe de la base `post` figure dans l'historique git :
il doit être changé sur le serveur (voir README).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5.5 committed 2026-10-17 11:41:29 +02:00
1 parent f8575b9ff2
commit ea084034b9
26 files changed
+2767 -922

No files matched your search

+14 -4
View File
@@ -1,13 +1,23 @@
{
"name": "ff-sync-hostinger",
"version": "1.0.0",
"description": "Sync nightly PG Debian → PG Hostinger",
"version": "2.0.0",
"private": true,
"description": "Miroir PG Debian → PG Hostinger (schéma automatique, copie transactionnelle/incrémentale)",
"main": "index.js",
"license": "ISC",
"type": "commonjs",
"engines": {
"node": ">=22"
},
"scripts": {
"start": "node index.js",
"sync": "node index.js --once",
"sync:force": "node index.js --force",
"test": "node --test test/*.test.js"
},
"dependencies": {
"express": "^5.1.0",
"node-cron": "^3.0.3",
"pg": "^8.13.3"
"node-cron": "^4.6.0",
"pg": "^8.16.0"
}
}