Avancé ⏱ 40 min de mise en œuvre Mis à jour le 11 août 2026

Héberger Chatwoot : votre plateforme de support client (alternative à Intercom et Zendesk)

Chat sur le site, emails, réseaux sociaux : centraliser le support client sans SaaS étranger. Chatwoot est l'alternative open source à Intercom et Zendesk. Voici comment l'héberger.

Centraliser le support client ne nécessite pas forcément de confier ses conversations, ses contacts et son historique à un SaaS étranger. Chatwoot est une plateforme open source de relation client qui remplace une grande partie des usages d’Intercom, Zendesk ou Crisp, tout en laissant à l’entreprise la maîtrise de son hébergement et de ses données.

Pour une PME, un e-commerçant ou un éditeur SaaS, Chatwoot réunit le chat du site, les emails et plusieurs réseaux sociaux dans une même boîte de réception. Installé sur un serveur en France, il permet de construire un support omnicanal plus souverain et cohérent avec une démarche RGPD.

L’auto-hébergement demande toutefois davantage qu’un simple conteneur. Chatwoot repose sur Ruby on Rails, PostgreSQL, Redis et Sidekiq. Il faut donc prévoir un VPS correctement dimensionné, une configuration HTTPS fiable, des sauvegardes et une procédure de mise à jour.

Ce que Chatwoot apporte au support client

Chatwoot organise les échanges autour de boîtes de réception. Chaque boîte correspond à un canal par lequel les clients peuvent contacter l’entreprise.

Le canal Website fournit un widget de chat live à intégrer sur un site vitrine, une boutique ou une application SaaS. Les visiteurs peuvent démarrer une conversation sans quitter la page. Les agents reçoivent les nouveaux messages dans l’interface Chatwoot et répondent en temps réel.

Une boîte email partagée permet également de traiter des adresses comme support@example.fr. Les messages entrants deviennent des conversations assignables, ce qui évite les réponses en double et les demandes oubliées dans une boîte mail collective.

Des canaux sociaux peuvent compléter le dispositif, notamment WhatsApp, Facebook et Instagram. Ces connexions dépendent néanmoins des API et des règles imposées par les plateformes concernées. Une installation auto-hébergée ne supprime donc pas le recours à la WhatsApp Business API ou aux services Meta nécessaires à certaines intégrations.

Chatwoot propose aussi les fonctions attendues d’un outil de support moderne :

  • agents, équipes et règles d’assignation ;
  • statuts de conversation et priorités ;
  • réponses prédéfinies pour les questions fréquentes ;
  • macros combinant plusieurs actions ;
  • notes privées entre collaborateurs ;
  • étiquettes et attributs personnalisés ;
  • centre d’aide avec articles de base de connaissances ;
  • rapports sur les conversations, les agents et les temps de réponse.

Cette centralisation donne à l’équipe une vue commune du client, même lorsque celui-ci passe du chat à l’email ou à un réseau social.

Dimensionner l’infrastructure

Chatwoot est relativement lourd comparé à un outil de chat minimaliste. L’application web Rails traite l’interface et les requêtes HTTP, tandis qu’un worker Sidekiq exécute les tâches en arrière-plan. PostgreSQL conserve les données et Redis gère notamment les files de tâches et certains états temporaires.

Il faut prévoir de la marge en mémoire vive pour absorber les pointes de trafic, les migrations et les traitements asynchrones. Le dimensionnement dépend du nombre d’agents, du volume de conversations, des pièces jointes et des canaux connectés. Une petite équipe peut commencer modestement, mais une surveillance de la RAM, du processeur, du stockage et des files Sidekiq reste indispensable.

Les VPS TalCloud répondent à ce type de besoin avec des serveurs localisés en France, du stockage NVMe, une protection Anti-DDoS Netrix et un support humain, à partir de 4,99 € par mois.

Préparer le serveur, le domaine et les emails

