Getting Started
This guide walks you through installing SupportBot on your own server and signing in for the first time.
What is SupportBot?
SupportBot is a self-hosted AI customer-support platform. Your customers write through a chat widget on your website; the AI assistant answers from the documents in your Knowledge Center and hands conversations it cannot resolve over to a human agent.
The platform has three layers:
- Chatwoot — the omnichannel inbox: agent workspace, chat widget, channels such as WhatsApp and Instagram.
- Dify — the AI brain: RAG (answering from your knowledge base) and multi-provider LLM management.
- The SupportBot layer — the bot bridge, weekly reports, and the Admin Panel (Insights Dashboard) this guide focuses on.
As an operator, you run nearly all day-to-day work from the Admin Panel and Chatwoot.
Requirements
- A VPS with Docker and Docker Compose (Linux server). Every service starts with a single
docker compose up. - A domain name (for production). Subdomains (
chat.,dashboard.,ai.…) derive automatically from your root domain; you only point them at your server in DNS. TLS certificates are issued automatically by Caddy. - For a local trial on your own machine no domain is needed; services open on
localhostports.
Installation
1. Clone the repository
git clone <repo-url>
cd SupportBot
2. Prepare the environment file
cp infra/.env.example infra/.env
Open infra/.env in an editor and fill in the lines tagged [ZORUNLU] (required) with <...> placeholders. To generate passwords and secrets:
openssl rand -hex 32
At minimum, fill in: POSTGRES_PASSWORD (and the password inside the three database URLs), CHATWOOT_SECRET_KEY_BASE, CHATWOOT_WEBHOOK_SECRET, DIFY_SECRET_KEY, DIFY_INIT_PASSWORD, DIFY_SANDBOX_API_KEY, PLUGIN_DAEMON_KEY, PLUGIN_DIFY_INNER_API_KEY, ADMIN_API_KEY, ENCRYPTION_KEY, ADMIN_PASSWORD, N8N_BASIC_AUTH_PASSWORD, N8N_ENCRYPTION_KEY. In production also set APP_DOMAIN to your own domain.
Important:
ENCRYPTION_KEYencrypts the LLM API keys you enter in the panel. If you lose this key, the stored API keys cannot be recovered; keep a backup somewhere safe.
3. Start the services
cd infra
docker compose up -d
4. Wait for setup to finish — the rest is automatic
The first compose up performs the entire installation via zero-touch provisioning:
- Database schemas and seed data are applied automatically.
- The Chatwoot account, admin user, "Web Sohbet" inbox, and the Agent Bot are created automatically.
- The Dify account, chatbot application, knowledge base, and 13 model-provider plugins are installed automatically.
- Every generated token and identifier is written to the database — you never have to copy keys from a panel into
.env.
Seeing init--prefixed services as Exited (0) in docker compose ps is normal: they are one-shot setup jobs that finish and shut down.
Domains
All subdomains derive from APP_DOMAIN in infra/.env (for the Cloudflare record steps: DNS Setup):
| Address | Service |
|---|---|
chat.<your-domain> |
Chatwoot — agent inbox, widget, host of the panel iframe |
dashboard.<your-domain> |
Admin Panel (Insights Dashboard) |
ai.<your-domain> |
Dify admin console (basic auth + IP allowlist, internal team) |
bot.<your-domain> |
Bot bridge (webhook traffic only) |
showcase.<your-domain> |
Showcase — test/demo platform |
status.<your-domain> |
Uptime Kuma — status page |
n8n.<your-domain> |
n8n workflows (optional, basic auth) |
Local equivalents: Admin Panel http://localhost:3200, Chatwoot http://localhost:3100, Dify http://localhost:5002, Showcase http://localhost:3300.
First Sign-in
- Admin Panel — open
dashboard.<your-domain>(locallylocalhost:3200) and sign in with theADMIN_EMAIL/ADMIN_PASSWORDfrominfra/.env. On first launch the Setup Wizard greets you: company details, assistant name, brand colors, AI provider, and topics in a few steps (you can skip any step and change it later in Settings). - Chatwoot — open
chat.<your-domain>; the admin account was created during provisioning with the sameADMIN_EMAIL/ADMIN_PASSWORD. - The panel runs embedded inside Chatwoot as a Dashboard App: once you are signed in to Chatwoot, the panel asks for no extra password (Chatwoot SSO). When you visit
dashboard.directly, the local sign-in above applies.
Sign in with Google (optional)
You can add a "Sign in with Google" button to both the Chatwoot and the Admin Panel sign-in screens. The Google Cloud setup (project, consent screen, the two redirect URIs) is covered step by step in its own guide: Setting Up Sign in with Google.
The panel sign-in also has a Forgot password link and passwordless sign-in: the "Send sign-in link" button emails you a one-click sign-in link valid for 15 minutes (the reset link is valid for 30; both are delivered via the email provider from Settings → Notifications).
Enter an LLM Key
The bot needs an AI provider's API key to answer. The key is entered in the panel, not in .env:
- Admin Panel → Settings → Model (or the "AI Provider" step of the Setup Wizard).
- Pick the provider (Anthropic, OpenAI, Google, Groq, DeepSeek, Mistral, xAI …) and paste your API key.
- Verify with Test, then save.
Keys are stored encrypted with AES-256-GCM in the database. The bot does not respond until a key is entered; afterwards, send a message through the widget to test the flow end to end.
Next Steps
- To learn the panel screens: Admin Panel
- To add the widget to your site: copy the ready-made snippet from Panel → Integrations and paste it before your page's closing
</body>tag. - To fill the bot's knowledge: upload your documents in Panel → Knowledge Center.