Before You Deploy
Purpose
Force the decisions that change install path, privileges, and edition.
Decisions
- Edition. Community source build vs Enterprise verified-release. Do not mix binaries.
- Agent job. Observation on a hosting/panel node vs enforcement on a KVM/libvirt host. Do not attach a drop-capable firewall profile to a shared hosting node if you intend Hosting observation.
- TLS. Example Manager config enables TLS and expects
cert_file/key_file. Community does not automate issuance. - PostgreSQL. Host, database, role,
ssl_mode. Enterprise database admission expects literalhost,port,name,user,ssl_modeand a protected password contract — not a password on the command line. - Manager URL as Agents and
zwallctlwill call it. Example ishttps://manager.example.com:8443.zwallctldefault ishttp://localhost:8080until configured. - CORS origins. Example requires explicit
server.cors.allowed_origins. Wildcard is blocked in production/TLS mode. - Auto-register. Example
agents.auto_register: falseand comments say it must remain false in production. Plan pre-registration / admin-created enrollment. - AI Preview (Enterprise only). Off by default. Requires customer-provided OpenAI-compatible credentials. Do not enable until you have read AI Preview status.
- Backup. PostgreSQL logical backup scripts exist. Licensed Enterprise recovery also needs deployment identity and license files. See Backup.
- Path layout. In-tree units and examples do not use one filesystem prefix. Do not assume
/etc/zcseverywhere. The canonical filesystem layout remains an unresolved engineering gap, not a published customer contract.
What not to do
- Do not use
curl | sudo bashfromget.zwall.net. That installer is not a supported path. - Do not clone a private-source repository name as if it were Community.
- Do not enable
allow_insecure_remote_tlsexcept as break-glass (Agent example). - Do not store AI keys or Manager JWT secrets in YAML on Enterprise production (example YAML keeps those fields empty for systemd credentials).