Le déploiement nécessite les éléments suivants :

  • un serveur Linux avec une marge de RAM suffisante ;
  • Docker Engine et le plugin Docker Compose (voir installer Docker sur un VPS) ;
  • un domaine ou sous-domaine, par exemple support.example.fr ;
  • un enregistrement DNS pointant vers le serveur ;
  • un reverse proxy capable de gérer HTTPS et les WebSockets ;
  • un compte SMTP pour les notifications et emails sortants ;
  • un stockage persistant pour PostgreSQL et les pièces jointes.

Générez un secret Rails long et imprévisible :

openssl rand -hex 64

Conservez cette valeur dans un fichier .env protégé. Elle sera utilisée comme SECRET_KEY_BASE. Ne la publiez jamais dans un dépôt Git.

Un fichier .env minimal peut contenir :

CHATWOOT_VERSION=latest
SECRET_KEY_BASE=remplacer_par_le_secret_genere
FRONTEND_URL=https://support.example.fr
POSTGRES_DATABASE=chatwoot
POSTGRES_USERNAME=chatwoot
POSTGRES_PASSWORD=remplacer_par_un_mot_de_passe_fort
SMTP_ADDRESS=smtp.example.fr
SMTP_PORT=587
SMTP_USERNAME=support@example.fr
SMTP_PASSWORD=remplacer_par_le_mot_de_passe_smtp
MAILER_SENDER_EMAIL=Support <support@example.fr>

En production, remplacez latest par une version précise après validation. Cela rend les mises à jour prévisibles et facilite un retour à la version précédente de l’application.

Déployer Chatwoot avec Docker Compose

Créez un fichier compose.yml avec les services Rails, Sidekiq, PostgreSQL et Redis :

services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DATABASE}
      POSTGRES_USER: ${POSTGRES_USERNAME}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data

  rails:
    image: chatwoot/chatwoot:${CHATWOOT_VERSION}
    restart: unless-stopped
    depends_on:
      - postgres
      - redis
    env_file:
      - .env
    environment:
      RAILS_ENV: production
      NODE_ENV: production
      INSTALLATION_ENV: docker
      POSTGRES_HOST: postgres
      POSTGRES_PORT: 5432
      REDIS_URL: redis://redis:6379
      SMTP_AUTHENTICATION: login
      SMTP_ENABLE_STARTTLS_AUTO: "true"
    command: bundle exec rails s -p 3000 -b 0.0.0.0
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - chatwoot_storage:/app/storage

  sidekiq:
    image: chatwoot/chatwoot:${CHATWOOT_VERSION}
    restart: unless-stopped
    depends_on:
      - postgres
      - redis
    env_file:
      - .env
    environment:
      RAILS_ENV: production
      NODE_ENV: production
      INSTALLATION_ENV: docker
      POSTGRES_HOST: postgres
      POSTGRES_PORT: 5432
      REDIS_URL: redis://redis:6379
      SMTP_AUTHENTICATION: login
      SMTP_ENABLE_STARTTLS_AUTO: "true"
    command: bundle exec sidekiq -C config/sidekiq.yml
    volumes:
      - chatwoot_storage:/app/storage

volumes:
  postgres_data:
  redis_data:
  chatwoot_storage:

PostgreSQL et Redis ne publient aucun port sur Internet. Seul Rails écoute sur l’interface locale, afin d’être joint par le reverse proxy installé sur le même serveur.

Téléchargez les images puis préparez la base de données :

docker compose pull
docker compose run --rm rails bundle exec rails db:chatwoot_prepare
docker compose up -d

Contrôlez ensuite l’état des services :

docker compose ps
docker compose logs --tail=100 rails sidekiq

La commande db:chatwoot_prepare crée le schéma initial et applique les migrations nécessaires. Elle doit terminer sans erreur avant l’ouverture de la plateforme aux utilisateurs.

Effectuer la configuration initiale

Accédez à l’adresse déclarée dans FRONTEND_URL. Créez le premier compte administrateur et l’espace de travail de l’entreprise. Selon la version et la politique d’inscription retenue, l’administration globale peut aussi être gérée depuis l’interface super administrateur.

Créez ensuite une première boîte de réception. Pour le chat du site, choisissez le canal Website, renseignez le domaine autorisé, le nom de la marque et les paramètres d’accueil. Chatwoot fournit alors un jeton de site à insérer dans le script du widget :

