Skip to main content

Automation, AI & open source

Chatwoot Self-Hosted in 2026: Docker or Coolify Setup

Self-host Chatwoot with Docker Compose or Coolify: server prep, the official install, Nginx and SSL, channels, backups and upgrades.

Updated 29 Oct 20269 min readBy ManojFirst published 20 Jul 2026

To run Chatwoot self-hosted, install the open-source support inbox on a Linux server you control with Docker Compose or Coolify, put a reverse proxy with a Let's Encrypt certificate in front, and connect your channels. Customer conversations, phone numbers and contact records then stay on your own infrastructure, with no per-agent licence fee. Docker Compose keeps every file in view; Coolify deploys it as a one-click service. Chatwoot is one of the tools in our directory of open-source SaaS alternatives.

Short answer

Provision a Linux VPS (we start at 2 CPU cores and 4 GB RAM), install Docker 20.10.10+ and Compose v2.14.1+, download Chatwoot's official .env.example and docker-compose.production.yaml, prepare the database and start the containers. Put Nginx in front with a Let's Encrypt certificate, then connect email, website chat and WhatsApp. Coolify gets you the same result with fewer manual steps.

I lead ERPNext, Frappe and open-source deployments at MithTech, a team of Frappe specialists in Bengaluru. Chatwoot is the support inbox we use when a client wants shared conversation handling without sending every customer message to a foreign SaaS. We have deployed it both ways, plain Docker Compose and Coolify, for teams that run Frappe and ERPNext on the same infrastructure.

Honest take: Chatwoot is easy to stand up in an afternoon. Keeping it patched, backed up and reliable for years is the part teams underestimate.

What do you need before you self-host Chatwoot?

Three things: a Linux server, a domain name, and the email or messaging credentials for the channels you plan to connect. Chatwoot runs several services side by side (Postgres, Redis, a Rails web process and a Sidekiq worker), so a VPS with 2 CPU cores and about 4 GB RAM is the size we start a small support team on.

Point an A record from a subdomain such as support.yourcompany.com at the server's public IP before you start. The SSL certificate and Chatwoot's FRONTEND_URL both depend on that domain resolving. Open ports 22, 80 and 443 in your firewall and keep 80 and 443 for the reverse proxy; Chatwoot itself listens only on localhost port 3000.

Baseline
CPU / RAM2 cores, ~4 GB RAM (our starting size)Runs Postgres, Redis, Rails and Sidekiq together
OSRecent Ubuntu or Debian LTSWell tested with Docker
Docker20.10.10 or higherRequired by Chatwoot's docs
Docker Composev2.14.1 or higherRequired by Chatwoot's docs
DomainSubdomain with an A recordNeeded for SSL and FRONTEND_URL

How do you install Chatwoot with Docker Compose?

The official method pulls two files from the Chatwoot repository, an environment template and a production Compose file, then prepares the database and starts the stack. Work as a non-root user with Docker permissions, and keep everything in one project folder so backups and upgrades stay tidy.

1

Install Docker and Docker Compose

Install Docker Engine (20.10.10+) and the Compose v2 plugin (v2.14.1+) from Docker's official repository or your distribution's packages. Check with docker --version and docker compose version.

2

Download Chatwoot's official templates

Create a folder such as ~/chatwoot, then fetch the environment and Compose templates:

3

Edit the .env file

