Skip to documentation
Docs Self-host Nook
Browse documentation
Self-hosting · Step 1

Plan a self-hosted deployment

Make the infrastructure, privacy, availability, and ownership decisions before copying the first installation command.

Decide whether self-hosting is the right product

Choose self-hosting when your organization needs Nook application data to remain on infrastructure it operates. Self-hosting transfers daily operations to you: host security, DNS, TLS, capacity, backups, recovery testing, upgrades, and incident response.

Choose Nook Cloud when you want a ready service and do not have an operator who can own those responsibilities. A Customer Portal self-host organization and a Nook Cloud organization are separate product records; selecting one does not silently create the other.

Supported topology

The supported baseline is one Nook deployment, one runtime organization. That organization may contain multiple workspaces. The Customer Portal organization represents the commercial owner; its Portal members do not automatically become users on the self-hosted server.

The supported topology uses these components. The signed Nook application release runs API, admin, PostgreSQL, and Redis. On a clean dedicated host, nookctl installs and manages Ubuntu’s Caddy package as the public HTTPS ingress. LiveKit remains a separate customer-operated or managed media authority; the Nook installer does not silently deploy or expose it.

ServiceResponsibilityExposure
Nook APIAuthentication, messages, files, apps, realtime coordinationBehind your HTTPS reverse proxy
Nook adminLocal owner and workspace administrationBehind your HTTPS reverse proxy
CaddyTLS, API/WebSocket proxy, admin proxy, optional web redirectHost ports 80/443 (or explicitly chosen ports)
PostgreSQL 16Durable application dataPrivate Docker network only
RedisEphemeral coordination and queuesPrivate Docker network only
LiveKitVoice and meeting mediaSeparate public WSS and WebRTC media endpoints

Do not publish PostgreSQL or Redis to the internet. Do not run two active deployments against the same database or copy a deployment without the documented fork/recovery process.

Host requirements

Start with a dedicated Ubuntu Server 24.04 LTS host on x86_64. This is the only currently verified customer baseline. Before changing package sources or installing anything, the connected installer rejects another OS/version or architecture, less than the 8 GiB assigned-memory boundary, less than 40 GiB of operational free space on /, or a system clock that is not NTP-synchronized. The protected installer also needs disk-backed staging. For a clean install where /var/tmp shares the root filesystem, the first Portal command requires 40 GiB plus four times the exact displayed installer-artifact bytes. When /var/tmp is a separate filesystem, / needs 40 GiB and /var/tmp needs the four-times-artifact staging amount. After the exact download is verified, the command checks the remaining space again against twice the verified expanded archive size. Do not treat a fixed provisioned-disk size as the free-space guarantee; Portal displays the artifact-specific first gate before you copy the command. The release publisher also proves that remaining image bytes, the exact release-input snapshot, and the expanded inner release can coexist inside the 40 GiB host contract. A protected prepared resume checks those immutable snapshot and expanded-release bytes on /var/tmp and the actual /opt/nook/releases filesystem before downloading with a replacement one-use grant.

ResourceBaselinePlanning guidance
Memory8 GiBAdd headroom for larger workspaces, file processing, and concurrent meetings.
Disk40 GiB operational reserve plus protected stagingPortal shows the artifact-specific first gate; retain additional growth and backup headroom.
CPUModern 64-bit CPUReserve capacity for PostgreSQL and media coordination; avoid heavily oversold hosts.
ClockSynchronized UTC-capable clockCallback signatures, TLS, tokens, and release manifests are time-bound.
RuntimeDocker Engine with Compose v2Install only through nookctl prerequisites --install or your approved equivalent.

Use a separate disk or storage class for durable data when possible. A VM snapshot is useful for infrastructure recovery but is not a substitute for the Nook continuity dump and manifest.

DNS, TLS, and network

Allocate stable names before activation. A typical deployment needs two service names and may use one optional convenience alias:

app.nook.example.com   Admin and browser entry point
api.nook.example.com   API and realtime origin
www.nook.example.com   Optional redirect to the admin entry point
media.nook.example.com LiveKit media endpoint, when separated

