NexaDesk
NexaDesk is a self-hosted IT helpdesk and ticketing system, built for internal IT teams and managed service providers. It runs entirely on your own infrastructure with Docker — your data never leaves your servers.

What's in the box
| Area | What you get |
|---|---|
| Ticketing | Full ticket lifecycle (Open → In Progress → Waiting → Resolved → Closed), priorities, assignment, bulk actions, field-level audit history |
| SLA management | Response & resolution targets per priority, business-hours aware, breach tracking and reporting |
| Automation engine | Rule-based automations — triggers (ticket events, time-based, SLA breach), conditions, and actions (status change, notify, comment, Teams alert, assign) |
| Email channels | Turn a Microsoft 365 mailbox (OAuth) or any SMTP/IMAP inbox into a ticket queue; replies go out from the same address |
| Knowledge base | Markdown editor with live preview, full-text search, categories, draft/publish workflow, automatic article suggestions on new tickets |
| Customer portal | A clean self-service view where requesters submit and track their own tickets |
| Reports | Analytics dashboard with volume trends, status/priority/category/channel breakdowns, SLA performance, technician performance, CSV & PDF export |
| NetManager | Network documentation module — companies, sites, racks, devices, IP/VLAN management, switch ports, password vault, config backups (license-gated) |
| Security | Mandatory TOTP 2FA for staff, optional Microsoft SSO (Entra ID), rate-limited auth, revocable sessions, first-run setup token |
| CSAT | Post-resolution satisfaction surveys via signed, single-use links |
Architecture at a glance
NexaDesk ships as a Docker Compose stack:
┌──────────────────────────────────────────────────┐
│ nginx ← the only exposed port (80) │
│ ├── frontend (React SPA, prebuilt) │
│ └── /api → api (FastAPI) │
│ ├── PostgreSQL 16 (data) │
│ ├── Redis (cache, queues, sessions) │
│ ├── worker (Celery — email, jobs) │
│ └── beat (Celery — schedules) │
│ netmanager-api + netmanager-db (optional) │
└──────────────────────────────────────────────────┘
- Database: PostgreSQL 16, bound to localhost only. Data lives in the
pgdataDocker volume. - Migrations run automatically when the API starts — upgrades are hands-off.
- TLS: terminate HTTPS at your reverse proxy or tunnel (Cloudflare Tunnel, Traefik, nginx) in front of the stack.
User roles
| Role | Can do |
|---|---|
| Admin | Everything — settings, users, channels, automations, license |
| Technician | Work tickets, edit KB, view reports & assets, use NetManager |
| Requester | Use the customer portal: submit tickets, comment, read the KB |
Where to next?
- New install? Start with Installation, then the Setup Wizard.
- Just installed? Run through the First Steps Checklist.
- Something broken? See Troubleshooting.