DEV Community

Lightning Developer
Lightning Developer

Posted on

Self-Hosted Customer Support Is Becoming Mainstream

Customer support platforms have become an essential part of running online products. Whether it's answering customer questions, managing emails, or handling conversations from multiple channels, businesses often depend on expensive third-party services.

For many independent developers and small teams, recurring subscription costs can quickly become difficult to justify. Fortunately, open source alternatives have matured significantly.

One of the strongest options available today is Chatwoot. It allows you to create a complete customer communication system on an infrastructure that you control. Combined with Pinggy, you can even make a locally hosted Chatwoot instance accessible on the internet without purchasing additional networking infrastructure.

This guide explains how Chatwoot works, how to deploy it yourself, and how Pinggy simplifies public access.

Why Many Developers Are Moving Toward Self-Hosted Customer Support

Popular customer support solutions are convenient, but costs often increase as teams grow or advanced features become necessary.

A simple support setup can become expensive once you add automation, AI capabilities, or multiple support agents.

Self-hosting changes that equation. Instead of paying for the software every month, you manage the application yourself and only pay for the infrastructure you use.

Chatwoot is one of the leading projects in this space.

What Is Chatwoot?

Chatwoot

Chatwoot is an open-source customer engagement platform that centralizes communication from multiple channels into a single interface.

It can be installed on your own server or personal machine and supports various communication sources.

Some of its major capabilities include:

  • Website live chat
  • Shared team inboxes
  • Email integration
  • WhatsApp connectivity
  • Telegram integration
  • Customer knowledge bases
  • Internal notes for support teams
  • Automated routing rules
  • AI-powered assistance

The project is actively maintained and has built a large developer community.

How Chatwoot Organizes Customer Conversations

At its heart, Chatwoot acts as a unified inbox.

Instead of opening separate applications for emails, website chats, and messaging apps, every incoming conversation appears in one dashboard.

Support teams can:

  • Assign conversations to specific team members
  • Add internal comments
  • View customer history
  • Tag conversations
  • Create canned responses
  • Track visitor activity before they start a conversation

This significantly reduces context switching.

The Built-In AI Assistant: Captain

Recent Chatwoot releases introduced Captain, an integrated AI system designed to help support teams work more efficiently.

Captain includes several useful components.

Captain Assistant

This feature can answer customer questions automatically by referencing your documentation and previous interactions.

It is particularly useful during non-working hours.

Captain Co-Pilot

Instead of writing every response manually, support agents receive AI-generated suggestions directly inside the editor.

Human agents can modify and approve responses before sending them.

Captain FAQs

This component identifies unanswered questions appearing repeatedly in customer conversations.

It helps teams discover gaps in their documentation.

Captain Memories

The AI stores useful customer context such as:

  • Business size
  • Previous issues
  • Product preferences
  • Historical interactions

That information becomes available during future conversations.

The captain requires an external AI provider such as OpenAI or any compatible endpoint.

The Biggest Challenge of Running Chatwoot Locally

Deploying Chatwoot is relatively straightforward.

The networking aspect is where many beginners get stuck.

By default, Docker keeps services accessible only from the local machine.

For example:

http://localhost:3000
Enter fullscreen mode Exit fullscreen mode

works perfectly on your own computer.

However, website visitors cannot reach localhost.

If you embed a chat widget on your website, external users need a publicly accessible URL.

There are several traditional ways to solve this.

Option 1: Rent a VPS

You can deploy Chatwoot directly to a cloud server.

Although effective, this adds server management responsibilities.

Option 2: Configure Router Port Forwarding

This exposes your home network to the internet.

It may also require a static IP address and additional firewall configuration.

Option 3: Use a Secure Tunnel

This is often the easiest approach for small projects.

This is where Pinggy becomes useful.

How Pinggy Makes Local Chatwoot Accessible Online

Pinggy establishes a reverse SSH tunnel.

Instead of opening your network to incoming traffic, your computer creates an outbound connection.

When users access your public URL, Pinggy securely forwards requests back to your local Chatwoot installation.

Advantages include:

  • No router modifications
  • No firewall changes
  • No static IP requirements
  • No server administration

A single command can expose your application.

System Requirements Before Installation

You will need:

  • Docker
  • Docker Compose
  • Linux, macOS, or Windows with WSL2

Step 1: Download the Required Configuration Files

Create a working directory and fetch the necessary files.

mkdir chatwoot
cd chatwoot

wget -O .env https://raw.githubusercontent.com/chatwoot/chatwoot/develop/.env.example

wget -O docker-compose.yaml https://raw.githubusercontent.com/chatwoot/chatwoot/develop/docker-compose.production.yaml
Enter fullscreen mode Exit fullscreen mode

Step 2: Configure Environment Variables