<script>
  (function(d,t) {
    var BASE_URL="https://support.example.fr";
    var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
    g.src=BASE_URL+"/packs/js/sdk.js";
    g.defer=true;
    g.async=true;
    s.parentNode.insertBefore(g,s);
    g.onload=function() {
      window.chatwootSDK.run({
        websiteToken:"VOTRE_JETON",
        baseUrl:BASE_URL
      });
    };
  })(document,"script");
</script>

Placez ce code avant la fermeture de la balise body du site. Testez l’envoi et la réception depuis une fenêtre privée, puis vérifiez les règles de consentement et la politique de confidentialité applicables.

Connecter l’email et organiser l’équipe

Le SMTP configuré dans .env sert aux messages sortants de la plateforme. Pour recevoir les demandes envoyées à une adresse partagée, créez une boîte de réception Email dans Chatwoot et suivez le mécanisme proposé par la version installée, généralement une adresse de transfert ou une connexion de boîte compatible.

Testez les deux directions : un email client doit créer une conversation et la réponse de l’agent doit revenir avec un expéditeur, un domaine et un fil de discussion corrects. Vérifiez également SPF, DKIM et DMARC pour limiter les classements en courrier indésirable.

Ajoutez ensuite les agents, regroupez-les en équipes et définissez les droits utiles. Préparez des réponses prédéfinies pour les demandes récurrentes, puis des macros pour automatiser des suites d’actions comme l’ajout d’une étiquette, l’affectation à une équipe et le changement de priorité.

Le centre d’aide peut accueillir les procédures, les réponses avant-vente et les guides de dépannage. Une base de connaissances bien structurée réduit les demandes répétitives sans rendre le contact humain inaccessible.

Configurer HTTPS et le temps réel

Le reverse proxy doit fournir un certificat TLS valide et transmettre les requêtes à 127.0.0.1:3000. La valeur de FRONTEND_URL doit correspondre exactement à l’URL publique, protocole HTTPS compris. Traefik ou Nginx conviennent pour cette couche.

Chatwoot utilise Action Cable pour certaines fonctions en temps réel. Le proxy doit donc transmettre les en-têtes de mise à niveau WebSocket. Sans cette configuration, l’interface peut s’afficher alors que les nouveaux messages, statuts ou notifications ne se mettent pas correctement à jour.

Après chaque modification du domaine ou des variables d’environnement, recréez les conteneurs et testez le widget, l’interface agent et les échanges en temps réel.

Sécuriser, sauvegarder et mettre à jour

Les conversations peuvent contenir des noms, des emails, des commandes et des pièces jointes. Elles constituent des données personnelles. Documentez leur finalité, leur durée de conservation, les accès autorisés et les procédures d’exercice des droits RGPD.

N’exposez jamais PostgreSQL ou Redis publiquement. Protégez les comptes administrateurs, limitez l’accès SSH, activez un pare-feu et surveillez les journaux. L’hébergement en France chez un acteur comme TalCloud contribue à la maîtrise de la localisation, mais ne remplace pas les obligations organisationnelles du responsable de traitement.

Sauvegardez PostgreSQL régulièrement :

docker compose exec -T postgres pg_dump \
  -U chatwoot \
  -d chatwoot \
  -Fc > chatwoot.dump

Sauvegardez aussi le volume des pièces jointes. Une sauvegarde SQL seule ne suffit pas si les fichiers sont conservés dans chatwoot_storage. Chiffrez les archives, externalisez-en une copie et testez réellement la restauration. Notre guide sur les sauvegardes chiffrées avec restic détaille l’automatisation.

Pour une mise à jour, consultez les changements de la version visée, sauvegardez les données, modifiez CHATWOOT_VERSION, puis exécutez :

docker compose pull
docker compose run --rm rails bundle exec rails db:chatwoot_prepare
docker compose up -d
docker compose logs --tail=100 rails sidekiq

Cette discipline transforme Chatwoot en véritable outil de production : une plateforme de support omnicanale, auto-hébergée et contrôlée par l’entreprise, avec une infrastructure française adaptée aux enjeux de souveraineté et de continuité de service.