Deploy SNIPE-IT
Open-source IT asset. Track IT assets, licences and accessories
Redis
Just deployed
/data
MySQL
Just deployed
/var/lib/mysql
snipe-it
Just deployed
/var/lib/snipeit

Deploy and Host Snipe-IT on Railway
Snipe-IT is an open-source IT asset management system that tracks the hardware, licences and accessories a company owns and records who has each one. IT teams, school districts and MSPs use it to replace the spreadsheet where laptop serial numbers go to die: every device gets an asset tag, a status, a purchase cost and a full checkout history, so answering "who has that MacBook and when does its warranty end?" takes seconds. It is a PHP/Laravel application published under AGPL-3.0 by Grokability.
Self-host Snipe-IT on Railway and this template wires up the three pieces a production install needs. The application service runs the official snipe/snipe-it image — Apache with PHP 8.3 — behind a public HTTPS domain, applies database migrations on every boot, and runs Snipe-IT's scheduler for alerts and backups. Managed MySQL holds the asset records over Railway's private network, so the database is never exposed publicly. Managed Redis backs the cache and session store, keeping users signed in across redeploys. A persistent volume at /var/lib/snipeit keeps uploaded images, attachments, backups and OAuth signing keys.

Getting Started with Snipe-IT on Railway
Once the deploy finishes, open the generated Railway URL. There are no default credentials — Snipe-IT ships with none and instead redirects the first visitor to a /setup pre-flight wizard, which checks PHP version, database connectivity, file permissions, the GD image library and production mode. If a row is red, its message names the setting to correct. Continue through "Create database tables"; it reports nothing left to migrate, because the container already migrated at startup.
The next screen creates your first superadmin. Choose a site name, enter your name, email, username and a strong password, and leave auto-incrementing asset tags enabled. Do this promptly: the setup route stays open until that account exists, and closes permanently once it does.
To confirm the deployment works end to end, add a category, then an asset model, then an asset — and check that asset out to a person. The asset page should immediately show it as "Deployed" with the assignee, a checkout timestamp and a scannable QR code. Uploading an image to that asset proves the persistent volume is writable and served.



