Onsites AI is 100% free forever — 3 seats and 100 MB included. Start free →
Learning Center

Self-hosted help desk in Docker: deploy on your own network

By the Onsites AI team · Last updated · 9-minute read

YOUR NETWORK — DATA NEVER LEAVES support.yourcompany.com app db · cache backup docker compose up -d AI, YOUR WAY own API key (OpenAI-compatible) internal model on your LAN air-gapped, fully offline no credit packs on this track $15/seat/mo · billed annually · 10-seat min · 60-day trial

Cloud support desks are the sensible default — until the day a compliance officer, a defense-adjacent customer, or a segmented factory network asks the question that ends the conversation: where exactly do our customer messages live? Self-hosting is the honest answer, and with Docker it is also a small one: a license file, one compose command, and a stack that runs fully disconnected forever. This guide walks the real deployment, including backups, upgrades and the AI-model question that trips most evaluations.

When self-hosting is the right call

Choose self-hosted when any of these is true: customer data is legally required to stay inside your network (banking, healthcare, government contractors); you operate on segmented or intermittent networks where SaaS is simply unreachable; or your procurement people price "annual per-seat line item" cheaper than any monthly subscription they must renew forever. Choose cloud when none of those apply — and note the choice is not permanent. The tracks come from one codebase: start free in the cloud, move behind your firewall when the trigger arrives.

What you need before starting

A 64-bit Linux host with Docker Engine 24+, and either a domain with TLS or internal DNS. Size by workload: teams to ~10 need 2 vCPU / 4 GB RAM / 40 GB disk; teams to ~50 need 4 vCPU / 8 GB / 100 GB; teams to ~200 need 8 vCPU / 16 GB / 250 GB. Disk grows with attachments only — text conversations are negligible, which surprises nobody who has ever watched message text fill a spreadsheet instead.

Licensing: trial first, pay never-if-not-convinced

Request an evaluation through the self-hosted form. After review you receive a license bound to your domain and capacity tier, delivered as a signed file loaded at first startup. Every self-hosted start begins as a 60-day trial of the full product with no payment up front — you only buy the 10-seat-minimum annual license when the pilot has actually convinced you. Note the licensing terms honestly stated: self-hosted licenses are final sale, not refundable.

The deployment itself

The stack ships as a set of container images with no external dependencies. Place your license file and environment file at /opt/onsites, set your domain and timezone in the .env, then bring it up:

docker compose -f /opt/onsites/compose.yaml up -d
# confirm health:
curl -fI https://support.yourcompany.com/health

After startup the experience matches the cloud exactly: create the admin account, connect channels, invite users — the same steps as the cloud setup guide, pointed at your own hostname. The website widget snippet now carries your desk URL, so the bubble on your site talks to the box in your rack, and nothing about the customer experience changes — that is the point of parity between tracks.

AI on your terms

Three endpoint choices, configured in Settings → AI: point the desk at an OpenAI-compatible endpoint with your own API key; run a model on infrastructure inside your network; or run fully air-gapped, with AI enabled only when an endpoint is available. Credit accounting mirrors cloud mechanics, but on this track you provide the AI and the storage — no credit packs and no storage packs are sold here. Your disks, your model, your spend.

Backups and upgrades

Backups run on your infrastructure with included scripts: docker exec onsites-backup /backup.sh writes an encrypted archive containing settings, conversations, documents and contact data; /restore.sh takes the archive back. Run the backup daily via cron — this is the one discipline that separates a self-hosted deployment you can lose from one you cannot.

Upgrades are two commands: docker compose pull then docker compose up -d. Upgrades are backward compatible within the supported major version, and tested upgrade paths are released for your review before applying as part of your plan — updates are included, not an additional SKU.

The whole bill, on one line

$15 per seat per month, billed annually, 10 seats minimum; installation, software updates and technical support included; you supply the model and the disks, so no AI or storage fees ever arrive on this track. Pilot it for 60 days before paying anything. If the economics of the comparison deserve their own read, the credit-math blog post and the monthly cost guide lay the numbers out. When your team is between the two tracks, the four-question checklist is the shortest honest answer.

Rollout notes from real deployments

Frequently asked questions

Can it run fully offline?
Yes — the software runs disconnected; AI activates whenever you attach a key, an internal model, or an air-gapped endpoint.

Who owns the data?
You do. Your LAN or your own cloud account, nothing leaves the network, and in self-hosted mode the vendor has no access.

Can we trial it before buying?
Every start is a 60-day trial of the full product, no payment up front; the 10-seat annual license comes only after the pilot convinces you.

Are self-hosted licenses refundable?
No — licenses are final sale, which is why the 60-day trial precedes any payment.

Request a 60-day pilot →  Read the deployment doc