Apache Zeppelin
Overview
Apache Zeppelin is the open-source, web-based notebook that brings interactive data analytics and collaborative documents to your browser. It runs paragraphs of code against pluggable interpreters and renders the results as tables and charts inline, so data engineers and analysts can explore data, build visualisations and share reproducible notebooks.
The SecureAnyCloud image installs Apache Zeppelin 0.12.1 on OpenJDK 11 at /opt/zeppelin and runs it as a dedicated zeppelin system user. It fronts the notebook UI with an nginx reverse proxy on TCP 80, enables Apache Shiro authentication, keeps notebooks and configuration on a dedicated Azure data disk, and generates a unique admin password on the first boot of every VM.
What you get:
- Apache Zeppelin 0.12.1 notebook server on OpenJDK 11 at
/opt/zeppelin - nginx reverse proxy on
:80in front of the notebook UI (bound to loopback:8080) - Apache Shiro authentication enabled, anonymous access disabled
- Bundled Spark, JDBC, Python, shell, markdown and many more interpreters
- A dedicated Azure data disk at
/var/lib/zeppelinholding notebooks and configuration, separate from the OS disk and re-provisioned with every VM - A per-VM admin password (
ZEPPELIN_ADMIN_PASSWORD) generated at first boot and stored in a root-only file zeppelin.serviceandnginx.serviceas systemd units, enabled and active- 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_B4ms (4 vCPU / 16 GiB RAM) is a good starting point, because the bundled Spark interpreter needs memory. Scale up for larger datasets.
Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for the notebook UI. For public exposure, front the UI with TLS (see Enabling HTTPS).
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Apache Zeppelin 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).
Review the dedicated data disk on the Disks tab, then select Review + create and 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:apache-zeppelin-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name zeppelin \
--image sac1647283583153:apache-zeppelin-ubuntu-24-04:default:latest \
--size Standard_B4ms \
--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 zeppelin --port 80 --priority 1010Step 3 - Connect to your VM
ssh azureuser@<vm-public-ip>Step 4 - Confirm the services are running
systemctl is-active zeppelin.service nginx.serviceBoth services report active. The notebook server runs on a JVM and can take up to a minute to finish warming up on first boot.
Step 5 - Retrieve your admin password
Your VM generates a unique admin password on first boot and writes it to a root-only file. Read the file:
sudo cat /root/zeppelin-credentials.txtThe ZEPPELIN_ADMIN_PASSWORD value is the password. Use it to sign in to the notebook UI as admin.
Step 6 - Confirm the Zeppelin version
The notebook server exposes an unauthenticated version endpoint. Confirm that it reports 0.12.1:
curl -s http://127.0.0.1/api/versionThe response is JSON with "status":"OK" and the running version in body.version.
Step 7 - Open the notebook UI
Browse to http://<vm-public-ip>/ and sign in as admin with the password from Step 5. Apache Shiro authentication is enabled, so anonymous access is disabled and you must log in.
After you sign in, you land on the Zeppelin home page, where you can create notebooks, browse the bundled interpreters and open the built-in tutorials.
Step 8 - Create your first notebook
Click Create new note, give it a name, and accept the default interpreter. Type a paragraph and press Shift+Enter to run it. For example, the markdown interpreter renders rich text inline:
%md
# Hello from Zeppelin This notebook is running on the sac Azure image.The notebook and its output are saved to the dedicated data disk at /var/lib/zeppelin/notebook, so they survive reboots and snapshots.
Step 9 - Use the bundled interpreters
The full bin-all distribution ships a wide set of interpreters out of the box. List them on the VM:
ls /opt/zeppelin/current/interpreter/You will see spark, jdbc, python, sh, md, flink, cassandra, mongodb, neo4j and many more. Bind the interpreter you want in the notebook's interpreter settings, then run paragraphs such as %python, %sh or %spark against it.
Enabling HTTPS
For production, terminate TLS at nginx with a real domain pointed at the VM's public IP. Install certbot and request a certificate. Replace the domain with your own:
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.comBackup and maintenance
Notebooks, interpreter state and configuration live on the dedicated data disk at /var/lib/zeppelin. Snapshot that disk in Azure to back up your saved notebooks. Keep the OS patched with sudo apt update && sudo apt upgrade. The notebook server restarts cleanly with sudo systemctl restart zeppelin.
Support
This image is backed by 24/7 SecureAnyCloud support. Contact us by email and chat for help with notebook configuration, interpreters, Spark tuning, authentication, TLS and backups.
All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.
Deploy on Azure
Launch Apache Zeppelin 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
Overview
This image runs Apache Zeppelin, the open-source web-based notebook that brings data ingestion, exploration, visualisation, sharing and collaboration into a single interactive interface. You write and run code in many languages against the bundled interpreters, render the results as rich charts and tables, and build shareable, paragraph-by-paragraph notebooks for data science and analytics.
The notebook server is a JVM application and is slow to start, taking roughly 45 to 90 seconds after first boot before the UI answers.
What you get:
- The Apache Zeppelin distribution under
/opt/zeppelin, running as a dedicated unprivilegedzeppelinsystem account under a systemd service that starts the notebook server on boot and restarts it on failure - A headless OpenJDK 11 runtime
- A dedicated, independently resizable EBS data volume mounted at
/var/lib/zeppelinfor the notebook directory, configuration and interpreter state, so your saved notebooks survive instance replacement - Apache Shiro form-based authentication with a single administrator account and a required login on every path. Apache Zeppelin allows anonymous access out of the box, but this image locks the notebook UI behind a sign-in
- A notebook server that binds to the loopback interface only (
127.0.0.1:8080) and is never exposed directly, plus an nginx reverse proxy that publishes the notebook UI on port 80 with the WebSocket upgrade support that the live editor needs - An admin password generated on the first boot of every deployed instance, so two instances launched from the same Amazon Machine Image never share a password. It is written to
/root/apache-zeppelin-credentials.txtwith mode 0600, so only the root user can read it
Prerequisites
Before you deploy this image, make sure you have:
- An Amazon Web Services account where you can launch EC2 instances
- IAM permissions to launch instances, create security groups, and subscribe to AWS Marketplace products
- An EC2 key pair in the target Region for SSH access to the instance
- A VPC and subnet in the target Region, with a security group that allows inbound port 22 from your management network and port 80 for the notebook UI
- The AWS CLI (version 2), installed locally, if you plan to deploy from the command line
Launch the instance from AWS Marketplace
Sign in to the AWS Management Console, open the EC2 service, and select Launch instance. Under Application and OS Images, choose AWS Marketplace AMIs and search for Apache Zeppelin. Select the SecureAnyCloud listing and choose Select, then Continue on the subscription summary.
Pick an instance type of t3.large or larger. Choose your EC2 key pair under Key pair (login). Under Network settings, select your VPC and subnet, and either create or select a security group that opens port 22 from your management network and port 80 for the notebook UI. Leave the root volume at the default size or larger.
Select Launch instance. First-boot initialisation generates the admin password. The JVM notebook server then takes roughly 45 to 90 seconds to become ready after the instance state becomes Running and the status checks pass.
Launch the instance from the AWS CLI
The following command launches an instance from the SecureAnyCloud Apache Zeppelin Marketplace AMI into an existing subnet and security group. Replace <ami-id> with the AMI ID shown on the Marketplace listing, <key-name> with your EC2 key pair name, <subnet-id> with your subnet ID, and <security-group-id> with a security group that opens ports 22 and 80 as described above.
aws ec2 run-instances \
--image-id <ami-id> \
--instance-type t3.large \
--key-name <key-name> \
--subnet-id <subnet-id> \
--security-group-ids <security-group-id> \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=apache-zeppelin}]'When the instance reaches the Running state and its status checks pass, note its public IP address or DNS name. Find it in the EC2 console or with aws ec2 describe-instances.
Connect to your instance
Connect over SSH using your key pair and the login user for your operating system variant.
OS variant SSH login user
Ubuntu 24.04 ubuntu
ssh -i <key-name>.pem ubuntu@<public-ip>Retrieve the admin password
The notebook admin password is unique to your instance and was generated on first boot. Read it as root with the command below. The file lists the notebook URL, the admin user (admin) and the generated password. Keep this password somewhere safe.
sudo cat /root/apache-zeppelin-credentials.txtConfirm Apache Zeppelin is running
Over SSH, confirm that the notebook server and the nginx proxy are active. The notebook server is a JVM application and is slow to start, so allow up to 90 seconds after boot before it answers.
sudo systemctl is-active zeppelin nginxBoth services should report active. The notebook server binds to loopback only and is fronted by nginx on port 80. Confirm that its liveness endpoint answers locally:
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/api/versionThis returns 200 once the notebook server has finished starting. The same endpoint is reachable through nginx at http://127.0.0.1/api/version.
Sign in to the notebook UI
nginx serves the Apache Zeppelin notebook UI on port 80, with Apache Shiro form-based authentication. In a browser, go to:
http://<instance-public-ip>/The browser redirects you to the sign-in page. Sign in as admin with the password from the credentials file. After you log in, you land on the Zeppelin home page, which lists your notebooks and offers Import Note and Create new Note.
Create and run a notebook
From the home page, choose Create new Note, give the note a name, pick a default interpreter and select Create. The note opens with an empty paragraph.
Type code into the paragraph and run it with the play control or with Shift+Enter. For a quick test, enter a Markdown paragraph:
%md
# Hello from sac Apache Zeppelin running through the nginx WebSocket reverse proxy.Running the paragraph drives the live editor over the WebSocket that nginx proxies to the notebook server. The rendered Markdown appears below the paragraph with a FINISHED status.
You can mix code, queries, Markdown and visualisations across paragraphs in the same note, and Zeppelin renders tabular output as interactive charts.
Configure interpreters
Apache Zeppelin ships with a rich set of interpreters for data work. Open the user menu at the top right and choose Interpreter to reach the interpreter settings page. Here you can search the bundled interpreters, edit their properties, restart an interpreter, and bind or unbind interpreters from your notes.
Each interpreter has its own properties, for example the connection details for a database interpreter or the master URL for the Spark interpreter. After changing an interpreter's properties, select Save and restart the interpreter so your notebooks pick up the new configuration.
Check the data volume
The notebook directory, configuration (shiro.ini, zeppelin-site.xml, zeppelin-env.sh), interpreter state and the local repo live on a dedicated EBS volume mounted at /var/lib/zeppelin. This keeps your notebooks off the operating system disk and lets you resize or snapshot them independently. Confirm the mount:
df -h /var/lib/zeppelinTo grow the store, expand the EBS volume in the AWS console, then grow the filesystem on the instance with sudo resize2fs on the underlying device. Because the notebooks and configuration live on this volume, they survive instance replacement when you re-attach or restore the volume.
Enable HTTPS
nginx serves the notebook UI over plain HTTP on port 80, so place it behind TLS for production use. Obtain a certificate for your domain, for example with a managed certificate on an Application Load Balancer in front of the instance, or with Certbot installed on the instance.
Then configure nginx to listen on 443 with your certificate and proxy to 127.0.0.1:8080 exactly as the bundled site does for port 80. Keep the WebSocket upgrade headers and the Apache Shiro login in place. Restrict the security group so that ports 80 and 443 are reachable only from the networks that use the notebook.
Backup and maintenance
Back up your notebooks and configuration by snapshotting the /var/lib/zeppelin EBS volume, which captures the entire data tier.
Apply operating system security updates with sudo apt-get update && sudo apt-get upgrade, and reboot when a new kernel is installed. Apache Zeppelin and nginx start automatically on boot, and the notebook server takes roughly 45 to 90 seconds to become ready again after a reboot.
Support
This image is published and supported by SecureAnyCloud. Support covers deployment, interpreter configuration, notebook authoring, Apache Shiro authentication, data source connectivity, TLS and JVM tuning. Contact SecureAnyCloud through the support channel listed on the AWS Marketplace listing.
All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.
Deploy on AWS
Launch Apache Zeppelin on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com