Deploy Snipe-IT — Self-Hosted IT Asset Management
Self-host Snipe-IT — track hardware, licenses & assets, free
MySQL
Just deployed
/var/lib/mysql
Snipe-IT
Just deployed
/var/lib/snipeit
Deploy and Host Snipe-IT on Railway
Snipe-IT is the leading open-source IT asset management system — track hardware, software licenses, accessories, and consumables, check items in and out to users, and keep a full audit history, with reports, custom fields, and a REST API. IT teams use it to know exactly what they own, who has it, and when licenses expire, without per-asset or per-user fees. This template deploys the official Snipe-IT image wired to a Railway MySQL service, with the encryption key and persistent uploads configured, so you're inventorying assets in minutes.
What This Template Deploys
| Service | Purpose |
|---|---|
| Snipe-IT | The asset management app, reports, and API (PHP on Apache) |
| MySQL | Assets, licenses, users, audit logs, and custom fields |
Both connect over Railway's private network. A persistent volume holds file uploads — asset photos, logos, and backups — while all asset records live in MySQL, so nothing is lost on redeploy.
About Hosting
Snipe-IT is a mature Laravel application, and a few specifics decide whether it deploys cleanly — all handled here.
APP_KEY must be a base64 32-byte key — or Snipe-IT won't run. Snipe-IT uses a Laravel encryption key in the exact form base64:... (generated with openssl rand -base64 32), and it encrypts sensitive data with it. A missing or malformed key stops the app from starting, and changing it after data exists makes previously encrypted values unreadable. This template generates a valid key and keeps it stable, so the app boots correctly and your data stays decryptable.
APP_URL must match your Railway domain. Snipe-IT builds asset links, image URLs, and email links from APP_URL, so it must be your exact Railway public domain, or the interface breaks with missing styles and broken links. This template sets it to your domain.
File uploads need a persistent volume. Asset photos, company logos, imported files, and backups are written to disk, which is ephemeral on Railway — they'd vanish on redeploy without a volume. This template mounts persistent storage for uploads so they survive deployments, while all structured data (assets, licenses, users, audit logs) persists in MySQL.
Finish setup in the web wizard. After deploy, open your Railway URL and Snipe-IT's pre-flight and setup wizard run — it checks the environment, confirms the database connection, and walks you through creating your first admin user and organization. There's no env-var admin; the wizard is the official first-run flow. A database connection error (SQLSTATE 2002) means MySQL isn't reachable — this template wires it via Railway references so it connects.
Add email for the full workflow. Configure the MAIL_* variables with your SMTP provider so check-in/check-out notifications, license-expiry alerts, and password resets send. Asset tracking works without it, but email unlocks the alerting that makes Snipe-IT proactive.
Typical cost: ~$5–10/month on Railway for Snipe-IT and MySQL. It's AGPL-3.0 and free — no user caps, asset limits, or feature restrictions, unlike commercial asset-management SaaS.
How It Compares
| Snipe-IT (self-hosted) | Commercial ITAM SaaS | Spreadsheets | ServiceNow | |
|---|---|---|---|---|
| Cost model | Flat infra | Per asset/user | Free | Enterprise |
| Asset check-in/out | Yes | Yes | Manual | Yes |
| License tracking | Yes | Yes | Manual | Yes |
| Audit history | Full | Yes | None | Yes |
| Data ownership | Full — your infra | Vendor | Yours | Vendor |
| Self-hostable | Yes | No | N/A | No |
Commercial asset-management platforms bill per asset or seat and hold your inventory data. Spreadsheets are free but have no check-out workflow, audit trail, or alerts. ServiceNow is powerful but enterprise-priced and heavy. Snipe-IT's edge is a complete, purpose-built ITAM system — hardware, licenses, consumables, audit logs, and a REST API — self-hosted at flat cost with no per-asset fees and your inventory on infrastructure you own.
Deploy in Under 5 Minutes
- Click Deploy on Railway — Snipe-IT and MySQL build and wire together (~4 minutes)
- Confirm
APP_KEY(base64) andAPP_URL(your Railway domain) are set - Confirm the volume is mounted for uploads and MySQL is connected
- Open your Railway URL and complete the setup wizard to create your admin user
- Add asset models and categories, then start adding and checking out assets
Set the MAIL_* variables to enable notifications, license alerts, and password resets.
Common Use Cases
- Hardware inventory — track laptops, phones, servers, and equipment with who has what
- License management — record software licenses and seats, with expiry alerts before renewals
- Check-in / check-out — assign assets to employees and see the full history of each item
- Audit and compliance — a complete audit trail of every asset for reporting and compliance
Configuration
| Variable | Required | Description |
|---|---|---|
APP_KEY | Generated | Laravel base64: encryption key — required to run; keep stable |
APP_URL | Required | Your Railway public domain — for links and asset image URLs |
DB_HOST / DB_DATABASE / DB_USERNAME / DB_PASSWORD | Auto-injected | MySQL connection via Railway references |
APP_ENV | Pre-set | production |
| Storage volume | Pre-set | Persistent volume for uploads, logos, and backups |
MAIL_* | Optional | SMTP for notifications, license alerts, and password resets |
APP_KEYandAPP_URLare critical.APP_KEYmust be a validbase64:key or the app won't start, and changing it makes encrypted data unreadable.APP_URLmust be your Railway domain or the interface breaks. Both are configured here.
Uploads need the volume. Asset photos, logos, and backups are ephemeral without persistent storage — this template mounts a volume so they survive redeploys. Structured data lives in MySQL.
Dependencies for Snipe-IT Hosting
- Railway account — ~$5–10/month for Snipe-IT and MySQL
- MySQL (included and wired via Railway references)
- A persistent volume for file uploads and backups (included)
- Optional: SMTP credentials for notifications and license-expiry alerts
Deployment Dependencies
Implementation Details
The template runs the official snipe/snipe-it image (PHP on Apache) wired to a Railway-managed MySQL service over the private network, with database credentials injected via Railway reference variables. Snipe-IT is a Laravel application requiring APP_KEY in the base64: form; the template generates a valid 32-byte key and keeps it stable, since a malformed key prevents startup and a changed key renders previously encrypted data unreadable. APP_URL is set to the Railway domain so links, asset image URLs, and email URLs resolve correctly.
File uploads — asset photos, company logos, imports, and backups — are written to disk, so the template mounts a persistent volume for them; without it these are lost on redeploy. All structured data (assets, licenses, accessories, consumables, users, custom fields, and audit logs) persists in MySQL, which is the component to back up. A database connection error on first load (SQLSTATE 2002) indicates MySQL isn't reachable, which the reference-variable wiring prevents.
On first visit, Snipe-IT runs a pre-flight check and setup wizard that verifies the environment and database and creates the first admin user and organization; there is no environment-variable admin path. The MAIL_* variables enable check-in/out notifications, license-expiry alerts, and password resets.
Frequently Asked Questions
Why won't Snipe-IT start? Usually a missing or malformed APP_KEY — it must be a valid Laravel base64: key. This template generates one correctly. If you see a database error (SQLSTATE 2002), MySQL isn't reachable, which the template's reference wiring prevents.
How do I create my admin account? Through the setup wizard on first visit, not env vars. Open your Railway URL and the wizard verifies your environment and database, then walks you through creating the first admin user.
Do my asset records and uploads persist? Yes — assets, licenses, users, and audit logs live in MySQL, and file uploads (photos, logos, backups) on the persistent volume. Both survive redeploys; back up MySQL to preserve your inventory.
Why must APP_URL match my domain? Snipe-IT builds links and asset image URLs from it, so a mismatch breaks the interface with missing styles and broken links. This template sets it to your Railway domain.
Can it track licenses and send alerts? Yes — record software licenses and seats, and with MAIL_* configured, Snipe-IT sends expiry alerts and check-in/out notifications so you renew and reclaim on time.
Is there a user or asset limit? No — the self-hosted version is fully free under AGPL-3.0 with no user caps, asset limits, or feature restrictions. You pay only for Railway infrastructure.
Why Deploy Snipe-IT on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Snipe-IT on Railway you get a complete IT asset management system with the hard parts solved — MySQL wired, a valid encryption key generated, APP_URL set, and persistent storage for uploads. Track hardware, licenses, and assets with full audit history, self-hosted on infrastructure you own.
Template Content
MySQL
mysql:9.4Snipe-IT
snipe/snipe-it:latest