---
title: "Deploy Snipe-IT — Self-Hosted IT Asset Management"
description: "Self-host Snipe-IT — track hardware, licenses & assets, free"
category: "Other"
url: https://railway.com/deploy/snipe-it-asset-management
---

# Deploy Snipe-IT — Self-Hosted IT Asset Management

Self-host Snipe-IT — track hardware, licenses & assets, free

**[Deploy Snipe-IT — Self-Hosted IT Asset Management on Railway](https://railway.com/template/snipe-it-asset-management)**

- **Creator:** SilverBanana
- **Category:** Other

## Template content

### MySQL https://devicons.railway.app/i/mysql.svg

- **Image:** mysql:9.4
- **Start command:** `docker-entrypoint.sh mysqld --innodb-use-native-aio=0 --disable-log-bin --performance_schema=0 --innodb-buffer-pool-size=1G`

### Snipe-IT https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/snipe-it.png

- **Image:** snipe/snipe-it:latest
- **Public domain:** Yes

## Documentation

# 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

1. Click **Deploy on Railway** — Snipe-IT and MySQL build and wire together (~4 minutes)
2. Confirm `APP_KEY` (base64) and `APP_URL` (your Railway domain) are set
3. Confirm the volume is mounted for uploads and MySQL is connected
4. Open your Railway URL and complete the setup wizard to create your admin user
5. 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_KEY` and `APP_URL` are critical.** `APP_KEY` must be a valid `base64:` key or the app won't start, and changing it makes encrypted data unreadable. `APP_URL` must 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

- [Snipe-IT GitHub Repository](https://github.com/snipe/snipe-it)
- [Snipe-IT Documentation](https://snipe-it.readme.io/)
- [Snipe-IT Docker Guide](https://snipe-it.readme.io/docs/docker)
- [Railway Private Networking](https://docs.railway.com/guides/private-networking)

### 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.

## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — [Jul'26] Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/snipe-it-asset-management
