Skip to content

⚙️ Configuration reference

Everything configurable lives in two places: config/site.env (your instance's values — hosts, URLs, keys, paths; gitignored) and config/*.yaml (the product's own declarations — jobs, events, schema; versioned). Validate your instance any time with nocloud config check.

config/site.env — your instance

Created by nocloud setup (or by hand from config/site.env.example). Read by every Python script via scripts/site_config.py and sourced by the shell scripts. The schema (config/schema.yaml) validates each key and marks which ones are secret, so nocloud config list masks them.

Key What it is
SERVER_HOST / SERVER_USER the server's LAN IP and SSH user
SERVER_SSH optional SSH target override (default SERVER_USER@SERVER_HOST)
NOCLOUD_NGINX_CONFIG / NOCLOUD_NGINX_CONTAINER override the nginx config path/container name auto-discovered during deploy — leave blank unless your instance uses different names
ACME_MODE / DNS_PROVIDER / CERT_EXTRA_DOMAINS how HTTPS certificates are issued — see Network
WG_ENABLED / WG_PORT / WG_SUBNET / WG_ENDPOINT / WG_LAN the WireGuard remote-access tunnel — see Network
IMMICH_URL / IMMICH_KEY Immich API base (default http://SERVER_HOST:2283) and API key
IMMICH_PUBLIC_URL optional public Immich URL used for click-through links
WEBMAIL_URL / WEBMAIL_PUBLIC_URL webmail base (default http://SERVER_HOST:8888) and its public URL
DOMAIN / EMAIL your domain and main email address
MAIL_DOMAIN / MAIL_FROM / MAIL_SIGNATURE the product's outgoing mail (validation links, notices)
SITE_URL public portal URL, used in links
MAC_API_URL legacy name for the workstation editor/sending API as seen from the LAN (default port 8055)
MAC_DAEMON_URL / MAC_DAEMON_TOKEN legacy names for the workstation runtime daemon as seen from the LAN (default port 8765) and its shared token — required for the "↻ Refresh" buttons
OLLAMA_URL / COACH_MODEL Ollama chat endpoint for Rule Coach's NL→DSL step, as seen from the LAN (default http://localhost:11434/api/chat, qwen2.5:7b) — fully local, no cloud API
NOCLOUD_TRUST_PROXY_AUTH trust the Remote-User header — only behind Authelia or equivalent forward-auth
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASS_FILE your local SMTP relay (Proton Bridge by default: 127.0.0.1:1025)
LOCAL_USER / MAC_HOME / NOCLOUD_HOME the workstation user and paths (MAC_* names are retained for compatibility)
ARCHIVE_ROOT / IMMICH_BACKUP_DIR / MAIL_LOCAL_DIR where the ordered archive, the Immich backup and the local mail live
BACKUP_DEST the external disk backup_local.sh snapshots to and nocloud restore reads from; while unset, nocloud doctor's backup snapshot check fails with "no backup destination configured"
SERVER_HOME / SERVER_PORTAL the server's home and the portal's web root

Warning

nocloud setup writes the network and path keys it can detect (including MAC_DAEMON_URL; it leaves MAC_DAEMON_TOKEN empty, only needed when the daemon listens beyond loopback). SERVER_SSH, IMMICH_PUBLIC_URL and NOCLOUD_TRUST_PROXY_AUTH are optional keys you add by hand (or with nocloud config set) when you need them. The certificate and WireGuard keys (ACME_MODE through WG_LAN) are asked by the install wizard and stay editable afterwards from Settings → Network — see Network — rather than hand-edited.

Rule Coach's local model needs a one-time pull

OLLAMA_URL/COACH_MODEL only point at where Ollama should be — nothing installs Ollama or downloads the model for you. On the machine OLLAMA_URL resolves to (the workstation, by default), one time:

brew install ollama && ollama serve &   # or: your platform's Ollama install
ollama pull qwen2.5:7b
nocloud doctor includes a low-severity "ollama model pulled (Rule Coach)" check so a missing or unpulled model shows up there instead of only failing the first time you actually try to coach a rule.

config/*.yaml — the product's declarations

These files ship with the product and are versioned; you rarely edit them, but they're where the platform's behavior is declared rather than hardcoded.

File What it declares
schema.yaml every valid site.env key: type, required, secret, group — what nocloud config check validates against
jobs.yaml the job registry: every scheduled task with its schedule, host, timeout and output
events.yaml the audit event vocabulary (kinds, severities)
triggers.yaml event → job automations (on: <kind> plus optional field filters)
runtime.yaml runtime knobs: state directory, daemon port, required services
upgrade.yaml the upgrade lifecycle's phases, in order
backup_manifest.yaml the backup contract: which items must exist in a backup for it to count
integrations.yaml the third-party adapters (Immich, Home Assistant, docker, systemd…) and whether each is required
datasets.yaml the dataset definitions (table, columns, conflict key) connectors write through

Default ports

Port Service Where
8765 nocloud daemon (runtime API) workstation, loopback by default
8055 MAC_API_URL (editor/sending API) workstation
1025 SMTP relay (Proton Bridge) workstation, loopback
2283 Immich home server
8888 Webmail home server
8123 Home Assistant home server
9092 / 9093 / 9095 permissions API / settings API / ingest service home server, loopback behind nginx
80 / 443 nginx portal home server
51820/udp WireGuard VPN home server, public when remote access is enabled
22 SSH (key-only) home server, LAN/VPN

The security panel flags anything else listening publicly — see Security & privacy.