Héberger Listmonk sur un VPS infogéré : vos newsletters sur votre serveur

Héberger Listmonk sur un VPS infogéré, c'est garder vos listes d'abonnés et vos campagnes sur une machine à vous, que nos équipes tiennent à jour et supervisent jour et nuit. Listmonk est un logiciel libre sous licence AGPL-3.0. Ce guide suit sa documentation officielle : la version à choisir, Docker Compose, PostgreSQL, HTTPS, l'envoi par SMTP, les rebonds, le consentement, les sauvegardes et les mises à jour.

Simon Vasconcelos Lee Par Publié le 12 novembre 2026Lecture : 13 minutes

Tous les guides

L'essentiel

  1. La licence AGPL-3.0 permet d'utiliser Listmonk en entreprise sans licence à acheter ; si vous le modifiez, vos utilisateurs à distance doivent pouvoir obtenir le code source de votre version.
  2. Installez la version stable 6.2.0 avec une étiquette Docker fixe : la version 7, affichée en tête sur GitHub, est encore une bêta.
  3. Docker Compose lance Listmonk et PostgreSQL. Publiez le port 9000 en local, servez-le en HTTPS derrière un proxy inverse et renseignez sa « Root URL ».
  4. Listmonk envoie par les serveurs SMTP que vous configurez : pour un envoi en nombre, prenez un service d’envoi spécialisé en 587, avec SPF, DKIM et DMARC sur votre domaine.
  5. Préférez le double opt-in, activez le traitement des rebonds, et exportez la base avec pg_dump avant chaque mise à jour.

Ce que fait Listmonk

Listmonk gère vos listes de diffusion et vos newsletters depuis une interface web. C'est un programme unique, écrit en Go, dont PostgreSQL est la seule dépendance. Ses listes sont à sens unique : vous écrivez à vos abonnés, et il ne s'agit pas d'une liste de discussion entre eux.

Ce que permet la licence AGPL-3.0

Listmonk est publié sous licence GNU AGPL version 3. Vous pouvez l'utiliser, y compris en entreprise, et envoyer vos campagnes comme celles de vos clients, sans licence à acheter. Reste le coût du serveur et celui de votre service d'envoi.

L'article 13 ajoute une condition propre à l'AGPL : si vous modifiez le programme, votre version doit proposer clairement à tous ceux qui s'en servent à distance, par le réseau, d'obtenir son code source, gratuitement. Si vous distribuez des copies, les obligations de partage du code de la licence s'appliquent aussi. Faire tourner Listmonk sans le modifier ne déclenche pas cet article.

Quelle version de Listmonk installer ?

Un point à connaître avant de commencer. Sur GitHub, l'étiquette « Latest » désigne en ce moment la v7.0.0-beta.2 du 10 novembre 2026, que le projet présente lui-même comme une bêta. La dernière version stable est la v6.2.0, qui porte des correctifs de sécurité sur les permissions. Au 11 novembre 2026, l'image Docker latest désigne cette v6.2.0.

VersionImage DockerÉtat
v6.2.0listmonk/listmonk:v6.2.0Stable : celle de ce guide
v7.0.0-beta.2listmonk/listmonk:betaBêta : à essayer sur une copie, avec une sauvegarde
nightlylistmonk/listmonk:nightlyNon testée, selon le projet : à vos risques

La version 7 remplace toute l'interface d'administration, change certaines de ses adresses, fait du réglage app.from_email une liste d'adresses et modifie des clés de traduction, ce qui touche les modèles personnalisés. Lisez ses notes de version avant d'y passer.

Le fichier Compose du projet lance --upgrade --yes à chaque démarrage : une nouvelle image migre la base sans vous demander. Or une base migrée ne se relit pas avec une version plus ancienne, et revenir en arrière impose de restaurer une sauvegarde. Avec une étiquette fixe, comme v6.2.0, le changement de version reste votre décision.

L'installation avec Docker Compose

Le projet recommande Docker Compose : son fichier lance Listmonk et PostgreSQL ensemble. Sur un serveur où Docker est installé, créez un dossier et récupérez ce fichier :

