P
Parsyn
/Docs
Retour à l'accueil

Auto-hebergement et deploiement

Pour les equipes qui souhaitent faire tourner la plateforme Parsyn complete sur leur propre infrastructure. Couvre la mise en place avec Docker Compose, la configuration de l'environnement, le reverse proxy et le renforcement pour la production.

L'auto-hebergement est optionnel. La plupart des utilisateurs se servent de la plateforme hebergee sur parsyn.progatis.com et y connectent leurs propres workers. Ce guide s'adresse aux organisations qui ont besoin de faire tourner l'ensemble de la plateforme en interne, generalement pour des raisons de souverainete des donnees, de conformite ou d'environnements isoles du reseau.

Ce que vous deployez

ServiceRolePort
Backend APIApplication FastAPI + serveur WebSocket8000
PostgreSQL 16Base de donnees principale (metadonnees, utilisateurs, metriques)5432
Redis 7Sessions, rate limiting, broker Celery6379
MinIOStockage objet compatible S3 (datasets, modeles, checkpoints)9000 / 9001
Celery workerTaches asynchrones (statistiques, preprocessing, notifications)N/A
FrontendDashboard Vue.js (servi par nginx)80

Les workers tournent sur des machines GPU separees et se connectent au backend via WebSocket. Ils ne font pas partie du stack Docker Compose.

Prerequis

  • Docker Engine 24+ et Docker Compose v2
  • Un serveur avec au moins 4 coeurs CPU et 8 Go de RAM
  • 50 Go+ d'espace disque (davantage pour le stockage de datasets et de modeles)
  • Un nom de domaine pointant vers votre serveur (pour le HTTPS)

Mise en place

git clone https://github.com/Progatis/parsyn.git
cd parsyn
cp .env.example .env

Editez le fichier .env avec votre configuration (voir ci-dessous), puis :

# Developpement (avec MinIO pour le S3 local)
docker compose up -d

# Production (avec le routage Traefik)
docker compose -f docker-compose.prod.yml up -d

Verification :

curl https://your-domain.com/health
# {"status": "ok"}

Variables d'environnement

Base de donnees

VariableExempleDescription
DATABASE_URLpostgresql+asyncpg://parsyn:secret@db:5432/parsynChaine de connexion PostgreSQL asynchrone.
DB_POOL_SIZE20Taille du pool de connexions.

Redis

VariableExemple
REDIS_URLredis://redis:6379/0

Stockage objet

VariableExempleDescription
S3_ENDPOINThttp://minio:9000Endpoint S3. Utilisez https://s3.amazonaws.com pour AWS.
S3_BUCKETparsyn-storageBucket pour les datasets, modeles et checkpoints.
S3_ACCESS_KEYminioadminCle d'acces S3.
S3_SECRET_KEYminioadminCle secrete S3.

Authentification

VariableDescription
JWT_SECRETCle secrete pour la signature JWT. Generez-la avec openssl rand -hex 32. Doit etre robuste en production.
JWT_ALGORITHMAlgorithme de signature. Par defaut : HS256.

Generez toujours un JWT_SECRET aleatoire pour la production. S'il est compromis, des attaquants peuvent forger des tokens d'authentification pour n'importe quel utilisateur.

Parametres de la plateforme

