
Deploy LibreDesk
Customer support desk with live chat, email and a shared inbox
libredesk-web
Just deployed
libredesk
Just deployed
/libredesk/uploads
Redis
Just deployed
/data
Just deployed
/var/lib/postgresql/data
mailpit
Just deployed
/data
Deploy and Host Libredesk on Railway
Libredesk is an open source, self-hosted omnichannel customer support desk from the team behind Listmonk. It puts live chat and email in one shared inbox and adds what a support team needs around it: SLAs, business hours, automation rules, macros, CSAT surveys, auto-assignment, roles and a help centre. It ships as a single Go binary, so the agent inbox, chat widget, admin panel and HTTP API all come from one process. Teams pick it over Zendesk, Freshdesk or Intercom to own their conversation history and stop paying per agent.
Deploy Libredesk on Railway and you get the full production shape, not a lone container. Five services run here: a Caddy edge (libredesk-web) holding the public domain, the app on the private network, PostgreSQL for every conversation and setting, Redis for sessions and rate limiting, and Mailpit as a built-in mailbox so invitations and password resets work as soon as the deploy is green. Traffic reaches Caddy, which forwards it privately to the app; the app writes to Postgres, keeps sessions in Redis and stores attachments on a volume. Nothing here needs an external account.

Getting Started with Libredesk on Railway
Set LIBREDESK_SYSTEM_USER_PASSWORD before you click Deploy. It is the only value you must supply, it is read once while the schema is created, and it needs 10 to 72 characters with an uppercase letter, a lowercase letter, a digit and a symbol, or the container refuses to start. When the deploy is green, open the libredesk-web URL and sign in with the email System and that password — System is the built-in owner account, not an address, and there is no other default login.
The checklist on the first screen covers what to do next. Create an inbox under Admin → Channel → Inboxes, choose Live Chat, name it, and the Installation tab gives you a two-line snippet for your site. Then invite a teammate under Admin → Teammates → Agents with "Send welcome email" ticked and read it in Mailpit — an invitation with a working set-password link is the fastest proof the deployment is wired correctly. Then load your site and send a test chat.