Terminal
mkdir listmonk
cd listmonk
curl -LO https://github.com/knadh/listmonk/raw/master/docker-compose.yml

Le projet demande d'adapter ce fichier à votre environnement. Voici les seules lignes à changer, le reste ne bouge pas :

docker-compose.yml, les lignes à modifier
x-db-credentials: &db-credentials
  POSTGRES_USER: &db-user listmonk
  POSTGRES_PASSWORD: &db-password un-mot-de-passe-long
  POSTGRES_DB: &db-name listmonk

services:
  app:
    image: listmonk/listmonk:v6.2.0
    ports:
      - "127.0.0.1:9000:9000"
    hostname: listmonk.example.com

Lancez ensuite les services, en créant le compte Super Admin d'avance. Ces deux variables ne servent qu'au premier lancement, et sans elles le compte se crée à la première visite de l'interface : autant qu'il existe avant d'ouvrir votre domaine.

Terminal
LISTMONK_ADMIN_USER=votre-identifiant LISTMONK_ADMIN_PASSWORD=votre-mot-de-passe docker compose up -d

Sans Docker : le binaire

Listmonk tourne aussi en programme seul, à côté de votre propre serveur PostgreSQL, en version 12 ou plus, où la base est déjà créée.

  1. Téléchargez l'archive de la v6.2.0 sur la page des versions du projet, par exemple listmonk_6.2.0_linux_amd64.tar.gz, en évitant la bêta affichée en tête, et extrayez le binaire.
  2. Générez le fichier de configuration, puis renseignez les accès à la base dans config.toml.
  3. Installez les tables, puis lancez Listmonk.
Terminal
./listmonk --new-config
./listmonk --install
./listmonk

Par défaut, config.toml écoute sur localhost:9000, ce qui convient derrière un proxy inverse. Le dépôt fournit un fichier de service listmonk@.service pour systemd.

La taille du serveur

Le site du projet cite une instance de production qui envoie une campagne de plus de 7 millions d'e-mails avec une fraction d'un cœur de processeur et un pic de 57 Mo de mémoire. Il ne publie ni minimum ni chiffre pour PostgreSQL, dont le volume grandit avec vos abonnés, vos ouvertures et vos clics. Sur un VPS infogéré, décrivez-nous votre usage et nous vous recommandons la taille qui convient.

HTTPS et le proxy inverse

Vos abonnés cliquent sur des liens qui pointent vers votre instance : désinscription, confirmation, suivi des clics. Elle se sert donc en HTTPS sur son propre nom de domaine. Créez les enregistrements A et AAAA de ce nom vers votre serveur, où les visiteurs arrivent sur les ports 80 et 443. La documentation de Listmonk laisse le choix du proxy, voici deux configurations courantes.

Avec Caddy

Caddy obtient et renouvelle seul le certificat :

Caddyfile
listmonk.example.com {
    reverse_proxy 127.0.0.1:9000
}

Avec Nginx et Certbot

Nginx refuse par défaut les requêtes de plus de 1 Mo, avec une erreur 413. Pour importer un fichier d'abonnés ou des images, relevez cette limite à la mesure de vos fichiers :

