Guides
Déployer avec Docker Compose
Déploiement de production sur un seul hôte avec les fichiers docker-compose.prod.yml et install.sh fournis.
Vous avez un serveur costaud et voulez faire tourner AskAIs Customer Service en 10 minutes ? C'est la voie à suivre. Convient pour moins de ~500 visiteurs simultanés ; pour une plus grande échelle, passez au guide Kubernetes.
Prérequis
- Un hôte Linux avec Docker 24+ et `docker compose` v2
- ≥ 2 vCPU, 4 Go de RAM (8 Go recommandés)
- Un domaine pointant vers l'hôte (pour le TLS via Caddy / Cloudflare / nginx)
Installation en une ligne
git clone https://github.com/singlink/singlink
cd singlink
APP_DOMAIN=chat.acme.com bash scripts/install.shLe script :
- Vérifie la présence de docker + openssl
- Génère
.env.prodavec des secrets aléatoires forts (mode 600) - Construit les trois images (web / ws / worker)
- Démarre toute la pile avec
docker compose -f docker-compose.prod.yml up -d - Exécute
prisma migrate deploydans le conteneur web
Ce qui tourne
- postgres — pgvector PG16
- redis — pub/sub + file d'attente (protégé par mot de passe)
- minio — stockage compatible S3 pour les pièces jointes
- web / ws / worker — les trois processus de l'application
- nginx — proxy inverse sur le port 8080 avec mise à niveau WS
Ajouter du TLS
Le nginx fourni termine le HTTP/1.1 sur le port 8080. Placez un proxy de terminaison TLS devant :
Caddy (le plus simple)
# /etc/caddy/Caddyfile
chat.acme.com {
reverse_proxy localhost:8080
}Cloudflare Tunnel (aucun port entrant)
cloudflared tunnel create singlink
cloudflared tunnel route dns singlink chat.acme.com
cloudflared tunnel run --url http://localhost:8080 singlinkOpérations Day-2
# Logs
docker compose -f docker-compose.prod.yml logs -f
# Restart everything
docker compose -f docker-compose.prod.yml restart
# Stop (data persists in named volumes)
docker compose -f docker-compose.prod.yml down
# Upgrade
git pull
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d --build
docker compose -f docker-compose.prod.yml exec web pnpm db:deploy
# Backups (run from cron daily)
docker compose -f docker-compose.prod.yml exec -T postgres \
pg_dump -U singlink singlink | gzip > /backups/singlink-$(date +%F).sql.gzMise à l'échelle des workers
Lancez davantage de réplicas du worker IA (Redis BullMQ gère la distribution) :
docker compose -f docker-compose.prod.yml up -d --scale worker=4Quand passer à Kubernetes
- Vous avez besoin de postgres / redis en haute disponibilité (RDS / ElastiCache gérés)
- Vous avez besoin d'autoscaling lors des pics de trafic
- Vous l'exécutez sur plusieurs régions
- L'indisponibilité d'un hôte unique est inacceptable pour votre SLA
Passez alors à Kubernetes / Helm.