About Hosting Libredesk
Self-hosting a help desk is mostly about where the data lives: support conversations carry customer names, order numbers, screenshots and complaints, and hosted vendors charge per agent per month to keep that on their infrastructure. Libredesk offers the same features on servers you control, under AGPL-3.0, with an API and webhooks.
- Omnichannel inbox — live chat and email in one queue
- Chat widget — real time, file uploads, pre-chat form, JWT identity checks
- AI assistant and copilot — auto-answer from your knowledge base, draft replies
- SLAs and business hours — response and resolution targets with breach alerts
- Automations and macros — event rules, canned actions, capacity routing
- CSAT and reporting — scores, response times, agent activity
- SSO and granular roles — Google, Microsoft or any OIDC provider
The app service is the whole product; Postgres is its system of record and it runs its own migrations at startup. Redis holds agent sessions, so sign-ins survive a redeploy, and backs the rate limits on login, password reset and the widget. Caddy is there for a reason: Libredesk reads a visitor's IP from request headers, several of which no Railway proxy sets, so Caddy strips those and leaves only the header the platform controls — otherwise those limits and the chat IP block list could be bypassed.
Why Deploy Libredesk on Railway
Railway removes the server work self-hosting drags in:
- Postgres and Redis are provisioned, networked and backed up with the template
- Attachments sit on a volume that survives every redeploy
- Private networking keeps the database and mailbox off the internet
- One-click deploys from GitHub, with TLS and a domain issued automatically
Common Use Cases
- SaaS customer support — a widget in your product plus a support inbox, with SLAs and CSAT
- E-commerce order support — customers attach packing slips and photos; agents tag, snooze and route with macros
- Internal IT or HR help desk — a request queue with OIDC sign-in and roles
Dependencies for Libredesk
- Libredesk —
libredesk/libredesk:latest, from the gridalpha/libredesk-railway source repository, which adds a startup script - Caddy —
caddy:2-alpine, from the same repository, as the public edge - PostgreSQL — managed; conversations, contacts, settings, articles
- Redis — managed; agent sessions and rate-limit counters
- Mailpit —
axllent/mailpit:latest; outbound mail behind a protected inbox
Environment Variables Reference
| Variable | Service | Purpose |
|---|---|---|
LIBREDESK_SYSTEM_USER_PASSWORD | libredesk | System owner password, read once at install |
LIBREDESK_app__encryption_key | libredesk | 32 chars; encrypts stored SMTP and OIDC keys |
APP_ROOT_URL | libredesk | Public base URL for links and the widget |
LIBREDESK_db__*, LIBREDESK_redis__url | libredesk | Postgres and Redis connections |
SMTP_* | libredesk | Outbound mail, seeded on first boot |
MP_UI_AUTH | mailpit | user:password guarding the inbox |
Any config.toml key can be overridden as LIBREDESK_<section>__. Settings shown in the admin panel, such as the root URL and SMTP block, live in the database and are seeded on first boot — edit those in the UI.
Deployment Dependencies
- Source: github.com/abhinavxd/libredesk, AGPL-3.0
- Image: libredesk/libredesk; PostgreSQL 13+ and Redis 7+
- Docs and live demo: libredesk.io
Hardware Requirements for Self-Hosting Libredesk
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 512 MB app + 256 MB Postgres | 2 GB app + 1 GB Postgres |
| Storage | 1 GB volume for attachments | 10 GB+ |
| Runtime | One Go binary, no JVM or Node | Same |
It is light because it is one compiled binary: the worker pools for messages, notifications, automations and webhooks are goroutines in that process. Run one replica — the auto-assigner and SLA evaluator have no leader election, so a second runs each twice.
Self-Hosting Libredesk with Docker
Upstream ships a Compose file. This pulls it with the sample config you edit first:
curl -LO https://github.com/abhinavxd/libredesk/raw/main/docker-compose.yml
curl -LO https://github.com/abhinavxd/libredesk/raw/main/config.sample.toml
cp config.sample.toml config.toml
docker compose up -d
Set encryption_key in config.toml to a 32-character value from openssl rand -hex 16 before that first start — it encrypts secrets at rest, so changing it later orphans them. The schema and owner account are handled by flags on the binary:
./libredesk --install --idempotent-install --yes --config config.toml
./libredesk --upgrade --yes --config config.toml
./libredesk --set-system-user-password
The template runs the first two on every boot, so a redeploy after a version bump applies pending migrations.
How Much Does Libredesk Cost to Self-Host?
Libredesk is free and open source under AGPL-3.0. There is no paid edition and no agent seat pricing — the AI assistant, SLAs, help centre and SSO are in the same build. Self-hosting on Railway costs only infrastructure, a few dollars a month for a small team. Against roughly $19–$115 per agent per month for Zendesk or Freshdesk, the maths favours self-hosting past two or three agents.
FAQ
What is Libredesk? An open source, self-hosted customer support desk combining live chat and email in one shared inbox, with SLAs, automations, CSAT surveys, a help centre and reporting — an alternative to Zendesk, Freshdesk and Intercom.
What does this Railway template deploy? Five services: the app, a Caddy edge holding the public domain, managed PostgreSQL and Redis, and Mailpit. Attachments persist on a volume.
How do I log in to self-hosted Libredesk for the first time?
Use the email System and the value you set for LIBREDESK_SYSTEM_USER_PASSWORD. The account is created while the schema installs, so set the variable before the first deploy; if you lose it, run ./libredesk --set-system-user-password.
Why does this template include Redis and Postgres? Postgres stores every conversation, contact, setting and article. Redis stores agent sessions, so a redeploy does not sign everyone out, and the per-IP rate-limit counters.
How do I connect an email inbox in self-hosted Libredesk? Add an Email inbox under Admin → Channel → Inboxes with IMAP for receiving and SMTP for sending. Mailpit handles notification mail; the email channel needs a real provider.
How do I embed the Libredesk chat widget on my website? Create a Live Chat inbox, open its Installation tab, and paste the two-script snippet before your closing `` tag. It loads from your own deployment.
Template Content
libredesk-web
gridalpha/libredesk-railwaylibredesk
gridalpha/libredesk-railwayLIBREDESK_SYSTEM_USER_PASSWORD
Owner password, 10-72 chars with symbol; required
Redis
redis:8.2mailpit
axllent/mailpit:latest