Pourquoi choisir CapRover plutôt qu'un PaaS cloud
Déployer sur un VPS brut implique de configurer manuellement Nginx, les certificats TLS, Docker et les redémarrages à chaque release. CapRover supprime cette friction : il s'appuie sur Docker Swarm pour orchestrer vos conteneurs, génère les certificats Let's Encrypt, et propose un déploiement par git push ou par image Docker pré-construite. Son catalogue « One-Click Apps » couvre WordPress, PostgreSQL, Redis, MongoDB, Ghost et plus d'une centaine d'autres services, chacun dans son propre conteneur. Là où Heroku ou Render facturent au dyno ou à l'heure de calcul, CapRover tourne sur votre VPS au prix fixe mensuel de votre serveur — c'est l'option naturelle pour les développeurs et agences qui veulent la productivité d'un PaaS sans en subir la facture variable.
Les bénéfices concrets de CapRover
- Déploiement par
git pushoucaprover deploysans reconfigurer le serveur à chaque release. - SSL Let's Encrypt automatique et renouvelé pour chaque domaine et sous-domaine applicatif.
- Catalogue One-Click : plus de 100 services (bases de données, CMS, outils DevOps) en quelques clics.
- Scaling horizontal natif via Docker Swarm : ajoutez des nœuds workers à la volée sans modifier vos apps.
- Interface web avec logs en direct, variables d'environnement, persistance de données et monitoring Netdata.
- Webhooks de build intégrables à GitHub Actions, GitLab CI ou Bitbucket pour du CI/CD complet.
- Mise à jour de CapRover depuis le panneau en un clic, sans toucher au serveur.
Prérequis matériels et réseau
CapRover réserve de la RAM pour Docker Swarm et son moteur de build. Un VPS de 2 Go de RAM et 1 vCPU suffit pour des projets personnels et quelques petites applications ; montez à 4 Go de RAM et 2 vCPU dès que vous hébergez plusieurs apps avec leurs bases de données. Prévoyez 30 Go de SSD minimum, car chaque build Docker consomme de l'espace temporaire. Un nom de domaine wildcard est fortement recommandé — par exemple *.apps.votredomaine.com — afin que CapRover génère des sous-domaines à la volée pour chaque application. Les ports 80, 443 et 3000 (panneau d'administration) doivent être ouverts. Depuis la version 1.14, CapRover requiert Docker avec une API version 1.43 minimum ; la version 1.14.1 corrige un problème de compatibilité introduit par Docker v29 qui avait élevé ce minimum à 1.44. Vérifiez votre version avec docker version | grep API avant toute mise à jour.
Installer CapRover et déployer votre première application
Lancer l'installation en une commande
Sur un Ubuntu propre sans Docker pré-installé, exécutez docker run -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover. CapRover initialise Docker Swarm et démarre son panneau d'administration sur le port 3000. L'image Docker installe tout automatiquement — aucune dépendance à préinstaller.
Configurer le domaine wildcard
Créez un enregistrement DNS de type A wildcard pointant *.apps.votredomaine.com vers l'IP de votre VPS. Dans le panneau d'administration (http://VOTRE_IP:3000), renseignez ce domaine racine. CapRover l'utilise comme suffixe pour toutes vos applications et active HTTPS via Let's Encrypt en un clic.
Installer la CLI et se connecter
Sur votre poste de développement : npm install -g caprover puis caprover login. Fournissez l'URL https://captain.apps.votredomaine.com et le mot de passe défini à l'étape précédente. La CLI mémorise la connexion pour les déploiements suivants. Si vous avez activé l'authentification à deux facteurs, utilisez un token applicatif au lieu du mot de passe.
Préparer le fichier captain-definition
Ajoutez un fichier captain-definition à la racine de votre projet. Le format v2 (recommandé) se réduit à deux lignes : { "schemaVersion": 2, "dockerfilePath": "./Dockerfile" }. Pour déployer une image Docker pré-construite plutôt que de builder depuis les sources, remplacez dockerfilePath par "imageName": "votre-image:tag". Le format v1 avec dockerfileLines reste supporté mais considéré comme legacy.
Créer l'application et déployer
Dans le panneau, créez une application nommée mon-api. Puis depuis votre dépôt Git : caprover deploy. CapRover construit l'image selon votre captain-definition, l'envoie sur Docker Swarm et expose l'application sur https://mon-api.apps.votredomaine.com. Pour un déploiement sans coupure, CapRover bascule le trafic seulement après que le nouveau conteneur répond aux health checks.
Ajouter une base de données et persister les données
Depuis l'onglet One-Click Apps, installez PostgreSQL. CapRover crée la base dans un conteneur dédié et génère les variables d'environnement (POSTGRES_PASSWORD, POSTGRES_HOST…). Reliez votre application via ces variables dans l'onglet « App Configs », puis activez un Persistent Directory dans l'onglet éponyme pour que les données survivent aux redéploiements. Les volumes sont stockés sous /var/lib/docker/volumes/captain--NOM_DU_VOLUME/_data sur l'hôte.
Intégrer CapRover dans un pipeline CI/CD GitHub Actions
CapRover expose un webhook de build par application, accessible dans l'onglet « Deployment » de chaque app. Ce webhook déclenche un déploiement complet à chaque appel HTTP POST. Pour l'intégrer à GitHub Actions, stockez trois secrets dans votre dépôt : CAPROVER_SERVER (l'URL de votre instance), APP_NAME (le nom de l'application CapRover) et APP_TOKEN (le token de déploiement affiché dans l'onglet Deployment). Une action officielle est disponible sur le GitHub Marketplace (caprover/deploy-from-github) : elle prend en charge la construction du tar de déploiement et l'envoi à CapRover en une seule étape. Exemple de job minimal : après un npm run build qui produit un dossier dist/, créez une archive contenant dist/ et votre captain-definition, puis invoquez l'action avec vos trois secrets. La combinaison webhook + GitHub Actions remplace avantageusement la CLI locale sur les équipes : un push sur main déclenche un déploiement automatique, aucune clé d'accès serveur ne circule entre les développeurs.
Passer en cluster multi-nœuds avec Docker Swarm
CapRover repose nativement sur Docker Swarm : ajouter de la capacité se fait depuis le panneau sans reconfigurer vos applications. Dans le menu « Cluster », saisissez l'IP du nouveau nœud, la clé SSH root associée et l'IP de votre nœud maître telle que visible depuis ce nouveau nœud. CapRover installe Docker sur la cible et l'intègre au Swarm. Une contrainte importante : le cluster nécessite un registre Docker privé configuré par défaut, car le nœud maître doit pouvoir pousser les images construites vers les nœuds workers. CapRover propose d'en déployer un automatiquement. Autre contrainte à connaître : les applications avec un Persistent Directory activé ne peuvent s'exécuter que sur un seul nœud (Docker Swarm ne partage pas les volumes de fichiers entre hôtes). Pour scaler une application avec état, optez pour une base de données externe ou un service de stockage objet.
Sauvegarder votre instance CapRover
CapRover propose une sauvegarde native depuis le panneau : « Settings → Export Backup ». L'archive produite contient la configuration de toutes vos applications, les variables d'environnement et les paramètres Nginx. Elle ne contient pas les données des volumes persistants. Pour sauvegarder une base de données PostgreSQL hébergée via One-Click, la méthode recommandée est pg_dump planifié par cron, avec archivage vers un stockage externe. Les volumes Docker sont accessibles sous /var/lib/docker/volumes/ ; une copie de ces dossiers, base stoppée, constitue une sauvegarde de bas niveau. Testez toujours la restauration sur un VPS de staging avant de compter sur une sauvegarde en production.
Dépannage : les erreurs les plus courantes
Voici les messages d'erreur réellement rencontrés dans les issues GitHub et les forums CapRover, avec leurs causes et correctifs.
Erreurs fréquentes et leurs correctifs
502 Bad Gatewaysur le panneau ou une app après déploiement. Cause la plus fréquente : l'application ne se lie pas au bon port. Vérifiez le champcontainerHttpPortdans App Configs (doit correspondre au port que votre app écoute). Sur les apps qui démarrent lentement, CapRover peut activer le conteneur avant qu'il ne soit prêt : augmentez le délai de health check ou ajoutez un fichierCHECKSà la racine du projet. Si le 502 touche le panneau lui-même après un redémarrage du VPS, attendez 60 secondes — le servicecaptain-captainse réinitialise au démarrage.App build failed/Build took too long. Le builder Docker a été tué par l'OOM killer (mémoire insuffisante). Ajoutez 2 Go de swap :fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile. Pour rendre le swap persistant, ajoutez/swapfile swap swap defaults 0 0dans/etc/fstab. Sur un build Node.js, passezNODE_OPTIONS=--max-old-space-size=512dans les variables d'environnement pour limiter l'empreinte mémoire.Error: minimum supported Docker API is 1.43(ou 1.44). Docker v29 a rehaussé le minimum requis et cassé les instances CapRover antérieures à 1.14.1. Mettez à jour CapRover depuis le panneau (Settings → Check for Updates) avant de mettre à jour Docker, ou inversement mettez à jour CapRover en premier si Docker est déjà en v29.Verification Failedlors de la configuration SSL. Les enregistrements DNS n'ont pas encore propagé, ou le port 80 est bloqué par un pare-feu. Vérifiez l'ouverture des ports avecufw statuset attendez la propagation DNS avecdig +short *.apps.votredomaine.com. Cloudflare en mode proxy orange bloque Let's Encrypt en HTTP-01 : passez le DNS en gris (DNS-only) pendant la génération du certificat, ou utilisez un certificat wildcard en DNS-01.caprover loginéchoue avecECONNREFUSED. Le port 3000 n'est pas accessible depuis votre poste. Vérifiezufw allow 3000côté serveur. Si vous n'avez pas de domaine captain encore configuré, pointez directement l'IP :http://VOTRE_IP:3000. Une fois le domaine racine configuré dans le panneau, l'URL CLI devienthttps://captain.apps.votredomaine.com.- Déploiement depuis GitHub en boucle infinie (restart loop). Causé par un
captain-definitionmanquant ou malformé, ou par un Dockerfile qui ne quitte pas proprement. Vérifiez les logs du build via le panneau oudocker service logs captain--mon-app. UnCMDmanquant dans le Dockerfile laisse le conteneur sortir immédiatement, ce qu'interprète CapRover comme un crash.
Sécurisez le port 3000 en le limitant à votre IP fixe : ufw allow from VOTRE_IP to any port 3000 && ufw deny 3000. Activez l'authentification à deux facteurs dans le panneau (Settings → Two-Factor Auth) et générez un token applicatif par projet pour le CI/CD — jamais le mot de passe admin dans une variable GitHub. Pour les builds lourds en RAM, dimensionnez d'abord le swap plutôt que de monter en plan : 2 Go de swap sur un VPS 2 Go de RAM suffisent pour la plupart des stacks Node/Python. Activez Netdata (disponible dans One-Click Apps) pour surveiller CPU, RAM et réseau depuis le panneau CapRover sans outil externe.
CapRover vs alternatives PaaS open source
| Critère | CapRover | Dokku | Coolify |
|---|---|---|---|
| Interface web | Oui, complète | Non (CLI only) | Oui, complète |
| Déploiement | CLI, webhook, image | `git push` | Git, Docker, image |
| Orchestration | Docker Swarm | Docker (standalone) | Docker (standalone) |
| Cluster multi-nœuds | Oui (Swarm natif) | Non | Partiel (expérimental) |
| Catalogue One-Click | 100+ apps | Plugins CLI | 50+ templates |
| RAM minimale VPS | 2 Go | 1 Go | 2 Go |
| Mises à jour en panneau | Oui | Via CLI/script | Oui |