[{"data":1,"prerenderedAt":221},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-chatwoot-on-a-vps-open-source-omnichannel-support-ma-en":6,"promo-bar-likely":220},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-chatwoot-on-a-vps-open-source-omnichannel-support-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":160,"ctaBody":161,"ctaButton":162,"ctaUrl":163,"relatedPosts":164},185,"self-host-chatwoot-on-a-vps-open-source-omnichannel-support",{"fr":12,"en":10,"ar":13,"es":14},"self-host-chatwoot-vps","استضافة-chatwoot-على-vps-دعم-عملاء-متعدد-القنوات","alojar-chatwoot-en-un-vps-soporte-omnicanal","Self-Host Chatwoot on a VPS: Open-Source Omnichannel Support","Deploy Chatwoot on your VPS: live chat, email, WhatsApp, Telegram and Twitter\u002FX in one shared inbox. MIT licence, v4.17.1, no per-agent fees.",12,1,false,"2026-07-19T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-chatwoot-vps-poster.svg",{"categorySlug":34,"appSlug":35},"collaboration-productivity","chatwoot","Intercom and Zendesk charge per agent, lock you out of your own data and scale costs with your team. Chatwoot (MIT, 34 k+ stars, v4.17.1) offers a radical alternative: an open-source omnichannel customer support platform you host on your own VPS. Live chat on your site, email threads, WhatsApp Business, Telegram, Facebook Messenger and Twitter\u002FX DMs — all your customer conversations in one shared inbox, with no per-agent fees and no data leaving your infrastructure.",[38,42,53,56,78,81,84,87,90,93,108,111,157],{"type":39,"title":40,"body":41},"h2","Why self-host your customer support","SaaS customer support solutions have a simple business model: you pay per agent and per channel, and your customer data is stored on their servers. For a web agency or an SME, this can quickly amount to several hundred dollars per month once the team exceeds two or three people. Chatwoot reverses this equation: you deploy the platform on your own VPS, invite as many agents as needed, and connect all your channels at no extra cost. Your customer exchanges stay on your infrastructure — a compelling argument for GDPR compliance, customer trust and data sovereignty.",{"type":43,"title":44,"items":45},"ul","What you get with a self-hosted Chatwoot",[46,47,48,49,50,51,52],"Shared omnichannel inbox: livechat, email, WhatsApp, Telegram, Facebook Messenger and Twitter\u002FX DMs in a single dashboard.","Embeddable livechat widget: a customisable widget to add to any website with two lines of JavaScript.","Canned responses and automation rules: automatic assignment, first-contact reply and routing by language or keyword.","Team collaboration: internal notes, conversation assignment, mentions and team queues visible to all agents.","Integrated CRM: contact profiles with conversation history, custom attributes and labels.","REST API and webhooks: integration with n8n, Activepieces or your own backend.","MIT licence — no per-agent pricing, no data sent to a third party, full sovereignty.",{"type":39,"title":54,"body":55},"Prerequisites","Chatwoot runs on a Ruby on Rails + Sidekiq + PostgreSQL 15 + Redis 7 stack — four Docker containers. Plan for a VPS with at least 2 GB of RAM (4 GB recommended for teams of more than 10 agents). Ubuntu 24.04 with Docker is the fastest path. On the network side, prepare a subdomain — `support.your-domain.com` for example — and a reverse proxy (Nginx or Caddy) to enable HTTPS. Chatwoot requires a `FRONTEND_URL` over HTTPS for OAuth redirects, email links and the livechat widget script to work correctly.\n\nBefore you start, verify that Docker Compose v2 is installed (`docker compose version`): Chatwoot v4 uses the `docker compose` syntax (with a space) rather than the legacy `docker-compose` command.",{"type":57,"title":58,"steps":59},"steps","Deploy Chatwoot on a VPS in 6 steps",[60,63,66,69,72,75],{"title":61,"body":62},"One-click deployment from the ServOrbit marketplace","Open your ServOrbit control panel, go to Marketplace → Collaboration and productivity → Chatwoot, then click Deploy. Docker pulls `chatwoot\u002Fchatwoot:latest` and starts four containers: PostgreSQL, Redis, the Rails web server and the Sidekiq worker. On first start, the database migration runs automatically — wait 60 to 90 seconds before the interface becomes available.\n\nFor a manual installation, clone the official `docker-compose.yml`, copy `.env.example` to `.env`, set `SECRET_KEY_BASE` (generate it with `openssl rand -hex 64`) and run:\n```bash\ndocker compose up -d\ndocker compose exec rails bundle exec rails db:chatwoot_prepare\n```",{"title":64,"body":65},"Create the administrator account","Go to `http:\u002F\u002F\u003Cyour-vps-ip>:3000`. Chatwoot displays a first-configuration wizard: enter your name, email address and a strong password. This account becomes the super-administrator. You can then invite additional agents and create teams from the Settings panel.\n\nIf the page stays blank after 90 seconds, check the web container logs: `docker compose logs web --tail=50`. A `SECRET_KEY_BASE not set` or `PG::ConnectionBad` error points to a misconfiguration in `.env`.",{"title":67,"body":68},"Configure FRONTEND_URL and enable HTTPS","Point your domain to the VPS (A record → VPS IP). Install Caddy (`apt install -y caddy`) and create `\u002Fetc\u002Fcaddy\u002FCaddyfile`: `support.your-domain.com { reverse_proxy localhost:3000 }`. Reload Caddy (`systemctl reload caddy`). Then set `FRONTEND_URL=https:\u002F\u002Fsupport.your-domain.com` in your `.env` file and restart the web container: `docker compose restart web`. Chatwoot uses this URL for OAuth redirects, email links and the widget script.\n\nAlso enable `FORCE_SSL=true` in `.env` so Rails redirects HTTP connections to HTTPS and sets `Secure` cookies.",{"title":70,"body":71},"Add your first inbox","In Chatwoot, go to Settings → Inboxes → Add Inbox. Choose Website for livechat, Email for SMTP\u002FIMAP exchanges, or a messaging channel like WhatsApp Cloud API or Telegram. For livechat, copy the generated JavaScript snippet and paste it into the `\u003Chead>` of your website. Visitors immediately see the chat bubble.",{"title":73,"body":74},"Invite agents and configure automation","Go to Settings → Agents and send email invitations. In Settings → Automation, create rules to automatically assign conversations (for example, WhatsApp → sales team, email → billing) and send first-contact messages outside business hours. The Sidekiq worker handles all asynchronous tasks: sending emails, triggering webhooks and push notifications.",{"title":76,"body":77},"Connect WhatsApp Business (optional)","Create a Meta for Developers app and enable the WhatsApp Business Cloud API. In Chatwoot → Settings → Inboxes → Add → WhatsApp, enter your WhatsApp Business phone number, WhatsApp Business account ID, access token and Webhook verification token. Incoming WhatsApp messages now appear in the shared inbox alongside livechat and emails.",{"type":79,"body":80},"tip","Set up canned responses (Settings → Canned Responses) on day one: contact acknowledgement, order confirmation, processing times. Your agents save several minutes per conversation — and tone consistency is maintained regardless of who replies. Combine with automation rules to automatically send the first-contact reply at night and on weekends.",{"type":39,"title":82,"body":83},"Managing multiple inboxes","Chatwoot lets you centralise multiple channels in a single interface. Each channel creates an independent inbox, visible in the sidebar and assignable to a dedicated team.\n\n**Email (SMTP\u002FIMAP)**: in Settings → Inboxes → Email, enter your inbound address and IMAP credentials. Chatwoot polls the mailbox every two minutes and creates one conversation per thread. Replies are sent via SMTP while preserving the same thread.\n\n**Twitter\u002FX DMs**: connect an account via the Twitter v2 API (API key + secret + access token). Incoming direct messages appear in real time via webhook. Note: Twitter v2 API access requires a Basic or higher developer subscription.\n\n**Phone and WebRTC**: Chatwoot v4.17 migrated its video call integration from Dyte to **Cloudflare RealtimeKit**. If you use video calls, reconfigure the integration under Settings → Integrations → Cloudflare Calls with your `App ID` and `App Token`.\n\n**API channel**: for custom integrations (chatbot, in-house CRM), create an API-type inbox. It exposes a REST endpoint to receive messages and you send replies via `POST \u002Fapi\u002Fv1\u002Faccounts\u002F{id}\u002Fconversations\u002F{conv_id}\u002Fmessages`. This is the entry point for connecting any external source.",{"type":39,"title":85,"body":86},"Chatwoot integrations: webhooks, Slack, REST API","Chatwoot offers several levels of integration to fit into your existing stack.\n\n**Webhooks**: in Settings → Integrations → Webhooks, add your endpoint URL. Chatwoot fires a JSON event on every conversation created, message received or status changed. Useful for syncing tickets to a CRM, triggering an n8n workflow or logging conversations to your database.\n\n**Slack notifications**: connect a Slack workspace via OAuth under Settings → Integrations → Slack. New conversations and mentions in Chatwoot generate a notification in the Slack channel of your choice. Agents never miss a message even when outside the interface.\n\n**REST API**: all Chatwoot resources (conversations, contacts, messages, teams, labels) are exposed by a documented v1 REST API at `\u002Fswagger`. Authentication via token (`user_access_token` or agent API key). Common use cases: importing contacts from a CRM, reporting on resolved conversations, automatically updating contact attributes.\n\n**Zapier \u002F Make (ex-Integromat)**: Chatwoot has native connectors on Zapier and Make to trigger no-code actions. Example: new Chatwoot conversation → create an opportunity in your CRM → notify the sales team by email.",{"type":39,"title":88,"body":89},"Updating Chatwoot","Minor updates (patch releases like v4.17.0 → v4.17.1) are safe and often contain security fixes: plan them within 48 hours of publication.\n\nFor a patch update:\n```bash\ndocker compose pull\ndocker compose down\ndocker compose up -d\ndocker compose exec rails bundle exec rails db:migrate\n```\nThen check the logs (`docker compose logs web --tail=30`) and test sending a message on each channel.\n\nFor a major upgrade (v3 → v4), the process is more delicate: v4 introduces blocking PostgreSQL schema migrations (restructured `mentions` and `conversation_participants` tables). Never run `docker compose pull && docker compose up -d` without a prior backup on a major version.\n\n**Best practice**: always pin a specific version in `docker-compose.yml` (`chatwoot\u002Fchatwoot:v4.17.1` rather than `latest`) so you control exactly what runs in production and avoid silent updates.",{"type":39,"title":91,"body":92},"Migrating from Chatwoot v3 to v4","Chatwoot v4, released in June 2026, introduces the new 'Nova UI' interface and several blocking PostgreSQL schema migrations. An in-place upgrade from v3 will consistently break the instance if done without preparation — this is the subject of official issue #12088, which catalogues the most common failure cases.\n\nThe main reason for breakage: v4 renames the `mentions` table and restructures the `conversation_participants` table. A `docker compose pull && docker compose up -d` without a prior backup triggers the migrations automatically; if a migration fails mid-way (timeout, unsatisfied FK constraint), the database is left in an intermediate state and Chatwoot no longer starts.\n\nIn practice, three categories of instances are at risk: those running v3 with more than 50,000 conversations (bulk migrations are slow and may exceed Rails' 30-second timeout), those with undocumented custom columns in the `contacts` table, and those using Sidekiq Pro (removed from Community Edition in v4 — jobs queued at migration time are lost).",{"type":57,"title":94,"steps":95},"v3 → v4 migration procedure",[96,99,102,105],{"title":97,"body":98},"Back up the database and volumes","Before any action, save the full state: `docker compose exec postgres pg_dumpall -U postgres > \u002Ftmp\u002Fchatwoot-v3-dump-$(date +%F).sql`. Also copy the Docker volumes linked to PostgreSQL and Rails Storage. This backup is your only safety net: if the migration fails, restoration is the only clean exit.",{"title":100,"body":101},"Pin the image tag to v4","In your `docker-compose.yml`, replace `chatwoot\u002Fchatwoot:latest` with `chatwoot\u002Fchatwoot:v4.17.1` (or the latest v4 patch release). Avoid `latest` in production: this tag tracks HEAD and can introduce regressions without warning. Check the changelog for each version on the GitHub repository before targeting a tag.",{"title":103,"body":104},"Run migrations manually","Rather than letting Rails launch migrations when the web container starts, run them explicitly in the foreground to monitor progress: `docker compose run --rm web bundle exec rails db:migrate`. If an error occurs, the message is immediately visible — it identifies the failing migration and lets you fix it or skip it with `db:migrate:up VERSION=...` before re-running.",{"title":106,"body":107},"Start and verify","Once the migrations complete without error, start the stack: `docker compose up -d`. Log in to the Nova UI and verify that existing inboxes, contacts and conversations are present. Test sending and receiving a message on each connected channel. If Sidekiq shows failed jobs, use the Sidekiq Web interface (mounted at `\u002Fsidekiq` if enabled) to retry them.",{"type":39,"title":109,"body":110},"Troubleshooting: common errors","**Sidekiq workers blocked.** If outgoing emails no longer send or webhooks stop firing, Sidekiq is likely stalled or its workers are exhausted. Check via the Sidekiq Web interface (`\u002Fsidekiq`) or logs: `docker compose logs sidekiq --tail=50`. The most common cause is a saturated `mailers` queue. Restart the worker: `docker compose restart sidekiq`. If the issue persists, verify the Redis connection (`docker compose exec redis redis-cli ping` should return `PONG`).\n\n**Redis connection refused.** If Rails and Sidekiq fail to start with `Redis::CannotConnectError`, the Redis container is not ready. Check its state: `docker compose ps redis`. A container in `Restarting` state indicates a volume or permission issue. Remove the Redis volume and restart if the Redis data is transient (queued jobs will be lost).\n\n**ActionCable WebSocket not connecting.** The livechat widget shows 'connection lost' or agents don't receive messages in real time. Likely cause: the reverse proxy is not forwarding WebSocket headers. With Nginx, add to your `location` block:\n```bash\nproxy_http_version 1.1;\nproxy_set_header Upgrade $http_upgrade;\nproxy_set_header Connection \"upgrade\";\n```\nWith Caddy, the `reverse_proxy localhost:3000` configuration handles WebSockets automatically.\n\n**Migration stuck mid-way.** If `rails db:migrate` stops with an error, do not retry immediately. Identify the failing migration in the error message, fix it manually or skip it (`rails db:migrate:up VERSION=\u003Ctimestamp>`), then re-run. As a last resort, restore the backup taken before the migration.",{"type":112,"title":113,"headers":114,"rows":119},"comparison","Chatwoot vs Crisp vs Intercom: which tool for which situation",[115,116,117,118],"Criterion","Chatwoot (self-hosted)","Crisp","Intercom",[120,125,129,134,138,143,148,153],[121,122,123,124],"Pricing model","Free (VPS infra cost only)","Free limited, then ~€25\u002Fmonth","From ~$74\u002Fagent\u002Fmonth",[126,127,128,128],"Hosting","On your own VPS","SaaS only",[130,131,132,133],"Customer data","On your infrastructure","Crisp servers","Intercom servers",[135,136,137,137],"GDPR \u002F sovereignty","Total — no third party","DPA available",[139,140,141,142],"Supported channels","Live chat, email, WhatsApp, Telegram, FB, Twitter\u002FX, API","Live chat, email, Messenger","Live chat, email, SMS, WhatsApp (higher plan)",[144,145,146,147],"No agent cap","Yes","No (plan limited)","No (per-agent billing)",[149,150,151,152],"Automation","Native rules + API","Native rules","Advanced workflows",[154,155,156,156],"Deployment complexity","Medium (Docker required)","None",{"type":79,"title":158,"body":159},"Official documentation","For advanced configuration (SMTP, LDAP SSO, S3 storage, multi-accounts) and Chatwoot-specific options, refer to the \u003Ca href=\"https:\u002F\u002Fwww.chatwoot.com\u002Fdocs\u002Fself-hosted\" target=\"_blank\" rel=\"noopener noreferrer\">official Chatwoot self-hosted documentation\u003C\u002Fa>. This guide covers deployment on VPS; the vendor documentation remains the reference for fine-tuning and major upgrades.","Deploy Chatwoot on your own server","Self-host Chatwoot on a ServOrbit VPS — open source, no per-agent fees, all your customer conversations on your infrastructure.","Deploy Chatwoot","\u002Fapplications\u002Fcollaboration-productivity\u002Fchatwoot",[165,184,202],{"id":166,"slug":167,"slugs":168,"title":172,"excerpt":173,"readTime":174,"views":175,"isPinned":19,"noindex":19,"publishedAt":176,"updatedAt":177,"category":178,"categories":179,"featuredImage":30,"bgImage":31,"posterImage":181,"relatedSolution":182},76,"host-mattermost-on-your-own-vps",{"fr":169,"en":167,"ar":170,"es":171},"heberger-mattermost","استضافة-mattermost-على-خادم-vps-الخاص-بك","alojar-mattermost-en-un-vps","Host Mattermost on your own VPS","Complete 2026 guide: deploy Mattermost v10\u002Fv11 on VPS with Docker, PostgreSQL, SSL, integrations and backups. Self-hosted alternative to Slack.",9,5,"2026-04-05T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[180],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-mattermost-poster.svg",{"categorySlug":25,"appSlug":183},"mattermost",{"id":185,"slug":186,"slugs":187,"title":191,"excerpt":192,"readTime":193,"views":194,"isPinned":19,"noindex":19,"publishedAt":195,"updatedAt":21,"category":196,"categories":197,"featuredImage":30,"bgImage":31,"posterImage":199,"relatedSolution":200},148,"how-to-self-host-docmost-on-a-vps",{"fr":188,"en":186,"ar":189,"es":190},"self-host-docmost-vps","كيفية-استضافة-docmost-ذاتيا-على-vps","como-autoalojar-docmost-en-un-vps","How to Self-Host Docmost on a VPS","Deploy Docmost on your VPS for a self-hosted team wiki with real-time collaboration. Open-source Notion and Confluence alternative — Docker Compose in 15 minutes.",3,0,"2026-01-28T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[198],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fself-host-docmost-vps-poster.svg",{"categorySlug":34,"appSlug":201},"docmost",{"id":203,"slug":204,"slugs":205,"title":209,"excerpt":210,"readTime":211,"views":193,"isPinned":19,"noindex":19,"publishedAt":212,"updatedAt":21,"category":213,"categories":214,"featuredImage":30,"bgImage":31,"posterImage":216,"relatedSolution":217},134,"self-host-twenty-crm-on-vps-open-source-salesforce-alternative",{"fr":206,"en":204,"ar":207,"es":208},"self-host-twenty-crm-vps","استضف-twenty-crm-بنفسك-على-vps-بديل-salesforce-مفتوح-المصدر","alojar-twenty-crm-en-un-vps","Self-Host Twenty CRM on VPS: Open Source Salesforce Alternative","Deploy Twenty CRM on a ServOrbit VPS — open-source Salesforce alternative with custom objects, GraphQL API and automation worker. AGPL-3.0, production-ready since v2.1.0.",4,"2026-02-13T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[215],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fself-host-twenty-crm-vps-poster.svg",{"categorySlug":218,"appSlug":219},"erp-business-management","twenty",true,1794270484171]