Cette page explique l’architecture de Paylood pour comprendre ce qui se passe à chaque déploiement.
Vue d’ensemble
┌─────────────────────┐ SSH (port 22) ┌──────────────────────┐
│ Paylood Hub │ ────────────────▶ │ Votre VPS │
│ (API + Dashboard) │ │ ├─ Docker Engine │
│ │ │ ├─ Traefik / Caddy │
│ ─ Git OAuth │ webhook push │ ├─ Conteneurs app │
│ ─ Queue BullMQ │ ◀──────────────── │ └─ Volumes data │
│ ─ PostgreSQL/Redis │ │ │
└─────────────────────┘ └──────────────────────┘
- Paylood Hub : l’API NestJS, la file de jobs (BullMQ/Redis) et le tableau de bord.
- Vos VPS : les serveurs que vous possédez. Paylood n’y installe aucun agent — tout se fait par SSH + Docker.
- Internet : webhooks Git, domaines et SSL passent par les proxies.
Le cycle de vie d’un déploiement
- Déclenchement : push Git (webhook) ou bouton Deploy.
- Job en file : un job
deployest poussé dans la queue Redis (BullMQ). - Clone : le dépôt est cloné à la branche/commit ciblé dans un dossier temporaire.
- Génération : Paylood produit le Dockerfile et le
.env.productionselon la stack détectée. - Upload : les fichiers sont envoyés sur le serveur via SSH dans
/opt/paylood/projects/<projet>-<environnement>. - Proxy : si un domaine est défini, Traefik/Caddy est configuré (avec TLS).
- Build & Deploy :
docker compose upconstruit et démarre les conteneurs. - Healthcheck : Paylood vérifie que l’application répond avant de marquer le déploiement
success. - Nettoyage : les anciennes images sont retirées (sauf la précédente, conservée pour le rollback).
Détection de stack
L’analyse du dépôt détecte :
- Le framework : Node.js, PHP/Laravel, frontend statique (Vite/Next/React).
- Les services : PostgreSQL, MySQL, MongoDB, Redis, RabbitMQ.
- Le port d’écoute (via
PORT,APP_PORT,SERVER_PORT, défaut 3000). - Les monorepos : chaque service est identifié par son chemin, et le bon service est sélectionné.
Infrastructure côté serveur
Une fois le projet déployé, votre VPS contient :
/opt/paylood/projects/
└── <projet>-<environnement>/
├── docker-compose.yml
├── Dockerfile
├── .env.production
└── src/ (retiré après le build)
Le réseau Docker paylood-network interconnecte les conteneurs, et le proxy inverse (Traefik ou Caddy) route le trafic entrant.
Base de données de Paylood
L’installation utilise PostgreSQL (persistance) et Redis (files de jobs, OTP, blacklist de jetons). Les données applicatives de Paylood (projets, serveurs, variables, backups) sont stockées dans PostgreSQL ; les tokens Git sont chiffrés avant stockage.
Flux temps réel
Tout est diffusé via SSE (Server-Sent Events) :
- Statut des déploiements (
deployment.<id>.updated). - Logs de console (xterm).
- Tests de connexion SSH.
- Scan de services et analyse de dépôts.
Sécurité
- JWT avec expiration pour l’authentification.
- Chiffrement des secrets (tokens Git, clés privées) avec la clé d’encryption.
- Vérification des signatures de webhooks (HMAC) pour GitHub/Bitbucket, token pour GitLab.
- SSH uniquement (aucune ouverture de port supplémentaire sur vos VPS).
- Helmet + throttling sur l’API publique.
Pour déployer la plateforme elle-même (site, app, API, base de données), consultez le dépôt GitHub : tout est conteneurisé via Docker Compose et géré par Traefik.