Voila
Overview
Voila turns a Jupyter notebook into a standalone, interactive dashboard web app. It runs the notebook on a live Python kernel and serves only the rendered output (charts, tables and interactive widgets), so anyone can open the result in a browser without seeing or editing the source code. Because the kernel stays running, ipywidgets controls such as sliders and dropdowns stay interactive and re-render results in real time over a websocket.
This SecureAnyCloud image installs Voila 0.5.12 in a dedicated Python virtualenv. It serves a bundled ipywidgets demo dashboard as a systemd service bound to loopback, behind an nginx reverse proxy on port 80 with HTTP Basic authentication.
What you get:
- Voila 0.5.12 in a Python virtualenv at
/opt/voila/venv, with ipywidgets, ipykernel, numpy, matplotlib and pandas - A bundled interactive demo dashboard at
/opt/voila/demo.ipynb: an ipywidgets notebook whose sliders drive a live matplotlib chart - nginx on
:80in front of the loopback Voila server, with HTTP Basic authentication and websocket proxying (Voila uses a websocket for the live kernel) voila.serviceandnginx.serviceas enabled, active systemd units- A unique Basic-auth password generated on the first boot of every VM
- 24/7 SecureAnyCloud support
Prerequisites
You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.
Standard_B2s (2 vCPU / 4 GiB RAM) is a good starting size. Choose a larger size for heavier notebooks.
Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for the dashboard. For public exposure, put TLS in front of the dashboard (see Enabling HTTPS).
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Voila by SecureAnyCloud, and select Create.
On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80).
Select Review + create, then Create.
Step 2 - Deploy from the Azure CLI
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:voila-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name voila \
--image sac1647283583153:voila-ubuntu-24-04:default:latest \
--size Standard_B2s \
--admin-username azureuser \
--ssh-key-values ~/.ssh/id_ed25519.pub \
--vnet-name <your-vnet> --subnet <your-subnet> \
--public-ip-sku Standard
az vm open-port --resource-group <your-rg> --name voila --port 80 --priority 1010Step 3 - Connect to your VM
Connect to the VM over SSH as azureuser.
ssh azureuser@<vm-public-ip>Step 4 - Confirm the services are running
Check that both services are active:
systemctl is-active voila.service nginx.serviceBoth services report active. Voila binds the notebook server to loopback 127.0.0.1:8866, and nginx publishes it on port 80. Because of the loopback binding, the only public surface is the authenticated nginx proxy.
Step 5 - Retrieve your password
Your VM generates a unique admin password on first boot and writes it to a root-only file. Read the file with sudo:
sudo cat /root/voila-credentials.txtThe file contains VOILA_ADMIN_USER (admin), VOILA_ACCESS_PASSWORD and the dashboard URL. Store the password somewhere safe.
Step 6 - Check the health endpoint and the auth wall
nginx serves an unauthenticated health endpoint for load balancers and probes. Every other path requires the per-VM password. Query the health endpoint:
curl -s http://localhost/healthIt returns ok. Requesting the dashboard itself without credentials returns 401. With the per-VM password, it returns 200.
Step 7 - Open the interactive dashboard
Browse to http://<vm-public-ip>/ and sign in as admin with the password from Step 5. Voila runs the bundled notebook and serves it as an interactive dashboard with a title, slider controls and a live chart. No code cells are visible.
Move the Frequency, Amplitude or Noise slider and the chart re-renders instantly. The ipywidgets controls stay live because Voila keeps the Jupyter kernel running behind the scenes.
matplotlib draws the chart inside the running kernel and streams it to the browser as it updates.
Step 8 - Confirm the dashboard from the command line
Voila serves the rendered dashboard behind the same Basic authentication. Replace <VOILA_ACCESS_PASSWORD> with the password from Step 5, then confirm the dashboard is serving:
curl -s -u admin:<VOILA_ACCESS_PASSWORD> http://localhost/ | grep -oiE 'voila|jupyter-widgets|Interactive Dashboard' | sort | uniq -cThe rendered page carries the Voila runtime, the jupyter-widgets manager and the dashboard title. This shows that a live kernel executed the notebook and served it as HTML.
Voila has no login of its own, so the nginx proxy is the only trust boundary. Without the per-VM password, every request is rejected.
Step 9 - Serve your own notebook
Voila serves a single notebook at /opt/voila/demo.ipynb. To publish your own dashboard, replace that file with any Jupyter notebook (.nbconvert-compatible, using ipywidgets for interactivity). Then restart the service:
# copy your notebook in, keeping the same path voila serves:
sudo cp my-dashboard.ipynb /opt/voila/demo.ipynb
sudo chown voila:voila /opt/voila/demo.ipynb
sudo systemctl restart voilaTo add Python packages your notebook needs, install them into the bundled virtualenv:
sudo /opt/voila/venv/bin/pip install <your-packages>
sudo systemctl restart voilaVoila re-executes the notebook on each page load, so visitors always see your latest saved version.
Enabling HTTPS
The nginx reverse proxy serves plain HTTP on port 80. For public exposure, add a DNS name for the VM and put a certificate in front of the proxy. You can use the companion SecureAnyCloud nginx-ssl-certbot image as a TLS reverse proxy, or install certbot and extend the existing nginx site with a listen 443 ssl; server block.
Keep Voila bound to loopback, so the only public surface is the authenticated, TLS-terminated proxy. The proxy already forwards the websocket that Voila needs for its live kernel.
Maintenance
- Your dashboard: replace
/opt/voila/demo.ipynb(owned byvoila:voila), then runsudo systemctl restart voila. - Packages: install into
/opt/voila/venvwith itspip. - Password: the per-VM password lives in
/root/voila-credentials.txt. To rotate it, regenerate the htpasswd entry withsudo htpasswd -B /etc/nginx/.htpasswd admin. - Upgrades: run
sudo /opt/voila/venv/bin/pip install -U voila, thensudo systemctl restart voila. - Security patches: unattended-upgrades stays enabled, so the OS keeps receiving security updates automatically.
Support
SecureAnyCloud provides 24/7 support for this image. For questions about Voila or help with your deployment, contact sales@secureanycloud.com.
Deploy on Azure
Launch Voila on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com