Skip to content

Deployment Targets

Six variants. Pick one and skip the others. The /deploy-application skill is the interactive form of this page.

For teams with source access. From the root of the source tree:

Terminal window
dotnet run --project Zenvara/Zenvara.fsproj

For development machines and short-lived demos. Not a production target.

dotnet publish -c Release produces a self-contained binary. The zen CLI registers the service:

Terminal window
zen app fetch \
--url https://artifacts.example.com/zenvara-linux-x64.tar.gz \
--dir /opt/zenvara
zen service install \
--dir /opt/zenvara \
--port 5000 \
--service-user zenvara \
--data-dir /var/lib/zenvara
zen service start

The generated unit includes hardening flags — ProtectSystem=strict, PrivateTmp=true, NoNewPrivileges=true, RestrictNamespaces=true. Inspect with systemctl cat zenvara.service.

Same binary, same zen service install, registered via sc.exe. Most customers want a domain service account so the platform can reach SFTP and SQL with existing AD credentials.

Terminal window
zen service install `
--dir C:\Services\Zenvara `
--port 5000 `
--service-user .\SvcZenvara `
--service-password $password

For organisations standardised on IIS as the public-facing tier. The platform ships an AspNetCoreModule-compatible binary; the IIS site reverse-proxies to Kestrel.

Terminal window
zen iis install --dir C:\Services\Zenvara --port 5000

Kernel-mode authentication caveat: if you use Windows integrated auth on both the inbound IIS side and the platform side, configure them in the same authentication zone or you’ll see double-hop credential failures.

A multi-stage Dockerfile ships under .docker/:

Terminal window
docker build -f .docker/Dockerfile -t zenvara:local .
docker run -d \
--name zenvara \
-p 5000:5000 \
-v /srv/zenvara/data:/data \
zenvara:local

The container persists /data (storage, cache, logs, backups) on a named volume and emits a HEALTHCHECK against /health.

Single-replica StatefulSet with a PersistentVolumeClaim for data/, a Service on port 5000, and an Ingress terminating TLS. Treat the platform as the stateful workload it is — horizontal scaling is on the roadmap; for now, scale up, not out.