Open the .env file.

Configure these values.

# Generate with openssl rand -hex 64

SECRET_KEY_BASE=your_secret_key_here

POSTGRES_PASSWORD=your_database_password

REDIS_PASSWORD=your_redis_password

FRONTEND_URL=http://localhost:3000
Enter fullscreen mode Exit fullscreen mode

FRONTEND_URL is extremely important because Chatwoot uses it when generating links and connecting widgets.

Step 3: Prepare the Database

Before launching the application, initialize the database.

docker compose run --no-deps rails bundle exec rails db:chatwoot_prepare
Enter fullscreen mode Exit fullscreen mode

During this process, create your administrator account.

Choose credentials that you can easily remember.

Step 4: Launch Chatwoot

Start all required services.

docker compose up -d
Enter fullscreen mode Exit fullscreen mode

Several containers will start:

  • Rails application server
  • Sidekiq background processor
  • PostgreSQL database
  • Redis cache

After a short wait, open:

http://localhost:3000
Enter fullscreen mode Exit fullscreen mode

You should see the login screen.

Making Chatwoot Public with Pinggy

Open a new terminal window.

Run:

ssh -p 443 -R0:localhost:3000 free.pinggy.io
Enter fullscreen mode Exit fullscreen mode

Pinggy will generate temporary public URLs.

Example:

http://xyz123.a.pinggy.link

https://xyz123.a.pinggy.link
Enter fullscreen mode Exit fullscreen mode

Copy the HTTPS URL.

Update your .env file.

FRONTEND_URL=https://xyz123.a.pinggy.link
Enter fullscreen mode Exit fullscreen mode

Now restart the affected services.

docker compose restart rails sidekiq
Enter fullscreen mode Exit fullscreen mode

Your Chatwoot instance is now accessible worldwide.

Creating a Permanent URL

Temporary addresses change whenever the tunnel reconnects.

For long term deployments, obtaining a fixed domain is more practical.

A persistent URL removes the need to repeatedly update your configuration.

Automated reconnection can also be configured using authentication tokens.

Creating Your First Website Inbox

After logging in, navigate to:

Settings → Inboxes → New Inbox
Enter fullscreen mode Exit fullscreen mode

Choose:

Website
Enter fullscreen mode Exit fullscreen mode

Chatwoot will generate a JavaScript snippet.

Place it before the closing body tag of your website.

<script>
(function(d,t) {

var BASE_URL="https://your-domain";

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:'your_token',

baseUrl:BASE_URL

})

}

})(document,"script");

</script>
Enter fullscreen mode Exit fullscreen mode

Once deployed, visitors will immediately see a chat widget.

How AI Support Works in Daily Operations

After enabling Captain, AI assistance becomes available directly inside your workflow.

The system can:

  • Suggest responses
  • Answer questions automatically
  • Analyze customer patterns
  • Improve documentation over time

One particularly useful feature is FAQ discovery.

After a week of customer interactions, teams can identify recurring questions that are not properly documented.

This creates a roadmap for improving support resources.

Important Considerations Before Self-Hosting

Email Configuration Is Not Automatic

SMTP settings are disabled by default.

Without configuring an email provider, email notifications will not work.

Services like Resend or Brevo are often used.

AI Usage Still Has Costs

Chatwoot itself is free.

However, external AI providers charge based on token consumption.

The total cost depends entirely on usage volume.

Infrastructure Is Your Responsibility

Self-hosting means ownership.

You are responsible for:

  • Software updates
  • Data backups
  • System monitoring

Routine updates are simple, though.

docker compose pull

docker compose up -d
Enter fullscreen mode Exit fullscreen mode

Hardware Requirements Are Reasonable

A lightweight deployment generally consumes around 600 MB to 700 MB of memory at idle.

For smooth operation, 2 GB RAM is recommended.

Modern laptops and devices such as the Raspberry Pi 5 can handle it comfortably.

Is Self-Hosting Worth It?

The answer depends on your priorities.

Hosted services offer convenience, but self-hosted solutions provide flexibility and cost control.

If you are comfortable managing Docker applications, Chatwoot offers an impressive set of capabilities without forcing you into recurring software subscriptions.

The only missing ingredient for local deployments is internet accessibility.

Pinggy fills that gap with a simple SSH tunnel, allowing anyone to connect to your support platform without complicated networking configurations.

For developers, indie founders, and small teams, this combination creates a practical way to run a professional customer support system entirely under their own control.

Reference

Self-Host Chatwoot and Expose It with Pinggy

Chatwoot v4.14 ships Captain AI for automated customer support. Run the full stack locally with Docker Compose, then expose it to the internet with one Pinggy command - no port forwarding, no SaaS bill.

favicon pinggy.io

Top comments (0)