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.
Par Simon Vasconcelos Lee
Publié le 12 novembre 2026Lecture : 13 minutes
pg_dump avant chaque mise à jour.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.
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.
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.
| Version | Image Docker | État |
|---|---|---|
| v6.2.0 | listmonk/listmonk:v6.2.0 | Stable : celle de ce guide |
| v7.0.0-beta.2 | listmonk/listmonk:beta | Bêta : à essayer sur une copie, avec une sauvegarde |
| nightly | listmonk/listmonk:nightly | Non 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.
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 :
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 :
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
listmonk comme valeur de départ. Changez-le avant le premier lancement, car l'image PostgreSQL ne lit cette variable que sur un dossier de données vide.latest, pour la raison vue plus haut.127.0.0.1 : c'est notre adaptation. Le fichier du projet publie le port 9000 sans limite d'adresse, et limite déjà PostgreSQL à l'adresse locale. Traité de la même façon, Listmonk s'atteint par le seul proxy inverse.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.
LISTMONK_ADMIN_USER=votre-identifiant LISTMONK_ADMIN_PASSWORD=votre-mot-de-passe docker compose up -d
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.
listmonk_6.2.0_linux_amd64.tar.gz, en évitant la bêta affichée en tête, et extrayez le binaire.config.toml../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.
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.
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.
Caddy obtient et renouvelle seul le certificat :
listmonk.example.com {
reverse_proxy 127.0.0.1:9000
}
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 :
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 :
sudo certbot --nginx -d listmonk.example.com
Connectez-vous sur https://listmonk.example.com/admin, puis ouvrez « Settings » :
https://listmonk.example.com. Listmonk en tire les liens de désinscription, de confirmation et de suivi de vos e-mails. Sa valeur de départ, http://localhost:9000, ne fonctionnerait pas chez vos abonnés./listmonk/uploads, le dossier que le fichier Compose monte sur le serveur.Pour filtrer l'accès, par adresse IP ou par un proxy d'authentification, la documentation partage ainsi les routes :
| Routes | Rôle | Accès |
|---|---|---|
/admin/*, /api/*, /webhooks/bounce | L'administration, son API et le webhook de rebonds interne | Privé |
/subscription/*, /public/* | Les pages d'abonnement et leurs fichiers | Public |
/link/*, /campaign/* | Le suivi des liens et le pixel de suivi | Public |
/webhooks/service/* | Les rebonds envoyés par votre service d'envoi | Public |
/uploads/* | Les images de vos e-mails | Public |
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églage | Valeur | Ce que vous vérifiez |
|---|---|---|
| Host | L'adresse SMTP de votre service | Remplace la valeur d’exemple fournie |
| Port | 587 | Les préréglages de l’écran proposent souvent un autre port : repassez sur 587 |
| TLS | STARTTLS | Va de pair avec le port 587 |
| Auth protocol | Celui de votre service, souvent LOGIN | Avec 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.
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.
Héberger l'application vous laisse maître de ces sujets, et ce sont eux qui décident si vos e-mails arrivent.
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 %.
{{ UnsubscribeURL }} dans le pied de votre modèle. Ce lien mène à la gestion des préférences et à la désinscription.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 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 ».
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.
https://listmonk.example.com/webhooks/service/ses, le dernier mot changeant selon le service. Cette adresse doit rester publique.Pour une boîte dédiée, déclarez-la comme adresse de retour dans « Settings », « SMTP », « Custom headers » :
[
{"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 rebond | Nombre | Action |
|---|---|---|
| Soft (léger) | 2 | None : aucune |
| Hard (définitif) | 1 | Blocklist : l'adresse est bloquée |
| Complaint (signalement en spam) | 1 | Blocklist : l'adresse est bloquée |
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 :
VACUUM ANALYZE sur une grande base, par exemple chaque semaine. La commande bloque les requêtes le temps de son passage, en général quelques secondes.docker compose exec db psql -U listmonk -d listmonk -c 'VACUUM ANALYZE;'
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 :
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 :
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
docker-compose.yml.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.
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.
| Sujet | Nos équipes | Vous |
|---|---|---|
| Le serveur | Mises à jour du système et de la sécurité, interventions sur le serveur comprises | Le moment qui convient à votre activité |
| La supervision | Serveur suivi 24 h/24 et 7 j/7, avec intervention sans attendre votre appel | Le suivi de vos campagnes et de vos rebonds |
| Listmonk | Suivi proactif : erreurs, lenteurs et espace disque repérés, correction recommandée | Son installation, ses mises à jour et ses réglages, que vous appliquez, vous ou votre assistant IA |
| L’envoi | Un serveur qui joint votre relais SMTP sur le port 587 | Votre service d’envoi, vos enregistrements DNS, vos listes et le consentement de vos destinataires |
| Les sauvegardes | Chaque nuit, chiffrées et gardées hors de la machine ; restauration comprise | La demande de restauration, et votre export avant chaque mise à jour |
| La migration | Votre serveur actuel migré, offert | Le 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.
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.
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.
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.
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.
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.
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.
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.
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 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.
Simafri
Parlons de votre projet
Dites-nous en deux mots ce qu'il vous faut : on revient vers vous rapidement.
Merci ! Votre demande a bien été envoyée. Nous vous répondrons rapidement.
Vous préférez l'email ? Écrivez-nous à support@simafri.com.