Blazer on Ubuntu 24.04 on Azure User Guide
Overview
Blazer is an open source, self hosted business intelligence tool. You explore your data with SQL, turn queries into charts and dashboards, and set up data checks that alert you when something looks wrong. The cloudimg image runs Blazer 3.4.0 from the official ankane/blazer Docker image as a systemd service behind an nginx reverse proxy on port 80, bundles its own local PostgreSQL 16 database seeded with a sample dataset plus four example queries, a dashboard and a data check so the interface is populated the moment it boots, and, because Blazer has no built in authentication, protects it with nginx HTTP Basic auth using a username and password generated uniquely on the first boot of every VM. A fresh Rails secret and a fresh database password are also generated per VM. Backed by 24/7 cloudimg support.
What is included:
- Blazer 3.4.0 (MIT) run from the official
ankane/blazerDocker image, managed byblazer.service - Blazer published on port 80 via nginx, gated by HTTP Basic auth so the tool is not open to the internet
- A bundled local PostgreSQL 16 database that holds both Blazer's own metadata and a seeded sample dataset (users, orders, events)
- Four example queries (Orders per Month, Revenue by Status, Top Cities by Users, Weekly Signups), a Sales Overview dashboard and a data check, seeded so the interface shows real content immediately
- A unique Basic auth admin password, a unique Rails
SECRET_KEY_BASEand a unique PostgreSQL password generated on first boot, written to a root only credentials file postgresql@16-main.service,blazer.serviceandnginx.serviceas systemd units, enabled and active- 24/7 cloudimg support
Prerequisites
An active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region. Standard_B2s (2 vCPU / 4 GiB RAM) is a good starting point. NSG inbound: allow 22/tcp from your management network and 80/tcp for Blazer (front with TLS for public exposure - see Enabling HTTPS). The bundled PostgreSQL listens only on loopback and is never exposed.
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Blazer by cloudimg, and select Create. On Basics 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). Then Review + create -> Create.
Step 2 - Deploy from the Azure CLI
az vm create \
--resource-group <your-rg> \
--name blazer \
--image <marketplace-image-urn> \
--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 blazer --port 80 --priority 1010
Step 3 - Connect to your VM
ssh azureuser@<vm-public-ip>
Step 4 - Confirm the services are running
systemctl is-active postgresql@16-main.service blazer.service nginx.service
All three report active. On first boot the image generates a unique Basic auth admin password, a unique Rails secret and a unique database password.

Step 5 - Retrieve your admin credentials
Blazer has no built in login, so the cloudimg image puts it behind nginx HTTP Basic auth. The admin username and password are generated uniquely on the first boot of your VM and written to a root only file:
sudo cat /root/blazer-credentials.txt
This file contains BLAZER_URL, BLAZER_ADMIN_USER (admin) and BLAZER_ADMIN_PASSWORD. Store them somewhere safe - this is the credential you use to sign in to Blazer in your browser.

Step 6 - Check the health endpoint
nginx serves a static, unauthenticated health endpoint for load balancer probes (it returns 200):
curl -s -o /dev/null -w '%{http_code}\n' http://localhost/healthz
Step 7 - Confirm your credentials gate the tool
Blazer is fronted by HTTP Basic auth. A valid login returns 200, a missing or wrong password returns 401:
curl -s -o /dev/null -w '%{http_code}\n' -u 'admin:<BLAZER_ADMIN_PASSWORD>' http://localhost/queries
curl -s -o /dev/null -w '%{http_code}\n' http://localhost/queries
The first command prints 200, the second prints 401.
Step 8 - Open Blazer in your browser
Browse to http://<vm-public-ip>/ and sign in with admin and the password from Step 5. The home page lists the seeded example queries and the Sales Overview dashboard:

Open the Orders per Month query to see its SQL and the result. Blazer automatically renders a time series result as a chart above the results table:

Open Revenue by Status to see a two column result rendered as a column chart. Every query keeps its SQL editable at the top, so you can tweak the statement and re-run it:

Open the Sales Overview dashboard to see several queries laid out together on one page - the starting point for building your own dashboards:

Step 9 - Inspect the seeded queries and sample data
Blazer stores its saved queries, dashboards and checks in the bundled PostgreSQL database, alongside the sample dataset those queries run against. List the seeded queries and run one of them directly:
sudo -u postgres psql -d blazer -c 'SELECT id, name, data_source FROM blazer_queries ORDER BY id;'
sudo -u postgres psql -d blazer -c 'SELECT status, round(SUM(amount)) AS revenue FROM orders GROUP BY 1 ORDER BY 2 DESC;'
The first command lists the four example queries; the second runs the same aggregation the Revenue by Status query uses, against the seeded orders table.

Step 10 - Create your own query
In the browser, click New Query, give it a name, write a SELECT statement and click Run. Blazer shows the results as a table and, when the shape suits it (a time column with numbers, or a label column with a single numeric column), as a chart. Save the query, then add it to a dashboard from the dashboard's Edit view. You can also create a check on any query so Blazer alerts you when the result changes unexpectedly.
Point Blazer at your own database
The image ships a bundled PostgreSQL database seeded with sample data so Blazer works out of the box. Blazer's default data source, main, points at that same database via the DATABASE_URL in the environment file on the VM. To query a different database, add another data source.
Blazer reads its data sources from DATABASE_URL and, for additional sources, from a blazer.yml config. The simplest approach is to point the default source at your own database by editing the environment file /var/lib/blazer/blazer.env and setting a new DATABASE_URL:
DATABASE_URL=postgres://readonly_user:your-db-password@your-db-host:5432/your_database
Use a read only database user for reporting. After changing the environment file, restart Blazer so the container picks up the new connection:
sudo systemctl restart blazer
Blazer supports PostgreSQL, MySQL and many other data sources; see the Blazer documentation for adding multiple named data sources via blazer.yml, statement timeouts, caching and smart variables.
Security notes
- No default login ships in the image. The Basic auth admin password, the Rails
SECRET_KEY_BASEand the PostgreSQL password are all generated uniquely on the first boot of every VM. The admin login lives in/root/blazer-credentials.txt(mode0600, root only). - Blazer is only reachable through nginx on port 80. The Blazer container is bound inside the host and the bundled PostgreSQL listens only on loopback (
127.0.0.1:5432); neither is exposed to the network. Keep your NSG limited to22/tcpand80/tcp(or443/tcponce you enable TLS). - Blazer runs SQL you write against your data sources. Point it at read only database users and restrict who can reach the tool.
Enabling HTTPS
For production, front Blazer with TLS. Point a DNS record at the VM, open 443/tcp on the NSG, then install a certificate with Certbot and the nginx plugin:
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.com
Certbot obtains a certificate, updates the nginx site to serve HTTPS and sets up automatic renewal.
Maintenance
Check the Blazer container and tail its logs:
docker ps --filter name=blazer
sudo journalctl -u blazer.service -n 50 --no-pager
Restart or stop the service with sudo systemctl restart blazer or sudo systemctl stop blazer. The bundled database is a standard PostgreSQL 16 cluster - back it up with sudo -u postgres pg_dump blazer. OS security updates are applied automatically by unattended upgrades.
Support
This image is maintained by cloudimg with 24/7 support. For help, contact support through the cloudimg listing on the Azure Marketplace.