Pourquoi auto-héberger un créateur de CV
Les services SaaS de CV monétisent votre historique professionnel, limitent les modèles ou facturent le téléchargement PDF. Auto-héberger Reactive Resume inverse le modèle : vos CV, vos photos et vos exports restent dans un volume Docker sur votre VPS, exportables à tout moment via l'interface ou l'API REST, et partageables sous votre propre domaine. Aucune limite de modèles, aucun filigrane, aucune dépendance à un abonnement.
L'auto-hébergement offre aussi un contrôle total sur les données sensibles que contient un CV — coordonnées personnelles, historique d'emploi, compétences. Ces données ne transitent ni ne sont stockées chez un tiers.
Ce que vous obtenez avec un Reactive Resume auto-hébergé
- Éditeur visuel par glisser-déposer dans le navigateur — pas d'application à installer, fonctionne sur n'importe quel appareil.
- Bibliothèque de modèles professionnels compatibles ATS — plusieurs mises en page pour différents secteurs et niveaux d'expérience.
- Export PDF entièrement côté navigateur depuis v5.1.0 — plus de Chrome, Puppeteer ou Browserless côté serveur.
- URL publique du CV — partagez votre profil sur un lien lisible mis à jour en temps réel.
- Plusieurs CV par compte — déclinez des versions par poste ou par langue sans dupliquer le travail.
- REST API — créez et exportez des CV par programme pour l'intégration avec des outils RH.
- Stockage local — les téléversements (photos, images de portfolio) sont écrits dans un volume Docker, aucun bucket S3 nécessaire.
- Authentification OAuth optionnelle — connectez un compte GitHub ou Google si vous ajoutez les clés d'API correspondantes dans la configuration.
Prérequis
Un VPS ServOrbit avec Ubuntu 24.04 et au moins 1 Go de RAM. L'application Node.js consomme environ 300 Mo au repos et PostgreSQL 16 en utilise 100 à 200 Mo supplémentaires — un VPS de 1 Go suffit pour un usage personnel ou une petite équipe.
Docker et Docker Compose sont provisionnés automatiquement par AWX lors du déploiement. Un nom de domaine est requis : Reactive Resume ancre son URL d'authentification (APP_URL) dès le premier démarrage et ne peut pas fonctionner derrière une simple adresse IP.
Si vous prévoyez d'activer l'authentification par e-mail avec vérification de compte, un serveur SMTP sortant est recommandé. Sans SMTP, le lien de vérification s'affiche dans les journaux Docker — pratique en solo, moins adapté si vous ouvrez l'accès à d'autres utilisateurs.
Déployer Reactive Resume sur votre VPS
Choisir le domaine définitif avant de déployer
Reactive Resume inscrit
APP_URLdans les jetons d'authentification et les callbacks OAuth dès le premier démarrage : changer le domaine après coup casse toutes les sessions et nécessite de supprimer le volume PostgreSQL. Créez l'enregistrement DNS de type A — par exemplecv.votre-domaine.com— et attendez la propagation avant de lancer le déploiement.Déploiement en un clic depuis la marketplace ServOrbit
Ouvrez votre panneau de contrôle ServOrbit, allez dans Marketplace → Collaboration et productivité → Reactive Resume, saisissez votre domaine et cliquez sur Déployer. AWX installe Docker, génère un secret d'authentification aléatoire, configure nginx avec TLS Let's Encrypt et démarre les deux conteneurs (app + PostgreSQL) en moins de deux minutes.
Créer votre compte et vérifier votre adresse
Naviguez vers
https://cv.votre-domaine.comet cliquez sur Sign Up pour créer votre compte avec e-mail et mot de passe. Si vous n'avez pas configuré de serveur SMTP, le lien de vérification s'affiche dans les journaux Docker :docker compose logs reactive-resume | grep verify. Cliquez sur ce lien pour activer votre compte.Créer votre premier CV
Cliquez sur le bouton + pour créer un nouveau CV. Choisissez un modèle dans la bibliothèque, renseignez vos sections (Résumé, Expérience, Formation, Compétences) dans le panneau de gauche et visualisez le résultat en temps réel à droite. Cliquez sur Télécharger pour exporter un PDF — la génération est entièrement côté navigateur, sans attente.
Partager votre CV publiquement
Dans les paramètres du CV, activez CV public. Reactive Resume génère une URL partageable —
https://cv.votre-domaine.com/r/votre-nom— qui sert toujours la dernière version de votre document. Partagez ce lien dans vos candidatures plutôt que d'attacher un PDF statique que vous devrez renvoyer à chaque mise à jour.Configurer l'authentification OAuth (optionnel)
Pour permettre la connexion via GitHub ou Google, ajoutez les variables d'environnement correspondantes dans le fichier de configuration de votre déploiement :
GITHUB_CLIENT_ID,GITHUB_CLIENT_SECRET,GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET. Redémarrez ensuite les conteneurs avecdocker compose restart. Les boutons de connexion sociale apparaissent automatiquement sur la page de connexion dès que les variables sont présentes.
Le changement majeur de la v5.1.0 : PDF sans serveur d'impression
Jusqu'à la version 5.0, Reactive Resume dépendait de Browserless ou d'un Chromium headless pour générer les PDF côté serveur. Cela représentait 700 Mo à 1 Go de RAM supplémentaires et une dépendance à maintenir. Depuis la v5.1.0, la génération de PDF est réalisée par @react-pdf/renderer, une bibliothèque JavaScript qui s'exécute directement dans le navigateur de l'utilisateur. Le serveur ne voit qu'une requête de sauvegarde du document — aucun Chrome, aucun Puppeteer, aucun service d'impression n'est requis côté infrastructure. C'est ce qui ramène la pile minimale à deux conteneurs légers.
Garder le secret d'authentification en sécurité
Le déploiement ServOrbit génère automatiquement une valeur aléatoire pour SECRET_KEY. Ne réutilisez jamais une valeur prévisible ou partagée entre plusieurs instances. Si vous suspectez une compromission, régénérez cette clé et redémarrez les conteneurs : toutes les sessions actives seront invalidées, ce qui force les utilisateurs à se reconnecter — c'est l'effet attendu.
Utiliser l'API REST pour automatiser vos exports
Reactive Resume expose une API REST complète, accessible sous /api/v3. Vous pouvez créer des CV, les mettre à jour et déclencher des exports PDF par programme — utile pour intégrer la génération de CV dans un workflow RH ou un pipeline de candidature automatisé.
Pour vous authentifier, récupérez un jeton JWT via POST /api/v3/auth/login avec vos identifiants. Passez ensuite ce jeton dans le header Authorization: Bearer <token> de chaque requête.
Exemple — récupérer la liste de vos CV :
curl -s -H "Authorization: Bearer <votre-token>" \
https://cv.votre-domaine.com/api/v3/resume | jq '.[].title'La documentation complète de l'API est disponible dans le dépôt officiel.
Sauvegarde et portabilité des données
Deux volumes Docker portent l'intégralité de l'instance : reactive_resume_db pour la base PostgreSQL (comptes, CV, paramètres) et reactive_resume_data pour les fichiers téléversés (photos de profil, images de portfolio). Une sauvegarde minimale consiste à copier ces deux volumes :
docker run --rm \
-v reactive_resume_db:/data \
-v $(pwd):/backup \
alpine tar czf /backup/db.tar.gz /dataPour une exportation SQL directe : docker exec db pg_dump -U postgres postgres > backup.sql
Restaurez en montant le volume sur un conteneur PostgreSQL vierge configuré avec la même URL publique. Planifiez ces sauvegardes avec un cron quotidien ou utilisez le service de snapshot de volume de votre VPS pour une couverture automatique.
Dépannage des erreurs courantes
APP_URL incorrect après changement de domaine. Symptôme : les callbacks OAuth échouent ou le lien de vérification pointe vers l'ancien domaine. Solution : modifiez APP_URL dans la configuration, puis supprimez le volume PostgreSQL (docker volume rm reactive_resume_db) et redémarrez. Toutes les données sont perdues — planifiez ce geste avant de créer des comptes en production.
Conteneur app qui redémarre en boucle. Vérifiez les journaux avec docker compose logs reactive-resume. L'erreur la plus fréquente est une connexion PostgreSQL refusée (Connection refused to db:5432) : le conteneur app démarre avant que PostgreSQL soit prêt. Attendez 30 secondes et relancez docker compose up -d.
PDF généré avec une mise en page incorrecte. Le rendu PDF est réalisé côté navigateur par @react-pdf/renderer : il dépend du moteur de rendu de votre navigateur. Si le résultat est décalé, essayez avec un navigateur différent (Chrome ou Firefox récent). Les navigateurs anciens ou les extensions qui modifient les polices peuvent affecter le rendu.
Erreur secretOrPrivateKey must have a value au démarrage. La variable SECRET_KEY est manquante dans la configuration. Ajoutez-la avec une valeur aléatoire d'au moins 32 caractères : openssl rand -hex 32 génère une valeur convenable.
URL publique du CV inaccessible (404). Vérifiez que le CV est bien marqué comme public dans ses paramètres. Si c'est le cas, vérifiez la configuration nginx : le bloc location /r/ doit rediriger vers le frontend Next.js, pas vers l'API.