← Retour au blog

Auto-héberger Unitae sur un VPS en 10 minutes

8 min de lecture

Vous voulez savoir exactement où vivent les données de votre assemblée. Pas une promesse d’un hébergeur — vous voulez vous connecter en SSH à la machine et voir la base de données vous-même. Bien. Dans dix minutes, vous aurez une instance Unitae fonctionnelle sur votre propre serveur, derrière votre propre domaine, avec toutes les fonctionnalités déverrouillées. Le code source est sur GitHub sous AGPL-3.0, et la version auto-hébergée est identique à la version gérée.

Ce dont vous avez besoin

Un VPS avec au moins 1 vCPU, 1 Go de RAM et 20 Go de stockage. Un Hetzner CX21 à environ 4 €/mois convient. Ubuntu 22.04 LTS ou Debian 12 recommandé. Un nom de domaine avec un enregistrement A, Docker et Docker Compose installés, et un fournisseur SMTP (le niveau gratuit de Resend suffit).

Sur votre machine locale, vous n’avez besoin que d’un accès SSH et d’un éditeur de texte. Tout le reste se passe sur le serveur.

Cloner et configurer

Connectez-vous en SSH, clonez le dépôt, copiez le fichier d’environnement. Définissez APP_URL (ex. https://unitae.votre-assemblee.org). Générez SESSION_SECRET avec openssl rand -hex 32. Configurez SMTP_HOST, SMTP_PORT, SMTP_USER et SMTP_PASS. DATABASE_URL et REDIS_URL sont préconfigurés pour les conteneurs Docker Compose.

# Clone the repository

git clone https://github.com/Unitae/unitae.git && cd unitae

# Copy the environment file

cp .env.example .env

# Edit .env with your values

nano .env

Démarrer Unitae

Lancez docker compose up -d pour démarrer la pile. Appliquez les migrations et initialisez les données. Unitae tourne sur le port 8080. En cas de problème, docker compose logs web affiche les journaux. Problèmes courants : DATABASE_URL mal formé ou SESSION_SECRET manquant.

docker compose up -d

docker compose exec app pnpm prisma migrate deploy

docker compose exec app pnpm prisma db seed

Unitae is running on localhost:8080

Ajouter votre domaine et TLS

Caddy est le reverse proxy recommandé — il gère automatiquement les certificats Let’s Encrypt. Créez un Caddyfile avec une ligne : votre domaine en proxy vers localhost:8080. Démarrez Caddy, pointez votre enregistrement DNS, et HTTPS est actif en quelques minutes.

Assurez-vous que les ports 80 et 443 sont ouverts dans votre pare-feu. Fermez le port 8080 au trafic externe maintenant qu’il est proxifié.

Première connexion et configuration

Naviguez vers votre domaine. L’écran de configuration vous guide pour créer votre compte administrateur et configurer votre assemblée. Parcourez la checklist : définissez la structure territoriale, invitez le préposé aux territoires et le secrétaire, créez votre première carte.

Invitez d’autres membres depuis la section Proclamateurs. Chaque invitation envoie un email avec un lien de création de compte. Les membres reçoivent un accès adapté à leur rôle.

Maintenir l’instance à jour

Mise à jour en trois étapes : git pull, docker compose up -d --build, puis migrations. Abonnez-vous aux releases GitHub pour être notifié. Pour les sauvegardes, ajoutez un cron quotidien qui exporte PostgreSQL. Conservez au moins sept jours de sauvegardes. Vous avez désormais une instance entièrement vôtre — et si vous contribuez, chaque assemblée utilisant Unitae en bénéficie.

Prêt à le faire tourner vous-même ?

14 jours gratuits. Aucune carte bancaire. Votre assemblée prête en 30 secondes.