Binner on Ubuntu 24.04 on Azure User Guide
Overview
Binner is a self-hosted parts inventory system for electronics. Makers, hobbyists and professional engineers use it to catalogue components, track stock levels and storage locations, find the right part fast, and attach datasheets and metadata, with barcode scanning to add and look up parts quickly. It presents a clean web interface backed by a self-contained database, so your inventory stays on infrastructure you control. Binner can optionally enrich part details from external supplier catalogues (DigiKey, Mouser, Octopart) when you supply your own API keys, but this is entirely optional: the appliance runs completely standalone with no external service and no external database.
The cloudimg image ships the pinned Binner 2.6.25 release, runs it as a dedicated binner system user under systemd, and fronts its web interface on port 80 with an nginx reverse proxy. It is secure by default with no shared credential: Binner seeds a default admin/admin account, so on the first boot of every VM that credential is rotated to a unique per-instance password written to a root-only file, the token-signing key is generated uniquely per instance, and the web interface refuses to serve until that rotation has completed. The default login is therefore never reachable on a deployed instance, and no two instances share a secret. Backed by 24/7 cloudimg support.
What is included:
- Binner 2.6.25 running as the
binnersystemd service, fronted by nginx on port 80 - A full web UI for adding, searching and organising parts, with barcode scanning
- A self-contained database and user-upload store under
/var/lib/binner(no external database) - Secure-by-default authentication: the seeded
admin/adminlogin is rotated to a unique per-VM password on first boot, and the JWT signing key is generated per VM binner.service+nginx.serviceas systemd units, enabled and active- An unauthenticated
/healthzendpoint for Azure Load Balancer health probes - Fully patched Ubuntu 24.04 LTS base with unattended security upgrades enabled
- 24/7 cloudimg support
Prerequisites
An active Azure subscription, an SSH key pair, and a VNet + subnet in the target region. Standard_B2s (2 vCPU / 4 GiB RAM) is a comfortable starting point; Binner is light on resources. NSG inbound: allow 22/tcp from your management network and 80/tcp from the networks that should reach the web interface. Binner serves plain HTTP on port 80; for use beyond a trusted network, terminate TLS in front of it with your own domain (see Maintenance).
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Binner 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 binner \
--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 binner --port 80 --priority 1010
Step 3 - Connect to your VM
ssh azureuser@<vm-public-ip>
Step 4 - Confirm the services are running
Binner runs on the loopback interface and nginx publishes it on port 80.
systemctl is-active binner.service nginx.service
active
active
Confirm nginx is on :80, Binner is on 127.0.0.1:8090, and the web UI answers:
ss -tln | grep -E ':80 |:8090 '
curl -s -o /dev/null -w 'web UI (nginx :80): HTTP %{http_code}\n' http://127.0.0.1/

Step 5 - Retrieve your admin credentials
On the first boot of every VM, Binner's seeded admin/admin login is rotated to a unique per-instance password, written to a root-only file:
sudo cat /root/binner-credentials.txt
The file is mode 0600 root:root and contains the web URL and the admin username with its per-VM password:
stat -c '%n %a %U:%G' /root/binner-credentials.txt
/root/binner-credentials.txt 600 root:root

Step 6 - Sign in to the web UI
Open http://<vm-public-ip>/ in a browser. Binner shows its login page; sign in as admin with the password from the credentials file.

Step 7 - Confirm the default login is disabled
You can prove the secure-by-default posture from the shell: the upstream admin/admin seed is rejected, while the per-VM credential authenticates. These commands read the per-VM password straight from the credentials file, so no secret is typed.
# the upstream default admin/admin is rotated away on first boot -> rejected
curl -s http://127.0.0.1/api/authentication/login -X POST -H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin"}' | jq '.isAuthenticated'
false
# the per-VM admin credential from the credentials file authenticates
PW=$(sudo grep '^BINNER_ADMIN_PASSWORD=' /root/binner-credentials.txt | cut -d= -f2-)
curl -s http://127.0.0.1/api/authentication/login -X POST -H 'Content-Type: application/json' \
-d "{\"username\":\"admin\",\"password\":\"$PW\"}" | jq '.isAuthenticated'
true

Step 8 - The dashboard
After signing in, Binner shows its home dashboard with your inventory summary and quick actions for adding and finding parts.

Step 9 - Browse your inventory
The Inventory view lists your parts with their part number, quantity, description, part type and storage location, and a search box and sortable columns to find any part quickly.

Step 10 - Add a part
Choose Add Inventory to add a part. Enter a part number and quantity, pick a part type and storage location, and optionally scan a barcode or look the part up from a supplier catalogue to pull in metadata and a datasheet.

Step 11 - Barcode scanning
Binner supports barcode scanning to add and look up parts quickly. On the Add Inventory page, scan a manufacturer or supplier barcode with a USB/HID barcode scanner (or a webcam) and Binner parses it to pre-fill the part fields. Scanning on the inventory search finds an existing part instantly.
Step 12 - Optional: enrich parts from supplier catalogues
Binner can pull part metadata, pricing and datasheets from external supplier APIs (DigiKey, Mouser, Octopart). This is entirely optional and requires your own API keys from those providers - the appliance runs fully standalone without them. To enable enrichment, sign in as admin, open Settings, and add your provider API keys there. No supplier key ships in the image.
Maintenance
- Change the admin password or add users: sign in as
admin, open your account settings to change the password, or add more users from the admin area. - Your data: the inventory database and uploaded files live under
/var/lib/binner(binner.db+UserFiles/). Back this directory up to preserve your inventory. - Service management:
sudo systemctl status binner.service, and logs viasudo journalctl -u binner.service. - TLS: Binner serves plain HTTP on port 80 behind nginx. For internet-facing use, put your own domain and certificate in front (for example with a TLS-terminating load balancer or an nginx
serverblock with your certificate) and restrict80/tcpat the NSG to trusted networks. - Updates: the Ubuntu base has unattended security upgrades enabled.
Support
cloudimg images are backed by 24/7 support. If you need help deploying or operating this image, contact cloudimg support with your Azure region and the VM size you are running.