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
| Service | Role | Port |
|---|---|---|
| Backend API | Application FastAPI + serveur WebSocket | 8000 |
| PostgreSQL 16 | Base de donnees principale (metadonnees, utilisateurs, metriques) | 5432 |
| Redis 7 | Sessions, rate limiting, broker Celery | 6379 |
| MinIO | Stockage objet compatible S3 (datasets, modeles, checkpoints) | 9000 / 9001 |
| Celery worker | Taches asynchrones (statistiques, preprocessing, notifications) | N/A |
| Frontend | Dashboard 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 .envEditez 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 -dVerification :
curl https://your-domain.com/health
# {"status": "ok"}Variables d'environnement
Base de donnees
| Variable | Exemple | Description |
|---|---|---|
DATABASE_URL | postgresql+asyncpg://parsyn:secret@db:5432/parsyn | Chaine de connexion PostgreSQL asynchrone. |
DB_POOL_SIZE | 20 | Taille du pool de connexions. |
Redis
| Variable | Exemple |
|---|---|
REDIS_URL | redis://redis:6379/0 |
Stockage objet
| Variable | Exemple | Description |
|---|---|---|
S3_ENDPOINT | http://minio:9000 | Endpoint S3. Utilisez https://s3.amazonaws.com pour AWS. |
S3_BUCKET | parsyn-storage | Bucket pour les datasets, modeles et checkpoints. |
S3_ACCESS_KEY | minioadmin | Cle d'acces S3. |
S3_SECRET_KEY | minioadmin | Cle secrete S3. |
Authentification
| Variable | Description |
|---|---|
JWT_SECRET | Cle secrete pour la signature JWT. Generez-la avec openssl rand -hex 32. Doit etre robuste en production. |
JWT_ALGORITHM | Algorithme 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
| Variable | Defaut | Description |
|---|---|---|
ENVIRONMENT | development | Definir a production pour la production. Affecte le CORS et le mode debug. |
CORS_ORIGINS | Origines autorisees separees par des virgules (par exemple https://app.yourdomain.com). | |
WORKER_HEARTBEAT_TIMEOUT | 90 | Secondes avant qu'un worker soit marque comme hors ligne. |
MAX_CONCURRENT_TRAININGS | 10 | Nombre maximum de jobs de fine-tuning simultanes. |
MAX_UPLOAD_SIZE_BYTES | 10737418240 | Taille maximale d'upload de fichier (10 Go). |
Notifications (optionnel)
| Service | Variables |
|---|---|
SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD | |
| Slack | SLACK_WEBHOOK_URL |
| Telegram | TELEGRAM_BOT_TOKEN |
| Teams | TEAMS_WEBHOOK_URL |
| SMS | TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_FROM_NUMBER |
Facturation (optionnel)
| Variable | Description |
|---|---|
STRIPE_SECRET_KEY | Cle API Stripe. |
STRIPE_WEBHOOK_SECRET | Secret de signature des webhooks Stripe. |
STRIPE_SUCCESS_URL | Redirection apres un paiement reussi. |
STRIPE_CANCEL_URL | Redirection 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 -1Sauvegardes
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 parsynStockage 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/healthLogs
docker compose logs -f backend
docker compose logs --tail 100 celeryLe 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
runningsans 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_SECRETrobuste (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=falsesur les workers.