Requirements:

  • Public HTTPS endpoints must have certificates trusted by desktop, mobile, and browser clients.
  • Public deployments point the API/admin DNS names at the Nook host and allow inbound TCP 80/443 so managed Caddy can obtain and renew certificates. A private-PKI deployment must explicitly trust its CA on every client; certificate checks are never bypassed.
  • Managed TLS requires DNS names in both modes. For an internal deployment, create private DNS records and select Internal TLS explicitly. Numeric IP origins are rejected because ordinary browser, desktop, and mobile TLS clients cannot reliably select Caddy’s IP certificate without SNI.
  • The configured canonical API origin must not change during an ordinary restore. An origin move is a migration/fork event, not a DNS-only recovery shortcut.
  • Preserve Authorization, WebSocket upgrade, forwarded protocol, and client IP headers according to the reverse-proxy runbook. Never log authorization values.
  • Expose only the HTTP(S), WebSocket, and LiveKit media ports required by the signed release.
  • Restrict SSH to operator networks and require key-based administrator access.

Mail and central notification gateway

Local account and invitation email must have an approved delivery path. Connected deployments also use Nook’s central notification gateway for the delivery classes explicitly documented by the product. This does not authorize importing message history, local members, or file content into the Customer Portal.

Before launch, prove all of the following with test recipients:

  • first-owner/account verification;
  • local member invitation;
  • passwordless or recovery email paths enabled by your configuration;
  • delivery failure handling and retry visibility;
  • correct sender domain, SPF, DKIM, and DMARC alignment for your chosen provider.

Data, storage, and privacy inventory

Record where each class lives and who can restore it:

Data classRequired protection
PostgreSQL dataEncrypted storage, continuity dump + manifest, off-host retention, restore drill
Uploaded filesDurable file volume/object store, separate backup, malware-scanning policy
ConfigurationRoot-readable protected backup, reviewed after each release
Runtime secretsSecret store or root-only files; never in Git, Portal notes, or support bundles
Deployment private keysLocal-only custody, protected backup if the relevant recovery contract permits it
LogsRetention and access policy that avoids message bodies, tokens, and credentials

Connected operational sharing is opt-in and privacy-minimized. Read the exact disclosure in the Customer Portal before enabling it.

Backup and recovery objectives

Choose explicit targets before launch:

  • RPO: maximum acceptable data loss, which determines backup frequency.
  • RTO: maximum acceptable downtime, which determines restore automation and operator coverage.
  • Retention: how many daily, weekly, and pre-update backups remain available.
  • Off-host copy: a failure of the Nook host must not erase every backup.
  • Restore floor custody: retain the greatest deployment revision observed outside the backup so an old restore cannot silently serve stale authority.

PostgreSQL and uploaded-file backups are separate and are not an atomic snapshot. Document how your organization coordinates them and what data window is acceptable.

Commercial and operator ownership

Assign these roles even if one person holds several:

  • Customer Portal primary owner: controls organization ownership and commercial authority.
  • Deployment operator: has server root access and performs install/update/recovery.
  • Local Nook owner: manages workspaces and invites on the installed instance.
  • Backup custodian: can retrieve protected backups and trusted revision-floor evidence.
  • Security contact: receives critical release mail and owns incident decisions.

Primary owners and owners receive routine, important, and critical self-host release messages by default. Routine/important mail can be disabled; critical security or compatibility notices cannot be disabled for eligible owner roles.

Pre-install checklist

  • Ubuntu Server 24.04 LTS x86_64 host, 8 GiB memory, 40 GiB operational free space plus the Portal-displayed protected staging requirement, synchronized clock.
  • DNS and trusted TLS certificates are ready.
  • PostgreSQL/Redis remain private; firewall and SSH policy reviewed.
  • Mail provider and sender-domain authentication are ready.
  • Off-host database, file, configuration, and key retention is documented.
  • RPO, RTO, retention, restore floor, and recovery operator are assigned.
  • Customer Portal organization and paid self-host entitlement exist.
  • Connected versus air-gapped delivery is explicitly selected.
  • Local owner identity and first workspace name are agreed.
  • A maintenance window exists for installation and the first recovery drill.

When every item is owned, continue to Install and activate Nook.

Was this guide clear?

Keep commands tied to your Customer Portal values and never paste secrets into support requests.