Deployment guide

Binner

Overview

Binner is a self-hosted parts inventory system for electronics. Makers, hobbyists and professional engineers use it to catalog components, track stock levels and storage locations, and attach datasheets and metadata. Barcode scanning makes it quick to add and look up parts. A clean web interface is backed by a self-contained database, so your inventory stays on infrastructure you control.

Binner can optionally enrich part details from external supplier catalogs (DigiKey, Mouser, Octopart) when you supply your own API keys. This is entirely optional. The appliance runs completely standalone, with no external service and no external database.

The SecureAnyCloud image ships the pinned Binner 2.6.25 release. It runs as a dedicated binner system user under systemd, with an nginx reverse proxy in front of the web interface on port 80.

The image 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 also generated uniquely per instance, and the web interface refuses to serve until the rotation has completed. The default login is therefore never reachable on a deployed instance, and no two instances share a secret.

What you get:

  • Binner 2.6.25 running as the binner systemd service, fronted by nginx on port 80
  • A full web UI for adding, searching and organizing 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/admin login is rotated to a unique per-VM password on first boot, and the JWT signing key is generated per VM
  • binner.service and nginx.service as systemd units, enabled and active
  • An unauthenticated /healthz endpoint for Azure Load Balancer health probes
  • Ubuntu 24.04 LTS base, patched at build time, with unattended security upgrades enabled
  • 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 comfortable starting size, because Binner is light on resources.

Configure the network security group (NSG) to allow inbound 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 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). 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:binner-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name binner \
  --image sac1647283583153:binner-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 binner --port 80 --priority 1010

Step 3 - Connect to your VM

Connect over SSH as azureuser:

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. Check that both services are active:

systemctl is-active binner.service nginx.service
active active

Then confirm that 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, which is written to a root-only file. Read it with sudo:

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. Confirm the permissions:

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 verify 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 you never type a secret.

# 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 you sign in, Binner opens its home dashboard. It shows 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. Use the 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, and pick a part type and storage location. Optionally, scan a barcode or look the part up in a supplier catalog 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). Binner parses the barcode to pre-fill the part fields. Scanning on the inventory search finds an existing part instantly.

Step 12 - Optional: enrich parts from supplier catalogs

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 and UserFiles/). Back up this directory to preserve your inventory.
  • Service management. Check status with sudo systemctl status binner.service, and read logs with sudo 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 server block with your certificate. Restrict 80/tcp at the NSG to trusted networks.
  • Updates. The Ubuntu base has unattended security upgrades enabled.

Support

SecureAnyCloud images are backed by 24/7 support. If you need help deploying or operating this image, contact SecureAnyCloud support with your Azure region and the VM size that you are running.

Deploy on Azure

Launch Binner 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

Deploy on Azure