Guide de déploiement

Certimate sur VPS : automatiser vos certificats SSL avec ACME

Déployer sur un VPS Cloud →

Tutoriel

Certimate sur VPS : automatiser vos certificats SSL avec ACME

Self-hosting6 min de lecture3 étapes

Un certificat expiré, c'est un site qui affiche une alerte rouge à chaque visiteur, une API que plus aucun client n'appelle et un lundi matin perdu à comprendre pourquoi certbot n'a pas tourné sur ce serveur-là. Certimate, un gestionnaire de certificats open source sous licence MIT, centralise tout le cycle : il obtient les certificats par ACME, les déploie sur vos serveurs, les renouvelle avant l'échéance et vous prévient quand quelque chose échoue. Ce guide l'installe avec Docker Compose sur un VPS, remplace son mot de passe d'usine, le publie en HTTPS derrière nginx, puis construit un premier flux DNS-01 et un déploiement SSH.

Sommaire· Pourquoi centraliser vos certificats1/12
  1. 01Pourquoi centraliser vos certificats
  2. 02Ce que Certimate apporte
  3. 03Certimate, certbot et Nginx Proxy Manager
  4. 04Prérequis
  5. 05Installer Certimate avec Docker Compose
  6. 06Ne laissez jamais le mot de passe d'usine actif
  7. 07Publier la console en HTTPS derrière nginx
  8. 08Premier flux : un certificat wildcard par DNS-01
  9. 09Déployer par SSH sur vos serveurs nginx
  10. 10Renouvellement planifié et alertes
  11. 11Sécurité et sauvegarde
  12. 12Installer Certimate en un clic sur ServOrbit

Pourquoi centraliser vos certificats

certbot fait très bien une chose : renouveler le certificat du serveur sur lequel il tourne. Dès que vous gérez plusieurs serveurs, un certificat wildcard partagé ou des sites clients, chaque machine devient une échéance à surveiller séparément, et une panne silencieuse ne se découvre qu'au moment où le navigateur affiche son avertissement.

La durée de vie des certificats publics raccourcit en plus d'année en année, ce qui multiplie les renouvellements. Centraliser l'émission, le déploiement et la surveillance à un seul endroit, avec un historique et des alertes, est la façon la plus sûre de ne plus jamais laisser un certificat expirer.

Ce que Certimate apporte

  • Flux visuels — demande, déploiement et notification enchaînés dans un même flux, planifié pour le renouvellement.
  • DNS-01 et HTTP-01 — wildcard et multi-domaines par DNS-01 chez plus de 70 fournisseurs, dont Cloudflare, OVHcloud et Hetzner.
  • Plusieurs autorités — Let's Encrypt, ZeroSSL, Google Trust Services, SSL.com ; clés RSA ou ECC.
  • Plus de 160 cibles de déploiement — SSH, cPanel, Nginx Proxy Manager, Proxmox VE, Kubernetes, CDN et services cloud.
  • Formats PEM, PFX et JKS — pour nginx, Apache, IIS ou une application Java.
  • Alertes — e-mail, Telegram, Slack, Discord, Matrix ou webhook à chaque échec et avant expiration.

Certimate, certbot et Nginx Proxy Manager

Faites défiler le tableau

CertimatecertbotNginx Proxy Manager
Interface webOui, flux visuelsNon, ligne de commandeOui
Plusieurs serveursOui, déploiement SSH et APINon, un par serveurNon, ses propres hôtes
Wildcard par DNS-01Oui, plus de 70 fournisseursOui, par extensionOui
Alertes d'échecOui, multicanalNon, à scripterNon
Reverse proxyNonNonOui, c'est son rôle
Historique des exécutionsOuiJournal localPartiel

Prérequis

Un VPS Ubuntu 24.04 avec 512 Mo de RAM et Docker installé suffit : Certimate consomme une vingtaine de mégaoctets. Prévoyez un sous-domaine pour la console (par exemple certs.example.com) pointé vers le VPS, et nginx en reverse proxy. Pour les flux, gardez sous la main un jeton d'API de votre fournisseur DNS et un accès SSH aux serveurs qui recevront les certificats.

Installer Certimate avec Docker Compose

  1. Préparer le répertoire et le mot de passe

    Créez le répertoire de l'application et un fichier .env qui porte le mot de passe administrateur, tiré au hasard.

    mkdir -p /opt/certimate && cd /opt/certimate
    printf 'ADMIN_PASSWORD=%s\n' "$(openssl rand -hex 16)" > .env
    chmod 600 .env
  2. Écrire le fichier compose

    Créez compose.yaml. Au premier démarrage seulement, la commande applique ADMIN_PASSWORD au compte d'usine avant de lancer le serveur ; le marqueur évite d'écraser ensuite un mot de passe changé dans l'interface. Le port n'est publié que sur la boucle locale : seul nginx y accède.

    services:
      certimate:
        image: certimate/certimate:v0.4.36
        restart: unless-stopped
        ports:
          - "127.0.0.1:8109:8090"
        environment:
          ADMIN_PASSWORD: ${ADMIN_PASSWORD:?ADMIN_PASSWORD requis}
        entrypoint: ["sh", "-c"]
        command:
          - >-
            if [ ! -f /app/pb_data/.admin-seeded ]; then
            ./certimate superuser upsert [email protected] "$$ADMIN_PASSWORD" && touch /app/pb_data/.admin-seeded || exit 1;
            fi;
            exec ./certimate serve --http 0.0.0.0:8090
        volumes:
          - certimate-data:/app/pb_data
    volumes:
      certimate-data: {}
  3. Démarrer et vérifier

    Lancez la pile. Certimate applique ses migrations au démarrage, puis la sonde de santé doit répondre.

    docker compose up -d
    docker compose ps
    curl -fsS http://127.0.0.1:8109/api/health