About Hosting Snipe-IT
Snipe-IT answers a narrow question well: what do we own, where is it, and who has it. It is an asset tracker rather than a helpdesk — there is no ticketing — which is why teams pick it when they want inventory accuracy without adopting a full ITSM suite. Self-hosting matters because an asset register holds serial numbers, purchase costs and staff assignments.
- Assets, licences, accessories, consumables and components, each with their own stock and checkout rules
- Check-in and check-out to users, locations or other assets, with a full audit history per item
- Custom fields and fieldsets, so a laptop and a projector carry different attributes
- Barcode and QR labels, scheduled audits, warranty tracking and depreciation
- LDAP/Active Directory sync and SAML single sign-on
- A documented REST API with personal access tokens, plus a CSV importer
- Email alerts for low stock, expiring licences and upcoming audits
Each Railway service owns one concern. The application container serves the web interface and API and runs the scheduler. MySQL stores every asset, user and log row. Redis holds cached settings and sessions. The volume stores anything that is a file rather than a row: asset photos, signed EULA PDFs, backup archives and the key pair that signs API tokens.
Why Deploy Snipe-IT on Railway
Railway removes the server administration self-hosting a PHP app usually involves.
- MySQL and Redis are provisioned and connected for you, over a private network
- HTTPS and a public domain are issued automatically, with no certificate renewals
- The persistent volume for uploads and backups is attached and mounted
- Database migrations run on every deploy, so upgrades are a redeploy
- Health checks restart the container if the app stops responding
Common Use Cases
- Tracking laptops, monitors and phones across an IT department, including who holds each device and when it is due back
- Managing licence seats and renewal dates so nothing lapses or gets over-purchased
- Running onboarding and offboarding, checking a full equipment kit out to a new hire and back in when they leave
- Maintaining an auditable equipment register for schools, nonprofits and regulated businesses
Dependencies for Snipe-IT
- Snipe-IT —
snipe/snipe-it:v8-latest, the official image. Bundles Apache and PHP 8.3; runs migrations and the scheduler at startup. - MySQL — managed MySQL. Stores all assets, users, licences and the action log. MariaDB also works.
- Redis — managed Redis. Cache backend and session store.
Environment Variables Reference
| Variable | Purpose |
|---|---|
APP_KEY | 32-character encryption key. Never change it after setup, or encrypted fields become unreadable. |
APP_URL | Public base URL. Snipe-IT builds absolute links and QR codes from it. |
APP_TRUSTED_PROXIES | Proxy ranges trusted for X-Forwarded-*. 0.0.0.0/0,::/0 puts the real visitor IP in logs. |
DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD | MySQL connection details. |
REDIS_HOST, REDIS_PORT, REDIS_PASSWORD | Redis connection details. |
CACHE_DRIVER, SESSION_DRIVER | Set to redis so cache and sessions survive restarts. |
MAIL_MAILER, MAIL_HOST, MAIL_USERNAME, MAIL_PASSWORD | Outgoing mail. Change log to smtp to deliver notifications. |
PHP_UPLOAD_LIMIT | Maximum upload size in megabytes. |
LOGIN_MAX_ATTEMPTS, LOGIN_LOCKOUT_DURATION | Brute-force lockout threshold and duration. |
Deployment Dependencies
- Source repository: https://github.com/grokability/snipe-it
- Docker image: https://hub.docker.com/r/snipe/snipe-it
- Documentation: https://snipe-it.readme.io
- Runtime: PHP 8.2+, MySQL 8.0+ or MariaDB 10.3+
Hardware Requirements for Self-Hosting Snipe-IT
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 GB | 2 GB |
| Storage | 1 GB volume | 10 GB volume |
| Runtime | PHP 8.2, MySQL 8.0 | PHP 8.3, MySQL 9.x, Redis |
Snipe-IT is light; storage is driven by uploaded photos and retained backups, not record count.
Self-Hosting Snipe-IT
The official image needs an APP_KEY and a database. This runs it against an existing MySQL container:
docker run -d --name snipe-it -p 8000:80 \
-e APP_KEY="$(openssl rand -base64 24 | cut -c1-32)" \
-e APP_URL="http://localhost:8000" \
-e DB_CONNECTION=mysql -e DB_HOST=snipe-db -e DB_PORT=3306 \
-e DB_DATABASE=snipeit -e DB_USERNAME=snipeit -e DB_PASSWORD=changeme \
-v snipeit_data:/var/lib/snipeit \
snipe/snipe-it:v8-latest
To build from source instead, clone the repository and install its PHP dependencies:
git clone https://github.com/grokability/snipe-it.git
cd snipe-it && cp .env.example .env
composer install --no-dev
php artisan key:generate
php artisan migrate --force
How Much Does Snipe-IT Cost to Self-Host?
Snipe-IT is free and open source under AGPL-3.0, with no seat limits, asset caps or paid tier — the self-hosted build is the complete product. Grokability sells managed hosting from around $400 per year if you would rather not run it. On Railway you pay only for the compute, database and volume used. Commercial alternatives such as Asset Panda start in the thousands per year.
Snipe-IT vs Asset Panda vs GLPI
| Snipe-IT | Asset Panda | GLPI | |
|---|---|---|---|
| Self-hostable | Yes | No, SaaS only | Yes |
| Licence | AGPL-3.0 | Commercial | GPL |
| Focus | Asset tracking | Multi-department workflows | Full ITSM and CMDB |
| Ticketing | No | Limited | Yes |
FAQ
What is Snipe-IT?
Snipe-IT is a free, open-source IT asset management application for tracking hardware, software licences, accessories and consumables, and recording which employee or location holds each item.
What does this Railway template deploy?
The official Snipe-IT container with a public HTTPS domain, a managed MySQL database, a managed Redis instance, and a persistent volume for uploads and backups. Services talk over Railway's private network.
Why does the template include Redis if Snipe-IT can run without it?
Snipe-IT's default cache and session drivers write to the container filesystem, which is replaced on every deployment. Pointing both at Redis means signed-in users are not logged out when you redeploy.
Do I need a separate worker or queue service for Snipe-IT?
No. Snipe-IT does not dispatch background jobs, so a queue worker would have nothing to process. Its scheduled tasks — alert emails and backups — run inside the application container.
How do I use the Snipe-IT REST API?
Generate a personal access token from your profile's API section, then send it as Authorization: Bearer against https://your-domain/api/v1/. Tokens are shown once at creation, so copy them immediately.
Template Content
