Snipe-IT: Self-Hosted IT Asset Management That Actually Scales
If you've ever lost track of which Raspberry Pi is running what, which drive went into which NAS, or how many spare SSDs you actually have left, you already know the pain that Snipe-IT solves. It's an open-source IT asset management platform that tracks hardware, software licenses, consumables, and accessories — all from a polished web interface that puts most commercial alternatives to shame.
Photo by Declan Sun on Unsplash
What Snipe-IT Does
Snipe-IT is a full lifecycle asset tracker. You create asset models (like "Dell Optiplex 7090" or "Samsung 870 EVO 1TB"), then track individual units through check-out, check-in, maintenance, and retirement. Every action gets an audit log entry. Every asset gets a history.
Beyond hardware, it handles:
- Software licenses — track seats, expiration dates, and which machines have which licenses
- Consumables — toner, cables, thermal paste, anything you buy in quantity and use up
- Accessories — keyboards, monitors, docks — things assigned to people, not machines
- Components — RAM sticks, GPUs, drives — things that go inside other assets
For a homelab, this might sound like overkill. It isn't. Once you have more than a dozen devices, the "I'll just remember" approach falls apart. Snipe-IT replaces the spreadsheet you keep meaning to update.
Deploying with Docker Compose
The official Docker image makes deployment straightforward:
services:
snipeit:
image: snipe/snipe-it:latest
ports:
- "8080:80"
env_file:
- .env
volumes:
- snipeit-data:/var/lib/snipeit
depends_on:
- mysql
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: snipeit
MYSQL_USER: snipeit
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- mysql-data:/var/lib/mysql
volumes:
snipeit-data:
mysql-data:
Your .env file needs these at minimum:
APP_URL=https://assets.yourdomain.com
APP_KEY=base64:YOUR_GENERATED_KEY
DB_CONNECTION=mysql
DB_HOST=mysql
DB_DATABASE=snipeit
DB_USERNAME=snipeit
DB_PASSWORD=your_secure_password
MYSQL_ROOT_PASSWORD=your_root_password
MYSQL_PASSWORD=your_secure_password
Generate the APP_KEY with:
docker run --rm snipe/snipe-it php artisan key:generate --show
After docker compose up -d, hit port 8080 and walk through the setup wizard. It takes about two minutes — set your admin account, company name, and default currency.
Setting Up Your Asset Structure
Before importing anything, plan your hierarchy:
- Categories — broad types like "Servers," "Networking," "Storage," "Workstations"
- Manufacturers — Dell, Ubiquiti, Synology, Raspberry Pi Foundation
- Models — specific products tied to a manufacturer and category
- Locations — "Server Rack," "Office Desk," "Closet Shelf"
- Fieldsets — custom fields grouped together (add "IP Address" and "MAC Address" for network gear)
Custom fields are where Snipe-IT pulls ahead of a spreadsheet. Define a "Network Device" fieldset with IP, MAC, firmware version, and management URL fields. Every switch, AP, and router you add with that fieldset gets those fields automatically. Click a device, see its management URL, click through. No more hunting through your router's DHCP table.
Like what you're reading? Subscribe to Self-Hosted Weekly — free weekly guides in your inbox.
Labels and Asset Tags
Snipe-IT generates printable asset labels with barcodes or QR codes. You can use a DYMO or Brother label printer to tag physical equipment. Scan a barcode with the mobile-friendly web UI to pull up that asset's full history instantly.
For a homelab, QR code labels on the back of each device are genuinely useful. Scan the code on a Raspberry Pi, see its hostname, OS, purpose, last maintenance date, and any notes you've attached. It beats the masking tape and Sharpie approach.
LDAP and SSO Integration
If you're running Authentik, Keycloak, or any LDAP/SAML provider, Snipe-IT integrates natively. Users sync from your directory, and asset check-outs tie to real identities. For a home setup, the built-in user management is fine. For a small business or shared lab, SSO means one less password for everyone.
API and Automation
Snipe-IT has a comprehensive REST API. Every action you can do in the UI, you can do via API. Practical uses:
# Check in all assets assigned to a user who left
curl -s -H "Authorization: Bearer $TOKEN" \
"https://assets.example.com/api/v1/users/42/assets" | \
jq -r '.rows[].id' | while read id; do
curl -X POST -H "Authorization: Bearer $TOKEN" \
"https://assets.example.com/api/v1/hardware/$id/checkin"
done
# Bulk import from a CSV
curl -X POST -H "Authorization: Bearer $TOKEN" \
-F "[email protected]" \
"https://assets.example.com/api/v1/imports"
You can also hook it into Ansible or Terraform — provision a VM, register it as an asset automatically.
Reporting and Audits
The built-in reports cover depreciation schedules, assets due for audit, license compliance, and activity logs. Schedule periodic audits where Snipe-IT generates a list of assets to physically verify. Mark each as confirmed or flag discrepancies. For businesses, this is compliance gold. For homelabbers, it's the annual "does this thing still work" check you keep skipping.
Backup Strategy
Back up two things: the MySQL database and the /var/lib/snipeit volume (which holds uploaded files and generated reports):
docker exec snipeit-mysql-1 mysqldump -u root -p snipeit > snipeit-backup.sql
docker run --rm -v snipeit-data:/data -v $(pwd):/backup alpine \
tar czf /backup/snipeit-files.tar.gz /data
Add these to your existing backup rotation. The database is small — even with thousands of assets, dumps are typically under 50MB.
When Snipe-IT Makes Sense
Snipe-IT is worth deploying when you hit any of these:
- More than 20 devices and you've lost track of at least one
- Shared lab or makerspace where multiple people borrow equipment
- Small business that needs license compliance tracking
- Insurance documentation — Snipe-IT's asset reports with purchase prices and photos make claims straightforward
- Equipment lifecycle planning — depreciation tracking tells you when to budget for replacements
It's overkill for a three-device setup. It's essential once your homelab becomes something you'd struggle to rebuild from memory. The thirty minutes you spend entering your existing gear pays back the first time you need to find a serial number, verify a warranty date, or figure out which machine has that spare RAM slot.
