Chatwoot is an open-source customer support platform — a self-hosted alternative to Intercom, Zendesk, and Freshdesk that consolidates live chat, email, WhatsApp, Telegram, and social media conversations into a single agent inbox. For Asia-Pacific businesses, deploying Chatwoot on a Hong Kong VPS eliminates per-agent SaaS fees (typically $50–150/agent/month) while providing low-latency chat widget loading for Chinese customers.
Step 1: Deploy Chatwoot with Docker Compose
mkdir -p /home/deploy/chatwoot
cd /home/deploy/chatwoot
# Download official docker-compose setup
wget -O docker-compose.yml https://raw.githubusercontent.com/chatwoot/chatwoot/develop/docker-compose.production.yaml
wget -O .env https://raw.githubusercontent.com/chatwoot/chatwoot/develop/.env.examplenano .envConfigure key settings in the .env file:
# Domain
FRONTEND_URL=https://support.yourdomain.com
# Database
POSTGRES_PASSWORD=strong_postgres_password
# Redis
REDIS_PASSWORD=strong_redis_password
# Secret
SECRET_KEY_BASE=$(openssl rand -hex 64)
# Email configuration
MAILER_SENDER_EMAIL=support@yourdomain.com
SMTP_ADDRESS=smtp.youremail.com
SMTP_PORT=587
SMTP_USERNAME=your@email.com
SMTP_PASSWORD=your_email_password
SMTP_AUTHENTICATION=plain
SMTP_ENABLE_STARTTLS_AUTO=true
# Active Storage (for file uploads)
ACTIVE_STORAGE_SERVICE=local
# Timezone
TZ=Asia/Hong_Kongchmod 600 .env
# Initialize the database
docker compose run --rm rails bundle exec rails db:chatwoot_prepare
# Start all services
docker compose up -d
docker compose logs -f chatwootStep 2: Nginx Configuration
nano /etc/nginx/sites-available/chatwootserver {
listen 443 ssl http2;
server_name support.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/support.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/support.yourdomain.com/privkey.pem;
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;
# WebSocket for real-time chat
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400s;
}
# File uploads
client_max_body_size 100M;
}Step 3: Initial Setup and Inbox Configuration
- Navigate to
https://support.yourdomain.com - Complete setup wizard — create admin account and organisation name
- Settings → Inboxes → Add Inbox:
- Website: Live chat widget for your website
- Email: Route support@ email into Chatwoot
- Telegram: Connect your customer service Telegram bot
- WhatsApp: Via Twilio or 360dialog integration
Add the live chat widget to your website
<!-- Add before </body> -->
<script>
(function(d,t) {
var BASE_URL="https://support.yourdomain.com";
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_WEBSITE_TOKEN',
baseUrl: BASE_URL
})
}
})(document,"script");
</script>Step 4: Integrate with WeChat (via API)
Chinese customers prefer WeChat. Connect WeChat Official Account messages to Chatwoot via Chatwoot’s API inbox:
# In your WeChat message handler (Node.js):
const axios = require('axios');
async function routeToChatwoot(wechatMessage) {
// Create or find contact
const contact = await axios.post(
'https://support.yourdomain.com/api/v1/accounts/1/contacts',
{
name: wechatMessage.FromUserName,
identifier: wechatMessage.FromUserName
},
{ headers: { api_access_token: 'YOUR_CHATWOOT_API_TOKEN' } }
);
// Create conversation if new contact
const conversation = await axios.post(
'https://support.yourdomain.com/api/v1/accounts/1/conversations',
{
contact_id: contact.data.id,
inbox_id: YOUR_API_INBOX_ID // Create API inbox in Chatwoot
},
{ headers: { api_access_token: 'YOUR_CHATWOOT_API_TOKEN' } }
);
// Send the WeChat message into Chatwoot
await axios.post(
`https://support.yourdomain.com/api/v1/accounts/1/conversations/${conversation.data.id}/messages`,
{
content: wechatMessage.Content,
message_type: 'incoming',
private: false
},
{ headers: { api_access_token: 'YOUR_CHATWOOT_API_TOKEN' } }
);
}Cost Comparison: Self-Hosted vs SaaS
| Platform | 5 Agents | 15 Agents | 50 Agents |
|---|---|---|---|
| Intercom (Starter) | ~$250/mo | ~$750/mo | ~$2,500/mo |
| Zendesk (Suite Team) | ~$275/mo | ~$825/mo | ~$2,750/mo |
| Chatwoot Cloud | ~$75/mo | ~$225/mo | ~$750/mo |
| Chatwoot self-hosted (HK VPS) | ~$20/mo | ~$20/mo | ~$40/mo |
Self-hosted Chatwoot on a Hong Kong VPS pays for itself in the first month for any team with 5+ agents.
Conclusion
Chatwoot on a Hong Kong VPS provides enterprise customer support capabilities — multi-channel inbox, team assignments, canned responses, CSAT measurement, and API integration — at infrastructure cost only. For Asia-Pacific businesses supporting Chinese customers via WeChat, Telegram, or live chat, the combination of self-hosted control and CN2 GIA routing delivers fast, reliable customer support infrastructure.
Deploy your customer support platform on Server.HK’s Hong Kong VPS plans — a 4 GB RAM VPS handles Chatwoot for teams up to 20–30 concurrent agents comfortably.
Frequently Asked Questions
How many concurrent agents can Chatwoot handle on a Hong Kong VPS?
On a 4 GB RAM / 2 vCPU VPS, Chatwoot handles 20–30 concurrent agents with responsive performance. The main resource consumer is the Rails application server and PostgreSQL. For larger teams (50+ agents) or high conversation volumes, increase to 8 GB RAM and consider separating PostgreSQL onto a dedicated database VPS.
Can I integrate Chatwoot with WeChat Work (企业微信) for internal teams?
WeChat Work integration requires WeChat Work API access (available to registered organisations). Use Chatwoot’s API inbox to route WeChat Work messages into agent conversations via webhook — the same pattern as the WeChat Official Account integration shown above. Chatwoot doesn’t have a native WeChat Work integration, but the API inbox supports custom integrations for any messaging platform with a webhook-capable API.
Is Chatwoot suitable for high-volume support (10,000+ conversations per day)?
At 10,000+ daily conversations, Chatwoot requires dedicated infrastructure: a separate PostgreSQL database server with adequate RAM for connection pooling, Redis with dedicated resources, and multiple Chatwoot worker processes. The Docker Compose setup in this guide handles up to ~2,000 daily conversations comfortably; scale up the Docker resource limits and VPS size for higher volumes.