Set FRONTEND_URL to your HTTPS domain (for example https://support.yourcompany.com), generate a fresh SECRET_KEY_BASE, and fill in your SMTP details so Chatwoot can send email. Set POSTGRES_PASSWORD, the Redis settings and RAILS_ENV=production.

4

Prepare the database

Run the preparation command once before the first launch. It creates the schema and seeds the required data:

5

Start the containers

Bring the stack up in the background:

Check with curl -I localhost:3000/api. A 200 response means Chatwoot is running on localhost.

How do you add SSL and a reverse proxy?

Chatwoot's containers bind to localhost only, so a reverse proxy terminates HTTPS and forwards traffic to port 3000. Nginx with a free Let's Encrypt certificate is the standard approach and takes a few minutes once the domain resolves.

Install Nginx and Certbot, then create a server block for your subdomain that proxies to 127.0.0.1:3000. Chatwoot needs one directive people miss: underscores_in_headers on;. Its API relies on headers with underscores, which Nginx drops by default. Forward the standard proxy headers so Chatwoot sees the real protocol and client IP:

nginx
server {
    server_name support.yourcompany.com;
    underscores_in_headers on;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Then run certbot --nginx -d support.yourcompany.com to issue the certificate and set up renewal. The Upgrade and Connection headers matter because Chatwoot uses WebSockets for live agent updates; without them the dashboard lags or stops refreshing. Chatwoot's docs also suggest proxy_pass_header Authorization;, client_max_body_size 0; and a long proxy_read_timeout for attachments and long-lived connections.

Skimmable summary: Nginx proxies HTTPS to localhost:3000; add underscores_in_headers on, forward the WebSocket headers, and let Certbot issue the free certificate.

How do you configure channels in Chatwoot?

Once HTTPS is live, open your domain, create the super-admin account, and add channels from the inbox settings. Each channel is a source of conversations that lands in one shared agent view.

Email inbox

Point a support mailbox at Chatwoot over IMAP/SMTP, or forward mail to the address Chatwoot generates. Replies thread back to the customer.

Website live chat

Create a website inbox and paste the generated JavaScript widget into your site. Visitors get a chat bubble; agents see conversations in real time.

WhatsApp

Connect through the WhatsApp Business Cloud API or an approved provider. Business messaging needs a Meta-verified number, and messages you start outside a 24-hour customer window need approved templates.

Social & SMS

Add Facebook, Instagram, Telegram or an SMS provider so every channel lands in the same agent queue instead of separate apps.

We usually start with the website widget and one email inbox, then add WhatsApp once Meta business verification is done. That order gets a team working without waiting on external approvals.

Is Coolify an easier way to self-host Chatwoot?

Yes. Coolify installs Chatwoot as a one-click service and sets up SSL and backups without hand-editing Nginx or Compose files. Coolify is an open-source (Apache 2.0) platform that runs on your own VPS and manages containers, certificates and scheduled backups from a web dashboard.

Docker Compose gives you full transparency and no extra moving parts, which we prefer for servers we manage long term. Coolify trades a little of that control for speed and a friendlier interface, which suits teams without an ops person. Either way the data stays on your infrastructure. The full walkthrough is in the guide to self-hosting any app with Coolify, and Coolify is one of the platforms we run in our managed hosting service.

Setup effortManual, more stepsOne-click service
SSLCertbot by handAutomatic
BackupsYou script themScheduled in the UI
TransparencyEvery file visibleBehind a dashboard
Best forOps-comfortable teamsTeams that want speed

How do you back up a self-hosted Chatwoot instance?

Back up three things: the Postgres database, the storage volume with uploaded files and attachments, and the .env file with its secrets. No one of them alone restores a working instance, so treat them as a unit and copy them off the server on a schedule.

1

Dump the database

Run pg_dump inside the Postgres container to a timestamped file, for example docker compose exec postgres pg_dump -U postgres chatwoot_production.

2

Archive the storage volume and secrets

Copy Chatwoot's storage volume and your .env file. Without the same SECRET_KEY_BASE, a restored database cannot decrypt existing sessions and tokens.

3

Ship backups off the server

Push the archive to S3-compatible object storage or another machine on a cron schedule. A backup that lives only on the same VPS disappears with the VPS.

Should you run Chatwoot yourself, or have it run for you?

Run it yourself if someone on your team will apply Chatwoot's releases, keep the server patched, and do the quarterly restore above; Chatwoot self-hosted is then a fair, low-cost inbox. Have it run for you if nobody owns that work, because a support inbox that goes quiet is noticed by your customers before your team.

Do it yourself if

You have someone at home with Docker, Postgres and Nginx or Coolify, a spare server to test restores on, and customers who can wait a few hours if the inbox is down.

Have it run for you if

WhatsApp, email and website chat all land in this one inbox, it holds customer conversations you cannot lose, or nobody wants to apply upgrades and rotate secrets.

Under managed hosting we run Chatwoot on one named server in your cloud account or ours: nightly backups copied off it, one restored on a schedule, every upgrade tried on a copy first, and the keys stay yours. It is a monthly fee for running it plus the server, quoted in writing after a call; the self-hosting cost comparator sets that against a per-seat helpdesk bill.

Frequently asked questions

+

Is Chatwoot free to self-host?

The community edition is open source, so there is no per-agent licence fee when you run it on your own server. Your costs are the VPS and the time to maintain it. Some features sit in a paid enterprise edition; check Chatwoot's own pricing page for what each edition includes. For most support desks, the self-hosted community edition covers shared inboxes, channels and automations.

+

How much server does Chatwoot need?

We start a small support team on 2 CPU cores and about 4 GB RAM, because Chatwoot runs Postgres, Redis, a Rails web process and a Sidekiq worker together. Larger teams or heavy WhatsApp volume need more RAM, and sometimes a separate managed database.

+

Can Chatwoot connect to WhatsApp?

Yes, through the WhatsApp Business Cloud API or an approved business solution provider. You need a Meta-verified business number, and approved templates for any message you start outside a 24-hour customer window; that is Meta's rule, not Chatwoot's. Meta bills per delivered message, by category: templates since 1 July 2025, and replies inside the 24-hour window since 1 October 2026, after a free monthly tier (Meta, checked 14 October 2026). WhatsApp conversations then land in the same agent inbox as email and website chat.

+

Should I use Docker Compose or Coolify?

Docker Compose if you want full transparency and are comfortable editing config files; Coolify if you want a one-click deploy with automatic SSL and scheduled backups. Both keep your data on your own infrastructure. Teams without an ops person usually prefer Coolify.

+

How do I update a self-hosted Chatwoot?

Take a fresh backup and read the release notes first. Then pull the new images with docker compose pull, restart with docker compose up -d, and run docker compose run --rm rails bundle exec rails db:chatwoot_prepare so database migrations apply. On a very old install, step through intermediate versions rather than jumping to the latest. Pin a version tag in production instead of tracking latest; the current release at the time of writing is v4.19.1 (24 October 2026, per Chatwoot's GitHub releases).

+

Does self-hosting Chatwoot help with data residency in India?

Yes. Hosting Chatwoot on a server in an Indian region keeps customer conversations and contact data on infrastructure you control, which makes data-residency and privacy commitments simpler to meet. Pair it with encrypted backups and restricted admin access.

If you would rather skip the server work, we set up Chatwoot alongside your ERPNext stack, connect the channels, and keep it patched and backed up under support and AMC, so your team just answers customers.

Your next step

Want Chatwoot deployed and maintained for you?

Next step · Automation, AI & open source

Now see hosting someone else looks after

ERPNext, Medusa and open-source tools on infrastructure you own, with updates, backups and monitoring handled for you.

Managed hosting

Comments & ratings

No comments yet. Start a new discussion.

0

Manoj · Published on 20 July 2026

Worked with us? Leave a Google review

Questions about this? Talk to the team.

Book a 30-minute Google Meet, WhatsApp us, or send a message. The engineer who works on this replies.

Send us a message
Your details go to our team's CRM and are used only to reply.