Hosting on Azure

You can deploy a complete Netzilo Server into your own Azure subscription from the Azure Marketplace. A guided wizard (a managed application) creates the virtual machine, its network, a static public IP and the network security group, installs everything on first boot and gets a free HTTPS certificate. You fill in the wizard, point your domain at the new IP and sign in.

The Netzilo listing on the Azure Marketplace View Netzilo on the Azure Marketplace

How it works

The managed application deploys into your subscription:

  • a virtual machine with a 30 GB Premium SSD, from the Netzilo image. It runs ten containers: the dashboard, management, signal, the identity provider, the relay, the database, the cache, the HTTPS front door, the AI Assistant's worker and the clientless-access gateway on port 8443. With a published applications domain, an eleventh container serves published applications;
  • a virtual network, a static public IP and a network security group with the ports listed in Ports;
  • a system-assigned identity for the VM with Reader on the resource group, which metering uses to find the managed application.

On first boot the VM installs the server from the images on its disk; nothing is downloaded. Every image is pinned to a fixed version. The database runs on the VM: the wizard has no external database option.

Billing is per named user, per hour, through Azure Marketplace. Only people count: Agents (non-login service users) are not billed. After the first sign-in the account runs as Enterprise, with every feature and no limits.

Before you start

  • An Azure subscription.
  • A domain you can add DNS records to, for example go.example.com.
  • Optional: a second domain for published applications, for example apps.example.com, see Published applications.
  • Optional: an SSH public key for signing in to the VM later. You can choose a password in the wizard instead.

Step 1: Deploy from the wizard

  1. In the Azure portal, open Marketplace, search for Netzilo, open the listing and select Create.
  2. Fill in the wizard.

Basics. Choose the Subscription, Resource group and Region, then:

FieldWhat to enter
Domain (FQDN)For example go.example.com
Published applications domain (optional)For example apps.example.com. Leave empty to skip
Admin email (login)Your sign-in name, for example alice@example.com
Admin first name, Admin last nameThe first administrator
Admin password, Confirm admin passwordAt least 12 characters, with an uppercase letter, a lowercase letter, a number and a symbol

Virtual machine. Choose the VM size (the recommended default suits most cases, see Sizing), the OS login username (SSH) (default azureuser), and an SSH public key or a password.

Network & access. Allowed admin source CIDR is the range allowed to use SSH, for example 203.0.113.5/32. The default * allows any address. It limits only port 22: the dashboard on ports 80 and 443 is always public.

  1. Give the deployment an Application name, accept the Managed resource group, then select Review + create and Create.

Step 2: Point your domain at the server

When the deployment finishes, open its Outputs:

OutputUse
publicIpAddressThe server's static public IP
dashboardAddressThe address to open once DNS is set
sshCommandHow to sign in to the VM
dnsReminderThe DNS record the server expects

Create the DNS A record go.example.com A <publicIpAddress>. For published applications, also create *.apps.example.com A <publicIpAddress>. The server gets its certificate within a few minutes after the record resolves.

Step 3: Sign in

Open https://go.example.com and sign in with the admin email and password you entered. You are not asked to change the password. A certificate warning means DNS has not reached the server yet or the certificate is still being issued: check the A record, wait a minute and reload.

After the first sign-in

There is one server and no high availability; you recover by restoring a backup to a new deployment.

Manage the server

Sign in over SSH with the username and key or password you set: ssh azureuser@<publicIpAddress>. The sign-in message shows the admin credentials, which are also in /opt/netzilo/CREDENTIALS. Nothing is published back to Azure. The compose folder is /opt/netzilo/run, and first-boot setup logs to /var/log/netzilo-firstboot.log.

cd /opt/netzilo/run
sudo docker compose ps          # what's running
sudo docker compose logs -f     # follow logs

Every image on the server is pinned to a fixed version, so docker compose pull changes nothing. To update, follow Upgrade and add components. Never delete /opt/netzilo/.provisioned or run first boot again: that installs a new, empty server over the existing one.

Sizing

VM sizevCPUMemoryGood for
Standard_D2s_v5 (recommended)28 GBMost deployments, up to a few hundred devices
Standard_D4s_v5416 GBLarger networks or heavier relay traffic

The disk is 30 GB. Watch its use (df -h /); 40 GB is recommended for long-running servers.

Ports

The deployment creates the network security group. For reference:

Port(s)ProtocolSourcePurpose
22TCPAllowed admin source CIDRSSH
80TCPPublicCertificate validation and the redirect to HTTPS
443TCPPublicDashboard, API, sign-in, and the connection devices keep to the server
3478TCP and UDPPublicSTUN and TURN
5349TCP and UDPPublicTURN over TLS
49152-65535UDPPublicRelay allocations
8443TCPPublicClientless-access gateway

Deployments from older versions lack port 8443. Add the rule to the deployment's network security group (pick a free priority):

az network nsg rule create -g <resource-group> --nsg-name <nsg> -n Allow-Gateway-8443 \
  --priority 1010 --direction Inbound --access Allow --protocol Tcp --destination-port-ranges 8443

The VM also needs outbound HTTPS to the Azure Marketplace metering endpoint; the default outbound rule allows it.

Troubleshooting

A certificate warning in the browser. DNS does not point at the VM's public IP yet, or the certificate is still being issued. Check the A record against the publicIpAddress output, wait a minute and reload.

The dashboard does not load. First boot is still running. Wait a few minutes after the deployment finishes, and check /var/log/netzilo-firstboot.log.

SSH does not connect. The allowed admin source CIDR does not include your address. Widen it, or connect from an allowed address.

Browsers with the extension show "Private access: unavailable". Port 8443 is not open on an older deployment. Add the rule above.

Relayed devices cannot pass traffic. Check that 49152-65535/udp is open. If it is, add external-ip=<public IP>/<private IP> to /opt/netzilo/run/turnserver.conf and run sudo docker compose restart coturn in /opt/netzilo/run.

For other problems, see Troubleshooting. Need help? Write to support@netzilo.com.