VariableDefautDescription
ENVIRONMENTdevelopmentDefinir a production pour la production. Affecte le CORS et le mode debug.
CORS_ORIGINSOrigines autorisees separees par des virgules (par exemple https://app.yourdomain.com).
WORKER_HEARTBEAT_TIMEOUT90Secondes avant qu'un worker soit marque comme hors ligne.
MAX_CONCURRENT_TRAININGS10Nombre maximum de jobs de fine-tuning simultanes.
MAX_UPLOAD_SIZE_BYTES10737418240Taille maximale d'upload de fichier (10 Go).

Notifications (optionnel)

ServiceVariables
EmailSMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD
SlackSLACK_WEBHOOK_URL
TelegramTELEGRAM_BOT_TOKEN
TeamsTEAMS_WEBHOOK_URL
SMSTWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_FROM_NUMBER

Facturation (optionnel)

VariableDescription
STRIPE_SECRET_KEYCle API Stripe.
STRIPE_WEBHOOK_SECRETSecret de signature des webhooks Stripe.
STRIPE_SUCCESS_URLRedirection apres un paiement reussi.
STRIPE_CANCEL_URLRedirection apres un paiement annule.

Reverse proxy (Traefik)

Le fichier Docker Compose de production inclut des labels Traefik pour le HTTPS automatique et le routage. Chaque service expose doit porter le label traefik.docker.network pour eviter des problemes de connectivite aleatoires.

Lorsqu'un container se trouve sur plusieurs reseaux Docker, Traefik peut choisir la mauvaise IP interne. Cela provoque des erreurs 502 intermittentes apres les deploiements. Definissez toujours traefik.docker.network explicitement sur chaque service expose.

# docker-compose.prod.yml (labels pertinents)
services:
  backend:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.parsyn-api.rule=Host(`api.yourdomain.com`)"
      - "traefik.http.routers.parsyn-api.tls.certresolver=letsencrypt"
      - "traefik.http.services.parsyn-api.loadbalancer.server.port=8000"
      - "traefik.docker.network=${PROXY_NETWORK:-coolify}"

Definissez PROXY_NETWORK pour correspondre a votre reseau Traefik. Valeurs courantes : coolify (Coolify PaaS), dokploy-network (Dokploy), traefik ou proxy (installation autonome).

Connecter des workers a votre instance

Les workers se connectent a votre plateforme auto-hebergee au lieu de parsyn.progatis.com :

PLATFORM_URL=wss://api.yourdomain.com/ws/worker
WORKER_ENROLLMENT_KEY=enroll_xyz789...

Gestion de la base de donnees

Le backend execute les migrations Alembic automatiquement au demarrage. Pour une migration manuelle :

# Appliquer les migrations en attente
docker compose exec backend alembic upgrade head

# Generer une migration apres modification des modeles
docker compose exec backend alembic revision --autogenerate -m "add preferences table"

# Annuler la derniere migration
docker compose exec backend alembic downgrade -1

Sauvegardes

PostgreSQL

# Export
docker compose exec db pg_dump -U parsyn parsyn > backup_$(date +%Y%m%d).sql

# Restauration
cat backup.sql | docker compose exec -T db psql -U parsyn parsyn

Stockage objet

Si vous utilisez MinIO, sauvegardez son repertoire de donnees. Avec AWS S3, activez le versioning et la replication inter-regions.

Supervision

Health checks

# Backend
curl https://api.yourdomain.com/health

# Detaille (base de donnees, Redis, S3)
curl https://api.yourdomain.com/api/health

Logs

docker compose logs -f backend
docker compose logs --tail 100 celery

Le backend produit des logs structures au format JSON. Redirigez-les vers votre systeme d'aggregation de logs (ELK, Loki, Datadog).

Metriques cles a surveiller

  • Workers actifs : Alerte si aucun pendant plus de 5 minutes.
  • Jobs bloques : En statut running sans progression depuis plus de 30 minutes.
  • Latence API : Le p95 doit rester sous 500 ms.
  • Pool de connexions base de donnees : Alerte a 80 % de DB_POOL_SIZE.
  • Espace disque : Alerte a 80 % sur le volume MinIO et les donnees PostgreSQL.

Checklist de securite pour la production

  • Generer un JWT_SECRET robuste (au moins 256 bits).
  • Changer les identifiants par defaut de MinIO.
  • Definir ENVIRONMENT=production.
  • Utiliser HTTPS pour tous les endpoints publics (Traefik + Let's Encrypt).
  • Ne pas exposer les ports de la base de donnees (5432) ni de Redis (6379) publiquement.
  • Activer la 2FA pour les comptes administrateurs.
  • Mettre en place des sauvegardes regulieres de la base de donnees.
  • Renouveler periodiquement les API keys des workers.
  • Definir TRUST_REMOTE_CODE=false sur les workers.