Ne laissez jamais le mot de passe d'usine actif

L'image publie un compte [email protected] avec le mot de passe 1234567890, documenté dans le README du projet. Une console exposée avec ces identifiants donne à n'importe qui vos jetons DNS et vos clés SSH. La commande ci-dessus le remplace avant même que le serveur n'écoute ; si vous lancez l'image autrement, changez-le avant de publier le domaine.

Publier la console en HTTPS derrière nginx

Ajoutez un bloc serveur qui proxifie vers la boucle locale. Pour amorcer, utilisez un certificat obtenu une fois par certbot ; Certimate pourra ensuite renouveler le sien comme les autres.

server {
    listen 443 ssl;
    server_name certs.example.com;
    # ssl_certificate / ssl_certificate_key : votre certificat actuel
    location / {
        proxy_pass http://127.0.0.1:8109;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }
}

Ouvrez https://certs.example.com, connectez-vous avec [email protected] et le mot de passe du fichier .env, puis changez l'e-mail et le mot de passe dans les paramètres du compte.

Premier flux : un certificat wildcard par DNS-01

Dans Accès, créez un accès Cloudflare (ou OVHcloud, Hetzner…) avec un jeton d'API limité à la permission d'édition DNS de la zone concernée. Dans Flux de travail, créez un flux : nœud de demande avec example.com et *.example.com, défi DNS-01, autorité Let's Encrypt et clé ECC.

Lancez le flux à la main : Certimate pose l'enregistrement TXT, attend sa propagation, obtient le certificat et le range dans Certificats avec sa date d'expiration. Le défi DNS-01 n'exige aucun port ouvert sur les serveurs cibles, et c'est le seul qui permet un wildcard.

Déployer par SSH sur vos serveurs nginx

Sur chaque serveur cible, créez un compte dédié qui ne peut écrire que dans le répertoire des certificats et recharger nginx :

useradd -m -s /bin/bash certdeploy
install -d -o certdeploy -m 750 /etc/ssl/certimate
echo 'certdeploy ALL=(root) NOPASSWD: /usr/sbin/nginx -t, /usr/bin/systemctl reload nginx' > /etc/sudoers.d/certdeploy

Dans Certimate, ajoutez un accès SSH par clé vers ce compte, puis un nœud de déploiement SSH après la demande : chemins /etc/ssl/certimate/example.com.pem et .key, commande sudo nginx -t && sudo systemctl reload nginx. Pointez ssl_certificate et ssl_certificate_key de vos vhosts vers ces fichiers.

Renouvellement planifié et alertes

Activez le déclencheur planifié du flux (une exécution par jour suffit : Certimate ne renouvelle que lorsque l'échéance approche) et ajoutez un nœud de notification vers Telegram, Slack ou l'e-mail. Chaque exécution garde son journal : en cas d'échec, vous savez si c'est le défi DNS, l'autorité ou le déploiement qui a cassé, et vous le savez avant l'expiration.

Sécurité et sauvegarde

La base de Certimate contient vos jetons DNS, vos clés SSH et vos clés privées : traitez la console comme un coffre. Mot de passe solide, HTTPS uniquement, jetons et comptes SSH au strict minimum de droits. Sauvegardez le volume régulièrement, et chiffrez l'archive avant de la copier hors du VPS :

cd /opt/certimate
docker compose stop
docker run --rm -v certimate_certimate-data:/data -v "$PWD":/backup alpine \
  tar czf /backup/certimate-$(date +%F).tar.gz -C /data .
docker compose start

Installer Certimate en un clic sur ServOrbit

Depuis le Marketplace de votre espace client, Certimate s'installe sur un VPS Ubuntu 24.04 en un clic : conteneur officiel, mot de passe administrateur généré et appliqué avant le premier démarrage, volume de données et reverse proxy nginx en HTTPS sur votre domaine ou sur le sous-domaine gratuit du VPS. Le mot de passe figure dans votre espace client, sur la fiche de l'application.

Vos certificats, renouvelés sans y penser

Un VPS ServOrbit Ubuntu 24.04 avec 512 Mo de RAM suffit pour Certimate. Installation en un clic depuis le Marketplace, mot de passe administrateur généré pour vous, HTTPS sur votre domaine ou sur le sous-domaine gratuit du VPS.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet