Guide de déploiement

Héberger Mautic sur un VPS : automation marketing open-source

Déployer sur un VPS Cloud →

Tutoriel

Héberger Mautic sur un VPS : automation marketing open-source

Self-hosting9 min de lecture5 étapes

Mautic est la principale plateforme d'automatisation marketing open-source : campagnes email, lead scoring, segmentation comportementale, pages de destination, formulaires et intégrations CRM. Auto-hébergée sur un VPS, elle offre les fonctionnalités de HubSpot ou ActiveCampaign au coût du serveur — sans frais par contact, sans limite de liste, sans clause de prix croissant avec votre succès.

Sommaire· Pourquoi self-héberger Mautic plutôt que de payer un SaaS marketing1/6
  1. 01Pourquoi self-héberger Mautic plutôt que de payer un SaaS marketing
  2. 02Ce que vous obtenez avec Mautic self-hosted
  3. 03Architecture Docker de Mautic 5 : quatre conteneurs, une seule image
  4. 04Installer Mautic sur votre VPS ServOrbit
  5. 05Cas d'usage : remplacement de Mailchimp pour une PME
  6. 06Compatibilité MySQL 8 : HTTP 500 sur les rapports et le mode ONLY_FULL_GROUP_BY

Pourquoi self-héberger Mautic plutôt que de payer un SaaS marketing

Un SaaS marketing facture la seule chose que vous ne maîtrisez pas : la taille de votre liste. Mailchimp facture par palier de contacts — comptez 110 à 350 $ par mois pour 10 000 contacts, 385 à 815 $ pour 50 000, d'Essentials à Premium — et chaque palier plafonne AUSSI ce que vous avez le droit d'envoyer : 10 fois votre nombre de contacts sur Essentials, 12 fois sur Standard, 15 fois sur Premium. La liste grossit, et la facture comme le plafond se retournent contre vous. Brevo et ActiveCampaign facturent sur le même axe. (Le prix affiché en euros n'est qu'une conversion : la référence contractuelle de Mailchimp est le dollar.)

Mautic supprime cet axe. Vous payez le serveur, et rien d'autre : l'addition est la même que la base porte 5 000 contacts ou 500 000. Le palier VPS d'entrée de gamme de ServOrbit (2 vCPU, 4 Go de RAM, 50 Go de SSD, à partir de 99 DH/mois) fait tourner une pile Mautic sans se plaindre. Vos données restent sur votre infrastructure — aucun hébergeur SaaS ne les analyse pour ses propres fins.

La plateforme est publiée sous licence GPL-3.0 et se décrit comme détenue à 100 % par sa communauté : aucune société ne se tient derrière le logiciel. Concrètement, le projet est indépendant depuis qu'Acquia s'en est retiré, son hôte fiscal est l'Open Source Collective — qui détient la marque MAUTIC et les domaines pour le compte du projet — et sa conduite revient à un Mautic Council élu, lui-même désigné par une assemblée générale. Il n'y a pas non plus d'édition gratuite bridée à contourner : Mautic n'est pas la version amputée d'un produit payant. Un Mautic Cloud managé existe, mais il héberge exactement le même logiciel que celui que vous faites tourner chez vous.

Ce que vous obtenez avec Mautic self-hosted

  • Constructeur de campagnes visuel — branchements conditionnels, délais temporels et déclencheurs d'événements, sur une toile où le parcours se lit d'un coup d'œil.
  • Lead scoring — attribution de points pour les ouvertures, les clics, les visites de pages et les soumissions de formulaires, avec des seuils qui déclenchent une action.
  • Segmentation dynamique — filtres sur n'importe quel attribut de contact, réévalués à chaque passage des commandes planifiées.
  • Pages de destination et formulaires — hébergés sur votre domaine, sans dépendance externe ni script tiers chargé chez vos visiteurs.
  • REST API complète — intégration avec vos applications, votre CRM et vos outils par webhooks, dans les deux sens.
  • Licence GPL-3.0 — sans plafond de contacts, aucun frais par email, aucune clause de rétention propriétaire sur vos données.

Architecture Docker de Mautic 5 : quatre conteneurs, une seule image

Mautic 5.x adopte une architecture multi-rôle : la même image Docker (mautic/mautic:5.2.3-apache) s'instancie trois fois, chaque instance tournant sous une valeur différente de DOCKER_MAUTIC_ROLE :

- mautic_web : la façade Apache — elle sert l'assistant d'installation, puis le tableau de bord
- mautic_cron : exécute les commandes planifiées (reconstruction des segments, déclenchement des campagnes, envoi de la file, nettoyage, statistiques)
- mautic_worker : consomme la file de messages asynchrones (tracking, webhooks, notifications)

Un quatrième conteneur, MySQL 8.0, stocke les contacts, les campagnes et les événements. Les trois conteneurs Mautic partagent un même volume (mautic_data:/var/www/html) pour que la configuration écrite par l'assistant soit immédiatement visible des rôles cron et worker.

Le rôle cron est celui qu'on sous-estime. Mautic n'envoie rien depuis la requête web : une campagne publiée ne part que parce que mautic:campaigns:trigger et mautic:emails:send tournent à intervalle régulier. Arrêtez ce conteneur et l'interface continuera d'afficher la campagne comme publiée pendant que rien ne quitte le serveur — une panne qui ressemble à un problème de délivrabilité sans en être un.

PHP vit lui aussi dans l'image : Mautic 5.2 tourne sur PHP 8.1 à 8.3, et la version de PHP installée sur l'hôte n'entre pas en jeu. Côté base, les prérequis publiés par le projet sont MySQL 5.7 ou MariaDB 10.2 au minimum ; le template ServOrbit livre MySQL 8.0, ce qui a une conséquence directe sur les rapports (dernière section).

Installer Mautic sur votre VPS ServOrbit

  1. Déployer depuis le Marketplace

    Dans votre espace client ServOrbit, ouvrez Marketplace → Automatisation & Workflows → Mautic et cliquez sur Déployer. Le playbook AWX provisionne Ubuntu 24.04, installe Docker, génère le mot de passe MySQL, démarre les quatre conteneurs et configure nginx en reverse proxy sur votre domaine. Le conteneur Apache n'écoute que sur la boucle locale : il n'est jamais exposé directement à Internet.

  2. Compléter l'assistant d'installation Mautic

    Ouvrez votre domaine dans le navigateur. Mautic redirige vers l'assistant /s/setup. Renseignez l'URL du site, vérifiez la connexion à la base (déjà pré-remplie depuis l'environnement du compose), créez votre compte administrateur et validez. Soignez l'URL du site dès le premier passage : les pixels de tracking, les pages de destination et les liens de désinscription sont tous construits à partir d'elle.

  3. Configurer votre relay SMTP

    Allez dans Paramètres → Paramètres email et choisissez votre fournisseur SMTP : Amazon SES, Mailgun, Brevo (palier gratuit à 300 emails par jour) ou Postmark. Deux choses à savoir sur SES avant de bâtir un budget. D'abord, son tarif de référence est de 0,10 $ par tranche de 1 000 emails — pas « moins de » — et il se facture PAR DESTINATAIRE, pas par message : un envoi à 100 destinataires compte pour 100 emails, ce qui est précisément le régime d'une campagne Mautic. Ensuite, ce tarif est celui de la formule à la carte : un compte SES neuf démarre sur la formule Essentials, à 0,16 $ par tranche de 1 000, et c'est à vous de basculer en à-la-carte. Les pièces jointes sont facturées à part, au gigaoctet. Cliquez ensuite sur Tester l'email et confirmez la réception avant de toucher à une campagne : un relay qui échoue en silence ressemble exactement à une campagne qui n'a pas encore démarré.

  4. Créer un segment et importer vos contacts

    Dans Segments → Nouveau segment, définissez vos critères de filtrage. Dans Contacts → Importer, téléversez votre CSV et mappez les colonnes Email, Prénom et Nom vers les champs Mautic. Activez le double opt-in si votre audience est basée en UE ou au Maroc.

  5. Construire et publier votre première campagne

    Dans Campagnes → Nouvelle campagne, glissez une source (votre segment) sur le canevas, ajoutez une action Envoyer un email, définissez un délai de 24 heures, puis un email de suivi conditionnel. Publiez, et laissez les conteneurs cron et worker écouler la file d'envoi en arrière-plan.

SPF, DKIM et DMARC ne sont pas optionnels avant votre premier envoi. Sans eux, vos campagnes atterrissent en spam chez Gmail et Outlook — un problème que le relay SMTP seul ne règle pas, puisqu'il tient à ce que votre DOMAINE déclare, pas à la qualité du serveur d'envoi. Notre guide [SPF/DKIM/DMARC](/blog/spf-dkim-dmarc-delivrabilite-emails-pro) détaille la configuration DNS étape par étape.

Cas d'usage : remplacement de Mailchimp pour une PME

Une agence marketing gérant des listes pour 15 clients — 80 000 contacts au total — payait 620 €/mois à Mailchimp. Le passage à Mautic self-hosted sur un VPS de 4 Go de RAM a remplacé cette facture par le coût d'un seul serveur d'entrée de gamme, soit plus de 7 000 € retirés du budget annuel.

La migration a pris deux jours : export CSV depuis Mailchimp, import dans Mautic, puis reconstruction des automatismes dans le constructeur de campagnes. Les templates email HTML ont été importés depuis Mailchimp sans modification. La délivrabilité est restée comparable parce que Mailgun a été conservé comme relay SMTP — la réputation d'envoi suit le relay, pas la plateforme posée devant lui.

Une chose qu'un export CSV ne transporte pas, en revanche, c'est l'historique d'engagement. Les ouvertures, les clics et les visites de pages restent chez Mailchimp : chaque contact importé arrive donc dans Mautic avec un score de zéro, et tout segment fondé sur un comportement passé doit être regagné à partir de la première campagne. Prévoyez ce premier envoi comme une vague de réengagement, pas comme la reprise à l'identique de ce qui tournait avant.

Compatibilité MySQL 8 : HTTP 500 sur les rapports et le mode ONLY_FULL_GROUP_BY

Certains rapports Mautic rendent un HTTP 500 dès qu'on les ouvre — typiquement un rapport « Page hits » qui regroupe (Group by) et ajoute une colonne COUNT. Le symptôme est discret : page de rapport blanche, rien dans le journal applicatif de Mautic, aucun message d'erreur explicite dans l'interface.

Diagnostic. Le mode SQL ONLY_FULL_GROUP_BY rejette les requêtes SELECT dont les colonnes non agrégées ne figurent pas dans la clause GROUP BY — la règle de dépendance fonctionnelle du standard SQL, que le constructeur de rapports de Mautic ne satisfait pas toujours. MySQL répond par l'erreur 1055, Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mautic.ph.id'. Interrogez le serveur avec :

SHOW GLOBAL VARIABLES LIKE 'sql_mode';

Ce mode est actif par défaut depuis MySQL 5.7.5, et non depuis MySQL 8.0. Tourner en 5.7 ne vous met donc pas hors de portée, et le template Mautic de ServOrbit embarque MySQL 8.0 : un déploiement Marketplace est concerné par défaut. MariaDB, elle, laisse ce mode hors de son sql_mode par défaut.

En amont, le défaut a été déposé sous mautic/mautic#17092 (signalé sur Mautic 7.1.3 contre MySQL 8.4) et corrigé par la pull request #17099, mergée sur la branche 7.x pour le jalon 7.2.0. La ligne 5.2.x que fait tourner ce template ne porte pas ce correctif — sa dernière version est la 5.2.11 — et le contournement ci-dessous reste donc nécessaire sur cette pile.

Contournement A — relâcher le mode, mais l'écrire là où ça survit. Appliqué à chaud, l'ordre ci-dessous n'affecte que les connexions ouvertes ENSUITE, pas la session qui l'exécute :

SET GLOBAL sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

et il est perdu dès que le conteneur db redémarre, ce que restart: unless-stopped rend routinier. Éditer /etc/mysql/my.cnf n'aide pas davantage : dans l'image mysql:8.0, ce n'est même pas le fichier lu par le serveur (c'est /etc/my.cnf, qui inclut /etc/mysql/conf.d/), et surtout tous ces fichiers vivent DANS le conteneur alors que seul /var/lib/mysql est un volume nommé — la modification disparaît à la prochaine recréation. Deux formes persistent réellement : SET PERSIST sql_mode = …, que MySQL écrit dans mysqld-auto.cnf du data directory, donc sur le volume mautic_db ; ou une ligne command: --sql-mode=… sur le service db du fichier compose, la seule qui survive à un redéploiement complet de la pile.

Contournement B — passer à MariaDB. MariaDB n'active pas ONLY_FULL_GROUP_BY par défaut, et Mautic 5 accepte MariaDB 10.2 et au-delà. Ce n'est pas un choix qu'on fait au moment du déploiement : le template Mautic est en MySQL 8.0, changer de moteur est une modification de cette pile, et cela suppose de vider puis recharger la base.

Déployez Mautic sur votre VPS ServOrbit

Avec le VPS Cloud ServOrbit, votre instance Mautic est opérationnelle en quelques minutes : Docker préconfigurée, reverse proxy nginx, SSL automatique et MySQL 8.0. Aucun frais par contact, aucune limite d'envoi — vous ne payez que le serveur.

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