Bloc Nginx
server {
    listen 80;
    listen [::]:80;
    server_name listmonk.example.com;
    client_max_body_size 100m;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Certbot pose ensuite le certificat Let’s Encrypt et la redirection vers HTTPS, puis renouvelle le certificat de lui-même :

Terminal
sudo certbot --nginx -d listmonk.example.com

Les premiers réglages

Connectez-vous sur https://listmonk.example.com/admin, puis ouvrez « Settings » :

Ce qui reste public, ce qui peut se fermer

Pour filtrer l'accès, par adresse IP ou par un proxy d'authentification, la documentation partage ainsi les routes :

RoutesRôleAccès
/admin/*, /api/*, /webhooks/bounceL'administration, son API et le webhook de rebonds internePrivé
/subscription/*, /public/*Les pages d'abonnement et leurs fichiersPublic
/link/*, /campaign/*Le suivi des liens et le pixel de suiviPublic
/webhooks/service/*Les rebonds envoyés par votre service d'envoiPublic
/uploads/*Les images de vos e-mailsPublic

L'envoi : Listmonk passe par vos serveurs SMTP

Listmonk prépare et cadence vos e-mails, puis les confie aux serveurs SMTP que vous déclarez dans « Settings », « SMTP ». Il ne les livre pas lui-même aux boîtes de vos abonnés : la qualité de la livraison dépend donc de ce serveur, de votre domaine et de vos listes.

Pour un envoi en nombre, choisissez un service d'envoi spécialisé : il porte la réputation de vos envois et les signatures de votre domaine, et sait remonter les rebonds. Depuis un VPS Simafri, l'envoi passe par un relais SMTP authentifié, sur le port 587 : ici, celui de ce service.

Pour vous repérer, la documentation de Listmonk décrit les rebonds d'Amazon SES, d'Azure Communication Services, de SendGrid, de Postmark, de Forward Email et de Lettermint. Comparez-les selon votre volume et vos destinataires.

RéglageValeurCe que vous vérifiez
HostL'adresse SMTP de votre serviceRemplace la valeur d’exemple fournie
Port587Les préréglages de l’écran proposent souvent un autre port : repassez sur 587
TLSSTARTTLSVa de pair avec le port 587
Auth protocolCelui de votre service, souvent LOGINAvec l’identifiant et le mot de passe SMTP du service

Cliquez ensuite sur « Test connection » : Listmonk envoie un message d'essai et affiche l'erreur du serveur si l'envoi échoue. Vous pouvez déclarer plusieurs serveurs, choisir l'un d'eux par campagne, ou router les envois selon l'adresse ou le domaine d'expédition.

Le débit

Réglez-le dans « Settings », « Performance », sous la limite de votre service :

Un message qui échoue est retenté selon le réglage « Retries », sur d'autres connexions du serveur. S'il échoue encore, Listmonk le note en erreur et passe au suivant : surveillez ces erreurs pendant une grosse campagne.

Délivrabilité, désinscription et consentement

Héberger l'application vous laisse maître de ces sujets, et ce sont eux qui décident si vos e-mails arrivent.

SPF, DKIM et DMARC

Envoyez depuis une adresse de votre domaine, et publiez dans sa zone DNS les enregistrements SPF et DKIM que votre service d'envoi vous donne, avec un enregistrement DMARC. Google demande les trois aux expéditeurs de plus de 5 000 messages par jour vers des comptes Gmail, avec un domaine d'expédition aligné sur SPF ou DKIM, la désinscription en un clic pour les messages marketing, et un taux de signalement en spam sous 0,30 %, idéalement sous 0,10 %.

La désinscription

Le consentement de vos destinataires

Listmonk applique le type de liste que vous choisissez. Sur une liste en simple opt-in, un abonné ajouté sans confirmation reçoit quand même vos campagnes. Sur une liste en double opt-in, il reçoit d'abord un e-mail de confirmation, et seuls les abonnés confirmés reçoivent vos campagnes. C'est le choix qui protège le mieux votre réputation d'envoi et qui garde une trace claire de l'accord.

Les règles dépendent du pays de vos destinataires. En France, par exemple, la CNIL demande le consentement préalable des particuliers, par une action positive comme une case non pré-cochée, avec une exception pour vos clients sur des produits ou services similaires. Entre professionnels, la prospection peut reposer sur l'intérêt légitime si elle concerne leur métier. Dans tous les cas, chaque message identifie l'expéditeur et offre un moyen simple de refuser les suivants.

Écrivez seulement à des personnes qui attendent vos messages. Une liste achetée ou ancienne fait monter les rebonds et les signalements en spam, et c'est votre domaine qui en porte les conséquences.

Le suivi des ouvertures et des clics

Le pixel de suivi et le suivi des clics touchent à la vie privée, et la documentation demande de les utiliser dans le respect de règles comme le RGPD. Par défaut, ce suivi n'est pas relié à chaque abonné : l'option « Individual subscriber tracking » le relie, et « Disable tracking » le coupe entièrement, dans « Settings », « Privacy ».

Les rebonds

Continuer d'écrire à une adresse qui rejette vos messages abîme votre réputation d'envoi. Le traitement des rebonds est désactivé au départ : activez-le dans « Settings », « Bounces », puis choisissez l'une de ces deux voies.

Pour une boîte dédiée, déclarez-la comme adresse de retour dans « Settings », « SMTP », « Custom headers » :

En-têtes personnalisés
[
  {"Return-Path": "your-bounce-inbox@example.com"}
]

Les réglages de départ sont ceux que la documentation donne pour SES, et ils forment une bonne base :

Type de rebondNombreAction
Soft (léger)2None : aucune
Hard (définitif)1Blocklist : l'adresse est bloquée
Complaint (signalement en spam)1Blocklist : l'adresse est bloquée

PostgreSQL, la seule dépendance

Listmonk demande PostgreSQL 12 ou plus. Le fichier Compose apporte postgres:17-alpine, avec ses données dans le volume Docker listmonk-data. Abonnés, campagnes, modèles, statistiques et la plupart des réglages y vivent ; seuls les accès à la base et l'adresse d'écoute restent dans la configuration.

Pour viser un serveur PostgreSQL existant, modifiez les variables LISTMONK_db__host, LISTMONK_db__port, LISTMONK_db__user, LISTMONK_db__password et LISTMONK_db__database du service app.

Listmonk est conçu pour de grandes listes. À mesure que la base grandit, c'est elle qui peut ralentir l'interface : avec des millions d'abonnés, le tableau de bord et les compteurs peuvent mettre des dizaines de secondes à s'afficher. Le projet conseille alors deux gestes :

Terminal, dans le dossier du docker-compose.yml
docker compose exec db psql -U listmonk -d listmonk -c 'VACUUM ANALYZE;'

Sauvegardes et mises à jour

Deux éléments font votre instance : la base PostgreSQL et le dossier uploads, si vos images restent sur le disque. pg_dump produit un export cohérent sans arrêter Listmonk ni bloquer les autres accès à la base :

Terminal, dans le dossier du docker-compose.yml
docker compose exec -T db pg_dump -U listmonk listmonk > listmonk-$(date +%F).sql
tar -czf listmonk-uploads-$(date +%F).tar.gz uploads

Pour restaurer, arrêtez Listmonk, videz la base puis rechargez l'export. Comme le précise la documentation, ce geste efface la base en place :

Terminal
docker compose stop app
docker compose exec db psql -U listmonk -d listmonk -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;'
docker compose exec -T db psql -U listmonk -d listmonk < listmonk-2026-11-01.sql
docker compose start app

Mettre à jour

  1. Lisez les notes de la nouvelle version : Listmonk vous signale les nouvelles versions dans son interface, et certaines portent des correctifs de sécurité.
  2. Exportez la base, comme le demande le projet avant toute mise à jour.
  3. Changez l’étiquette de l’image dans docker-compose.yml.
  4. Lancez les commandes de la documentation. Le fichier Compose migre la base au démarrage.
Terminal
docker compose down app
docker compose pull
docker compose up app -d

Avec le binaire, arrêtez Listmonk, remplacez le binaire, lancez ./listmonk --upgrade, puis relancez-le. Pour revenir à une version antérieure, restaurez l'export pris avant la mise à jour, puis remettez l'ancienne étiquette.

Qui fait quoi sur un VPS infogéré

L'auto-hébergement demande de tenir le serveur en plus de l'application. Sur un VPS infogéré, nos équipes prennent le serveur en main et suivent votre instance de manière proactive ; Listmonk reste votre logiciel, avec ses réglages, vos listes et vos campagnes.

SujetNos équipesVous
Le serveurMises à jour du système et de la sécurité, interventions sur le serveur comprisesLe moment qui convient à votre activité
La supervisionServeur suivi 24 h/24 et 7 j/7, avec intervention sans attendre votre appelLe suivi de vos campagnes et de vos rebonds
ListmonkSuivi proactif : erreurs, lenteurs et espace disque repérés, correction recommandéeSon installation, ses mises à jour et ses réglages, que vous appliquez, vous ou votre assistant IA
L’envoiUn serveur qui joint votre relais SMTP sur le port 587Votre service d’envoi, vos enregistrements DNS, vos listes et le consentement de vos destinataires
Les sauvegardesChaque nuit, chiffrées et gardées hors de la machine ; restauration compriseLa demande de restauration, et votre export avant chaque mise à jour
La migrationVotre serveur actuel migré, offertLe moment de la bascule

Si vous préférez que nos équipes interviennent dans l'application elle-même, cette prestation se facture à l'heure ou au forfait, avec un chiffrage communiqué avant l'intervention.

Listmonk, sur un serveur tenu pour vous

Avec un VPS infogéré Simafri, nos équipes tiennent à jour le serveur de votre instance Listmonk, le surveillent jour et nuit et interviennent sans attendre votre appel ; elles suivent aussi votre instance de manière proactive et vous recommandent les corrections utiles, que vous appliquez, vous ou votre assistant IA. Les sauvegardes sont chiffrées chaque nuit et gardées hors de la machine, leur restauration est comprise, et la migration de votre serveur actuel est offerte.

Découvrir les VPS infogérés

Questions fréquentes

Listmonk est-il gratuit pour une entreprise ?

Oui. Listmonk est sous licence AGPL-3.0 : vous pouvez l'utiliser en entreprise sans licence à acheter. Si vous le modifiez, vos utilisateurs à distance doivent pouvoir obtenir le code source de votre version. Restent le coût du serveur et celui de votre service d'envoi.

Quelle version de Listmonk installer ?

La v6.2.0, dernière version stable au 11 novembre 2026. La v7.0.0-beta.2, affichée en tête sur GitHub, est une bêta. Dans Docker Compose, fixez l'image sur listmonk/listmonk:v6.2.0 : le changement de version reste alors votre décision, car une base migrée ne se relit pas avec une version plus ancienne.

Comment installer Listmonk avec Docker Compose ?

Récupérez le fichier docker-compose.yml du projet, changez le mot de passe de la base et l'étiquette de l'image, puis lancez docker compose up -d. L'interface répond sur le port 9000, avec PostgreSQL à côté. Servez-la en HTTPS derrière un proxy inverse et renseignez sa Root URL.

Quel serveur SMTP utiliser avec Listmonk ?

Listmonk envoie par les serveurs SMTP que vous configurez. Pour un envoi en nombre, prenez un service d'envoi spécialisé, en STARTTLS sur le port 587, et publiez SPF, DKIM et DMARC sur votre domaine. La documentation de Listmonk décrit par exemple les rebonds d'Amazon SES, SendGrid et Postmark.

Comment gérer les rebonds dans Listmonk ?

Activez le traitement dans Settings, Bounces, puis branchez le webhook de votre service d'envoi ou une boîte POP3 dédiée. Les réglages de départ bloquent une adresse dès un rebond définitif ou un signalement en spam.

Comment sauvegarder Listmonk ?

Exportez la base avec pg_dump, sans arrêter le service, et gardez le dossier uploads si vos images sont sur le disque. Le projet demande cet export avant chaque mise à jour, car une version antérieure ne relit pas une base déjà migrée.

Listmonk gère-t-il le consentement et la désinscription ?

Il en donne les outils : listes en double opt-in, lien de désinscription dans vos modèles, en-tête List-Unsubscribe, export et effacement des données par l'abonné. Le consentement lui-même reste à recueillir de votre côté, selon les règles du pays de vos destinataires.

Un VPS infogéré couvre-t-il Listmonk ?

Un VPS infogéré couvre le serveur : système, sécurité, supervision et sauvegardes. Nos équipes suivent aussi votre instance de manière proactive et vous recommandent les corrections utiles, que vous appliquez. Une intervention dans l'application se facture à l'heure ou au forfait.

Sources et documentation officielle

Contactez-nous