mirror of
https://github.com/R0m1k3/Apiflow-gateway.git
synced 2026-10-17 20:26:46 +02:00
- 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>
74 lines
2.5 KiB
YAML
74 lines
2.5 KiB
YAML
# Gateway Hostinger : frps (tunnel depuis le serveur Debian du magasin) + miroir PostgreSQL.
|
|
# Tous les services sont sur le réseau externe nginx_default (Nginx Proxy Manager, postgres_db…).
|
|
# Aucun secret dans ce fichier : tout vient de .env (voir .env.example) et frps.toml (voir frps.toml.example).
|
|
|
|
x-logging: &logging
|
|
driver: json-file
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
services:
|
|
|
|
frps:
|
|
# Version épinglée : frpc côté Debian doit utiliser la même (snowdreamtech/frpc:0.71.0-alpine)
|
|
image: snowdreamtech/frps:0.71.0-alpine
|
|
container_name: ff_frps
|
|
volumes:
|
|
- ./frps.toml:/etc/frp/frps.toml:ro
|
|
ports:
|
|
# Seul port publié : connexion du frpc Debian. Les ports distants 13000 (API) et
|
|
# 15432 (PostgreSQL) ne sont joignables que depuis le réseau nginx_default.
|
|
- "7000:7000"
|
|
environment:
|
|
TZ: Europe/Paris
|
|
networks:
|
|
- nginx_default
|
|
logging: *logging
|
|
restart: unless-stopped
|
|
|
|
sync:
|
|
build: ./sync
|
|
image: ff_sync_hostinger:local
|
|
container_name: ff_sync_hostinger
|
|
environment:
|
|
TZ: Europe/Paris
|
|
# Source : PostgreSQL Debian via le tunnel frps
|
|
SRC_HOST: ${SRC_HOST:-frps}
|
|
SRC_PORT: ${SRC_PORT:-15432}
|
|
SRC_DB: ${SRC_DB:?SRC_DB manquant dans .env}
|
|
SRC_USER: ${SRC_USER:?SRC_USER manquant dans .env}
|
|
SRC_PASS: ${SRC_PASS:?SRC_PASS manquant dans .env}
|
|
# Destination : PostgreSQL Hostinger
|
|
DST_HOST: ${DST_HOST:-postgres_db}
|
|
DST_PORT: ${DST_PORT:-5432}
|
|
DST_DB: ${DST_DB:?DST_DB manquant dans .env}
|
|
DST_USER: ${DST_USER:?DST_USER manquant dans .env}
|
|
DST_PASS: ${DST_PASS:?DST_PASS manquant dans .env}
|
|
# Planification et comportement
|
|
SYNC_CRON: ${SYNC_CRON:-30 7 * * *}
|
|
SYNC_TZ: ${SYNC_TZ:-Europe/Paris}
|
|
EXCLUDE_TABLES: ${EXCLUDE_TABLES:-}
|
|
WINDOW_TABLES: ${WINDOW_TABLES:-}
|
|
WINDOW_RECENT_DAYS: ${WINDOW_RECENT_DAYS:-10}
|
|
DEBIAN_WAIT_POLL_MIN: ${DEBIAN_WAIT_POLL_MIN:-2}
|
|
DEBIAN_WAIT_MAX_MIN: ${DEBIAN_WAIT_MAX_MIN:-180}
|
|
# Dashboard (sans ces deux variables : dashboard désactivé, 503)
|
|
DASHBOARD_USER: ${DASHBOARD_USER:-}
|
|
DASHBOARD_PASSWORD: ${DASHBOARD_PASSWORD:-}
|
|
# Alerte (Slack / Discord / Mattermost…) — optionnel
|
|
ALERT_WEBHOOK_URL: ${ALERT_WEBHOOK_URL:-}
|
|
# Pas de "ports:" : Nginx Proxy Manager joint ff_sync_hostinger:3002 via nginx_default
|
|
expose:
|
|
- "3002"
|
|
networks:
|
|
- nginx_default
|
|
depends_on:
|
|
- frps
|
|
logging: *logging
|
|
restart: unless-stopped
|
|
|
|
networks:
|
|
nginx_default:
|
|
external: true
|