Why this Configuration?
- True Data Sovereignty: 100% GDPR-compliant on-premises deployment. You own your configuration and data without vendor lock-in.
- Hardware Agnostic: Optimized and verified across low-power ARM64 SBCs (Raspberry Pi 5) and x86_64 hypervisors (Proxmox VE LXC & VM).
- Engine Freedom: Tested and supported under standard Docker Engine and unprivileged rootless Podman.
- Platform Verification: Tested on Proxmox LXC: docker (v4.17.1, 2026-09-16).
Quick Start (Standalone Docker Compose)
The snippet below is immediately ready to run in any standard Docker or Podman environment:
services:
chatwoot-web:
image: chatwoot/chatwoot:v4.17.1
container_name: njorddeploy-chatwoot-web
restart: always
depends_on:
chatwoot-postgres:
condition: service_healthy
chatwoot-redis:
condition: service_healthy
ports:
- "3044:3000"
environment:
- "NODE_ENV=production"
- "RAILS_ENV=production"
- "INSTALLATION_ENV=docker"
- "FRONTEND_URL=https://chat.njorddeploy.com"
- "SECRET_KEY_BASE=generate_secret_token_placeholder"
- "POSTGRES_HOST=chatwoot-postgres"
- "POSTGRES_PORT=5432"
- "POSTGRES_DATABASE=chatwoot_production"
- "POSTGRES_USERNAME=chatwoot"
- "POSTGRES_PASSWORD=chatwoot_secure_pw_2026"
- "REDIS_URL=redis://:chatwoot_redis_pw_2026@chatwoot-redis:6379"
- "ACTIVE_STORAGE_SERVICE=local"
- "SMTP_ADDRESS=smtp.soverin.net"
- "SMTP_PORT=587"
- "SMTP_USERNAME=info@njorddeploy.com"
- "SMTP_PASSWORD=ChangeMeSecurePassword123!"
- "SMTP_DOMAIN=njorddeploy.com"
- "SMTP_ENABLE_STARTTLS_AUTO=true"
- "SMTP_AUTHENTICATION=plain"
- "MAILER_SENDER_EMAIL=info@njorddeploy.com"
- "SMTP_OPENSSL_VERIFY_MODE=peer"
- "ENABLE_ACCOUNT_SIGNUP=false"
- "ENABLE_RACK_ATTACK_WIDGET_API=true"
volumes:
- "/opt/njorddeploy/data/chatwoot/storage:/app/storage"
entrypoint: docker/entrypoints/rails.sh
command: ["bundle", "exec", "rails", "s", "-p", "3000", "-b", "0.0.0.0"]
networks:
- njorddeploy_net
chatwoot-worker:
image: chatwoot/chatwoot:v4.17.1
container_name: njorddeploy-chatwoot-worker
restart: always
depends_on:
chatwoot-postgres:
condition: service_healthy
chatwoot-redis:
condition: service_healthy
environment:
- "NODE_ENV=production"
- "RAILS_ENV=production"
- "INSTALLATION_ENV=docker"
- "FRONTEND_URL=https://chat.njorddeploy.com"
- "SECRET_KEY_BASE=generate_secret_token_placeholder"
- "POSTGRES_HOST=chatwoot-postgres"
- "POSTGRES_PORT=5432"
- "POSTGRES_DATABASE=chatwoot_production"
- "POSTGRES_USERNAME=chatwoot"
- "POSTGRES_PASSWORD=chatwoot_secure_pw_2026"
- "REDIS_URL=redis://:chatwoot_redis_pw_2026@chatwoot-redis:6379"
- "ACTIVE_STORAGE_SERVICE=local"
- "SMTP_ADDRESS=smtp.soverin.net"
- "SMTP_PORT=587"
- "SMTP_USERNAME=info@njorddeploy.com"
- "SMTP_PASSWORD=ChangeMeSecurePassword123!"
- "SMTP_DOMAIN=njorddeploy.com"
- "SMTP_ENABLE_STARTTLS_AUTO=true"
- "SMTP_AUTHENTICATION=plain"
- "MAILER_SENDER_EMAIL=info@njorddeploy.com"
- "SMTP_OPENSSL_VERIFY_MODE=peer"
- "ENABLE_ACCOUNT_SIGNUP=false"
- "ENABLE_RACK_ATTACK_WIDGET_API=true"
volumes:
- "/opt/njorddeploy/data/chatwoot/storage:/app/storage"
entrypoint: docker/entrypoints/rails.sh
command: ["bundle", "exec", "sidekiq", "-C", "config/sidekiq.yml"]
networks:
- njorddeploy_net
chatwoot-postgres:
image: pgvector/pgvector:pg16
container_name: njorddeploy-chatwoot-postgres
restart: always
environment:
- "POSTGRES_DB=chatwoot_production"
- "POSTGRES_USER=chatwoot"
- "POSTGRES_PASSWORD=chatwoot_secure_pw_2026"
volumes:
- "/opt/njorddeploy/data/chatwoot/postgres:/var/lib/postgresql/data"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U chatwoot -d chatwoot_production"]
interval: 5s
timeout: 5s
retries: 5
networks:
- njorddeploy_net
chatwoot-redis:
image: redis:7-alpine
container_name: njorddeploy-chatwoot-redis
restart: always
command: ["redis-server", "--requirepass", "chatwoot_redis_pw_2026"]
volumes:
- "/opt/njorddeploy/data/chatwoot/redis:/data"
healthcheck:
test: ["CMD", "redis-cli", "-a", "chatwoot_redis_pw_2026", "ping"]
interval: 5s
timeout: 5s
retries: 5
networks:
- njorddeploy_net
networks:
njorddeploy_net:
Start the service directly via the command line: docker compose up -d
Configuration & Environment Variables
Key configuration parameters and defaults derived from the NjordDeploy component template:
| Variable | Default Value | Description |
|---|---|---|
CHATWOOT_WEB_PORT |
3044 |
The external TCP port on the host for Chatwoot web interface. |
FRONTEND_URL |
https://chat.njorddeploy.com |
Public URL where Chatwoot will be reachable. |
SECRET_KEY_BASE |
generate_secret_token_placeholder |
Secret key used for Rails session encryption. |
POSTGRES_PASSWORD |
chatwoot_secure_pw_2026 |
Password for the dedicated Chatwoot PostgreSQL database. |
REDIS_PASSWORD |
chatwoot_redis_pw_2026 |
Password for the dedicated Chatwoot Redis cache and worker queue. |
Ecosystem & Enterprise Integration
- Reverse Proxy Ingress Ready: Pre-configured for Caddy, Traefik, or Nginx Proxy Manager with automatic Let's Encrypt TLS certificates.
- Zero-Trust Mesh VPN: Seamless integration with WireGuard or Tailscale/Headscale mesh networks for secure remote administration.
- Transactional State Backups: Ready for point-in-time database dumps and container-safe persistent volume freezing.
Effortless Management with NjordDeploy
Deploy, monitor, and update this service with a single click on your own hardware via the NjordDeploy Configurator.