Blazer
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 SecureAnyCloud 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. Blazer has no built-in authentication, so nginx protects it with HTTP Basic auth. The username and password are generated uniquely on the first boot of every VM, along with a fresh Rails secret and a fresh database password.
What you get:
- 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 the moment it boots
- 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 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 point.
On the network security group (NSG), allow inbound 22/tcp from your management network and 80/tcp for Blazer. For public exposure, front Blazer with TLS (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 SecureAnyCloud, 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 choose Review + create -> 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:blazer-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name blazer \
--image sac1647283583153:blazer-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 blazer --port 80 --priority 1010Step 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.serviceAll 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 SecureAnyCloud 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.txtThe file contains BLAZER_URL, BLAZER_ADMIN_USER (admin) and BLAZER_ADMIN_PASSWORD. Store them somewhere safe. You use this credential 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/healthzStep 7 - Confirm your credentials gate the tool
nginx fronts Blazer with HTTP Basic auth. A valid login returns 200, and 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/queriesThe 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. It is a 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, then 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 as the Revenue by Status query, 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. When the shape suits it (a time column with numbers, or a label column with a single numeric column), it also shows 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 through 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. Edit the environment file /var/lib/blazer/blazer.env and set a new DATABASE_URL:
DATABASE_URL=postgres://readonly_user:your-db-password@your-db-host:5432/your_databaseUse a read-only database user for reporting. After you change the environment file, restart Blazer so the container picks up the new connection:
sudo systemctl restart blazerBlazer supports PostgreSQL, MySQL and many other data sources. See the Blazer documentation for adding multiple named data sources through blazer.yml, and for 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 reachable only 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 the SQL you write against your data sources. Point it at read-only database users and restrict who can reach the tool.
Enabling HTTPS
In production, front Blazer with TLS. Point a DNS record at the VM and 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.comCertbot obtains a certificate, updates the nginx site to serve HTTPS, and sets up automatic renewal.
Maintenance
Check the Blazer container and tail its logs:
sudo docker ps --filter name=blazer
sudo journalctl -u blazer.service -n 50 --no-pagerRestart 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. Unattended upgrades apply OS security updates automatically.
Support
SecureAnyCloud maintains this image and provides 24/7 support. For help, contact support through the SecureAnyCloud listing on the Azure Marketplace.
Deploy on Azure
Launch Blazer 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 guide covers the deployment and configuration of Blazer on AWS using SecureAnyCloud AWS Marketplace AMIs. Blazer is an open-source, self-hosted business-intelligence tool by Andrew Kane. You write SQL queries, turn them into charts and dashboards, and schedule data checks that alert you when a result looks wrong.
The SecureAnyCloud image ships the free, open-source, MIT-licensed Blazer 3.4.0 application. It runs the officially supported way, as the upstream ankane/blazer container backed by a bundled PostgreSQL 16 database. The image ships populated with a sample dataset, example queries and a dashboard, so the query editor, chart results and dashboards show real content the moment you sign in.
Blazer has no authentication of its own, because it expects the host application to protect it. This image therefore fronts it with an nginx reverse proxy on port 80 that gates every path behind HTTP Basic authentication. Nothing ships with a known secret. A unique admin password, a unique Rails application secret and a unique database password are generated for each instance on first boot, before the application is reachable. The admin password is written to a root-only file.
Blazer is a trademark of its respective owner. SecureAnyCloud produces this image and is not affiliated with, endorsed by, or sponsored by the Blazer project or Andrew Kane. It ships the free, open-source, MIT-licensed self-hosted software, unmodified.
What you get:
- Blazer 3.4.0 (the MIT-licensed SQL and business-intelligence application), run as the official
ankane/blazercontainer - A bundled PostgreSQL 16 database, listening on the loopback interface only, holding Blazer's own metadata and a seeded sample dataset
- A sample dataset (users, orders and events) plus four example queries, a Sales Overview dashboard and a data check, so the UI is populated out of the box
- Docker Engine, with the Blazer container reachable only through the nginx reverse proxy
- nginx on port
80as the single public front door, gating every path behind HTTP Basic auth, with an unauthenticated/healthzendpoint for load-balancer probes docker.service,postgresql@16-main.service,blazer-firstboot.service,blazer.serviceandnginx.serviceas systemd units, enabled and active on boot- A unique admin password, a unique Rails application secret and a unique database password generated per instance on first boot, never baked into the image
- No default login and no shipped secret: the built image carries no working credential
- Ubuntu 24.04 LTS base with latest security patches applied at build time
- 24/7 SecureAnyCloud support with a guaranteed 24-hour response SLA
Prerequisites
- An active AWS account and an EC2 key pair in your target region
- A subscription to the Blazer listing on AWS Marketplace
- A VPC and subnet, and a security group that allows inbound
22/tcp(SSH, from your admin network) and80/tcp(the web interface, from the networks that use it). Add443/tcpif you enable HTTPS.
Recommended instance type: m5.large (2 vCPU, 8 GB RAM) is a sensible starting point. Blazer and its bundled database are lightweight, so a general-purpose instance is ample. Size up for very large result sets or many concurrent users.
Connecting to your instance
This listing offers one or more operating-system variants. Connect over SSH as that variant's default login user, using your EC2 key pair.
For Ubuntu 24.04 LTS, the SSH login user is ubuntu. For example: ssh -i your-key.pem ubuntu@<instance-public-ip>
Subscribe and launch from AWS Marketplace
Sign in to the AWS Marketplace and search for Blazer by SecureAnyCloud. Choose Continue to Subscribe, then Continue to Configuration, then Continue to Launch.
Pick your region, the m5.large instance type, your VPC and subnet, and your EC2 key pair. Choose a security group that allows SSH (22) from your admin network and HTTP (80) from the networks that use the app. Then launch the instance.
Launch from the AWS CLI
You can also launch the AMI directly. Resolve the product AMI id for your region from the listing, then run:
REGION="us-east-1" AMI_ID="<ami-id>"
# the Blazer AMI id for your region KEY_NAME="your-key" SG_ID="sg-xxxxxxxx"
# allows 22 from <your-mgmt-cidr> and 80 from your users SUBNET_ID="subnet-xxxxxxxx" aws ec2 run-instances --region "$REGION" \
--image-id "$AMI_ID" --instance-type m5.large \
--key-name "$KEY_NAME" --security-group-ids "$SG_ID" --subnet-id "$SUBNET_ID" \
--metadata-options 'HttpTokens=required,HttpEndpoint=enabled' \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=blazer}]'On first boot, the image resolves its public URL from EC2 instance metadata (IMDSv2). The interface is then reachable at the instance's public address with no extra configuration.
Connect to your instance
ssh -i your-key.pem ubuntu@<public-ip>Confirm the services are running
Blazer runs as a container under blazer.service, backed by the bundled PostgreSQL database and fronted by nginx. Confirm that the services are active and that the container is running:
sudo systemctl is-active docker postgresql@16-main nginx blazer
sudo docker ps --format 'table {{.Image}}\t{{.Status}}\t{{.Names}}'Expected output:
active active active active IMAGE STATUS NAMES ankane/blazer:latest Up 3 minutes blazerThe Blazer container is published inside the host network namespace on 127.0.0.1:8080, and PostgreSQL listens on 127.0.0.1:5432. Neither is reachable from the network. nginx on :80 is the single public front door.
Read the per-instance credentials
On the first boot, before the application was reachable, this instance generated a unique admin password, a unique Rails application secret and a unique database password. It wrote the admin password to a root-only file. Read the file:
sudo cat /root/blazer-credentials.txtThe file shows the instance URL and the admin login:
BLAZER_URL=http://<instance-public-ip>/ BLAZER_ADMIN_USER=admin BLAZER_ADMIN_PASSWORD=<generated-on-first-boot>Keep this password safe. It is unique to this instance, and nginx checks it for HTTP Basic authentication.
Sign in to Blazer
Browse to http://<instance-public-ip>/. When your browser prompts for HTTP Basic authentication, enter admin and the password from Step 5. Blazer opens on its home view, which lists the seeded example queries and the Sales Overview dashboard.
Run a query
Open Revenue by Status. Blazer runs the saved SQL and shows the results table. Because the result has a category column and a numeric column, Blazer also renders a chart automatically.
Every saved query works the same way. Write SQL, run it, and Blazer visualises the result.
Open a dashboard
Open the Sales Overview dashboard from the home view. A dashboard combines several queries into one page, so you can watch related metrics together.
This dashboard pairs a time series of orders per month with revenue by status and users by city, all over the bundled sample dataset.
Write your own query
Choose New Query (or Edit on an existing one) to open the query editor. It has SQL syntax highlighting, a schema browser and a Run button.
Save a query to add it to the home list. You can then add it to a dashboard or attach a data check.
Connect your own database (with a read-only role)
Out of the box, Blazer queries its bundled database (the main data source), which also holds the sample dataset. To report on your own data, add a data source that points at your database.
Blazer runs arbitrary SQL, so connect it with a read-only database role, and widen the permissions only deliberately, if you need to. On PostgreSQL, for example, create a read-only role on your target database:
CREATE ROLE blazer_ro LOGIN PASSWORD 'choose-a-strong-password'; GRANT CONNECT ON DATABASE yourdb TO blazer_ro; GRANT USAGE ON SCHEMA public TO blazer_ro; GRANT SELECT ON ALL TABLES IN SCHEMA public TO blazer_ro; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO blazer_ro;Then add the data source to Blazer's configuration. Edit /opt/blazer/blazer.yml inside the container's config, or mount your own blazer.yml. Add a named data source with the read-only connection string, then restart Blazer with sudo systemctl restart blazer.
New queries can then select your data source from the editor. Because the role is read-only, a query can never modify or drop data in your database.
Security model
- nginx is the only public listener. Blazer (
127.0.0.1:8080) and PostgreSQL (127.0.0.1:5432) bind to the loopback interface only and are never exposed to the network. - Every path requires authentication. Blazer has no built-in auth, so nginx gates every path behind HTTP Basic auth. The only exception is the static
/healthzendpoint, which returns200for load-balancer probes and exposes nothing. - No shipped secret. The admin password, the Rails application secret and the database password are all generated per instance on first boot. The built image carries no working secrets.
Confirm the negatives yourself:
# unauthenticated request is refused curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1/queries
# -> 401
# the static health endpoint is open curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1/healthz
# -> 200To change the admin password, rewrite the htpasswd entry and reload nginx:
sudo htpasswd -b /etc/nginx/.htpasswd admin '<new-password>'
sudo systemctl reload nginxEnabling HTTPS
In production, terminate TLS in front of Blazer. The simplest options are:
- An AWS Application Load Balancer with an ACM certificate, forwarding to the instance on port
80. Open443on the load balancer and restrict the instance security group to the load balancer. - On the instance with Certbot, if the instance has a public DNS name (commands below).
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d <your-domain>Open 443/tcp in the security group when you enable HTTPS.
Managing the service
Check status and view logs:
sudo systemctl status blazer --no-pager sudo docker logs blazer --tail 20To restart the application after a configuration change, run sudo systemctl restart blazer. To restart the front door, run sudo systemctl restart nginx.
File locations
- /root/blazer-credentials.txt: per-instance admin credentials (root-only, 0600)
- /var/lib/blazer/blazer.env: per-instance Blazer environment (DATABASE_URL, SECRET_KEY_BASE)
- /etc/nginx/.htpasswd: nginx HTTP Basic auth credentials
- /etc/nginx/sites-available/sac-blazer: nginx reverse-proxy site
- /var/lib/postgresql/16/main: PostgreSQL data directory (Blazer metadata and sample data)
- /etc/systemd/system/blazer.service: Blazer container systemd unit
Troubleshooting
The browser does not prompt for a password or returns 401
nginx gates every path behind HTTP Basic auth. Enter admin and the password from /root/blazer-credentials.txt. A 401 means the credentials were wrong or absent. That is the correct, secure behaviour for an unauthenticated request.
Blazer shows a 502 or does not load after signing in
The Blazer container may still be starting. Check that it is up and healthy:
sudo systemctl is-active blazer
sudo docker logs blazer --tail 20 curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/health
# -> 200 when readyFirst boot did not generate credentials
Check the first-boot service and its log:
sudo systemctl status blazer-firstboot
sudo cat /var/log/blazer-firstboot.logSupport
For assistance, contact SecureAnyCloud support:
- Email: sales@secureanycloud.com
- Response time: 24/7 with a guaranteed 24-hour response SLA
- Website: https://secureanycloud.com
Deploy on AWS
Launch Blazer Self-Hosted SQL BI Dashboard with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com