Introduction

If you've ever dug through a spreadsheet trying to remember who has the spare Dell laptop, or which server has a warranty that expired eight months ago, you already know why asset tracking matters. Most homelabbers and small teams start with a Google Sheet. It works right up until it doesn't — usually around the time someone deletes a row by accident or two people edit it at once.

Snipe-IT is a free, open-source tool built specifically for this problem. It's a proper database-backed app with a web interface, and running it in an LXC container on Proxmox VE is one of the easiest ways to get it going without dedicating a whole VM to it. This guide walks through the whole process, start to finish, on a fresh Proxmox VE 8.x or 9.x host.

What You Will Learn

  • What Snipe-IT actually does and who it's useful for
  • Why an LXC container is a good fit for an app like this
  • How to deploy it using the community-scripts helper script
  • What each part of the install command actually does
  • The errors people run into most often, and how to fix them
  • A few settings worth changing before you put real data into it

What Is Snipe-IT?

Snipe-IT is an open-source asset management application. In plain terms, it's a database with a nice web front end for tracking hardware, software licenses, accessories, and consumables. You can check a laptop out to an employee, set a warranty expiry date, attach the purchase invoice, and get notified before the license renewal comes due. It's written in PHP on the Laravel framework and stores everything in a MySQL or MariaDB database.

Since this is the first time we're mentioning it in this guide, it's worth explaining what an LXC container actually is. An LXC container is a lightweight form of virtualization that shares the host's Linux kernel instead of emulating an entire virtual machine. That means it boots in a couple of seconds, uses noticeably less RAM than a full VM running the same OS, and is a natural fit for a single-purpose web app like Snipe-IT that doesn't need its own kernel or hardware emulation.

We'll be using the community-scripts helper script to build this container. It's a well-known, actively maintained collection of install scripts for the Proxmox homelab community — not something Proxmox itself ships, but widely trusted and used across thousands of homelabs. It automates the boring parts: creating the container, installing Debian, setting up Apache, MariaDB, PHP with the right extensions, and Snipe-IT itself.

That Apache-MariaDB-PHP combination is often called a LAMP stack (Linux, Apache, MySQL, PHP), and it's the same foundation a huge share of self-hosted web apps run on. Once you've set this up, the pattern will look familiar the next time you install something similar. The core workflow inside Snipe-IT itself revolves around checkout and check-in: an asset sits in your inventory until you check it out to a person, at which point Snipe-IT logs who has it and when, and checking it back in closes that loop. It sounds simple because it is, that's the whole appeal.

Why Use Snipe-IT on Proxmox VE?

You don't need to be running an IT department to get value out of this. A few real scenarios where it earns its keep:

  • A small business tracking which employee has which laptop, monitor, and phone, plus when each one is due for replacement
  • A homelabber who's lost count of exactly how many Raspberry Pis, switches, and spare drives are sitting in a closet
  • A freelancer juggling software licenses across several client machines who needs to know at a glance what's about to expire
  • Anyone who's had to explain to an auditor where a piece of equipment went, with nothing to point to but memory

Running it on your own Proxmox host instead of paying for a SaaS asset tracker means your inventory data — including serial numbers, purchase costs, and sometimes vendor contract details — never leaves your network. For a lot of small teams, that alone is reason enough. There's also a depreciation report built in, which is the kind of thing you only appreciate the first time an accountant asks for it and you don't have to build it by hand in a spreadsheet.

Prerequisites

Before you start, make sure you have:

  • A working Proxmox VE 8.x or 9.x installation with root access to the web interface or shell
  • Internet access from the Proxmox node, since the script downloads packages and the app files from GitHub
  • At least 8 GB of free space on the storage you plan to use for the container (more on why below)
  • Roughly fifteen minutes, most of which is unattended while packages install

You don't need to know PHP, MySQL, or Laravel to follow this. The helper script handles the stack for you — you just need to be comfortable pasting a command into a shell.

Step-by-Step Tutorial

Step 1: Open the Proxmox shell

Log in to the Proxmox VE web interface, click your node's name in the left-hand tree, and open Shell. This gives you a root terminal running directly on the Proxmox host itself — not inside any VM or container yet.

Step 2: Run the Snipe-IT install script

Paste this into the shell and hit enter:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/snipeit.sh)"

This downloads the community-scripts installer and runs it immediately. You'll be asked whether you want Default Settings or Advanced Settings. Default gives you a Debian 13 container with 2 CPU cores, 2048 MB of RAM, and a 4 GB disk.

Step 3: Bump the disk size

Here's the one change worth making before you go further: pick Advanced Settings and increase the disk to at least 8 GB. The default 4 GB is fine for the app files and database on day one, but attachment uploads — invoices, warranty PDFs, asset photos — eat into that fast, and resizing later means running pct resize plus growing the filesystem inside the container. It's a five-second decision now versus a mildly annoying task in three months.

Step 4: Let it finish

The script creates the container, installs Debian, then pulls in Apache, MariaDB, PHP 8.2 or newer (Snipe-IT needs at least 8.2, and the script targets 8.4), Composer, and finally Snipe-IT itself. This step usually takes five to ten minutes depending on your internet connection and node's CPU. When it's done, the script prints the container's IP address and the database credentials it generated. Copy those credentials somewhere safe — you're not shown them again automatically.

Step 5: Run the web setup wizard

Open a browser and go to http://<container-ip>. Snipe-IT's setup wizard checks your PHP extensions and file permissions, then asks you to confirm the database connection (the credentials from step 4 go here if they weren't pre-filled), set your site name and locale, and create your first administrator account.

Step 6: Log in and start adding assets

Once the wizard finishes, log in with the admin account you just created. From here you can add asset categories, manufacturers, and your first pieces of hardware. There's also a CSV importer under Assets > Import if you already have inventory sitting in a spreadsheet.

Step 7: Set up categories and custom fields before you import anything

It's tempting to dump your whole spreadsheet in right away. Don't — spend ten minutes first under Settings > Asset Categories deciding how you actually want things grouped (laptops, monitors, network gear, and so on), and add any custom fields you need under Settings > Custom Fields, things like an internal barcode number or a specific warranty vendor. Reorganizing categories after a big import is far more tedious than getting them right first.

Commands Explained

CommandWhat it does
curl -fsSL <url>Downloads the script. -f fails silently on server errors instead of printing an HTML error page, -s suppresses the progress bar, -S still shows real errors, and -L follows redirects.
bash -c "$(...)"Runs the downloaded script's output directly as a bash command, without saving a file to disk first.
pct listRun on the Proxmox host, this lists every LXC container and its status — handy if you forget the container ID later.
pct enter <CTID>Drops you straight into the container's shell from the Proxmox host, without needing SSH or a password.
pct resize <CTID> rootfs +4GGrows the container's root disk by 4 GB if you started with the default and need more room later.

Common Errors

A few things trip people up during or right after install:

  • "Your requirements aren't met" on the setup wizard. Usually a missing PHP extension. The script installs the full list Snipe-IT needs, so this is more common if you've manually modified the container afterward. Run php -m inside the container to see what's actually loaded.
  • 500 Internal Server Error after the wizard finishes. Almost always a permissions problem on the storage folder. Snipe-IT's storage and bootstrap/cache directories need to be writable by the web server user.
  • "SQLSTATE[HY000] [1045] Access denied for user" during setup. The database credentials typed into the wizard don't match what the script generated. Double-check them against what was printed at the end of the install.
  • Container creation succeeds but the install hangs partway through. This has been reported on the community-scripts GitHub issue tracker when a node is low on memory during the Composer dependency step. Give the container at least 2 GB of RAM, not less.

Troubleshooting

If something's not working and the error isn't obvious, work through these in order:

  1. Confirm the container has internet access: pct exec <CTID> -- ping -c 3 8.8.8.8. No response usually means a bridge or firewall issue on the Proxmox side, not Snipe-IT.
  2. Check that Apache and MariaDB are actually running inside the container: systemctl status apache2 and systemctl status mariadb.
  3. Look at the Laravel log for the real error message, which is almost always more specific than what the browser shows: tail -50 /var/www/html/snipe-it/storage/logs/laravel.log.
  4. Check disk space. A full disk causes strange, unrelated-looking failures in Laravel apps: df -h.

If none of that turns anything up, the community-scripts GitHub discussions page for this specific script is worth a search — it's actively maintained, and install quirks tend to get documented there quickly since so many people run the same script.

Best Practices

A handful of things worth doing before you rely on this for real data:

  • Turn on two-factor authentication for admin accounts under Settings > Security. It's an asset database with financial and personal information in it — treat it accordingly.
  • Set up email under Admin > Settings > Notifications early. Without it, checkout confirmations and license-expiration warnings — arguably half the point of the tool — never actually reach anyone.
  • Take a Proxmox snapshot before running Snipe-IT's own upgrade process. Laravel apps occasionally need a database migration during upgrades, and a snapshot means you can roll back in seconds if one goes sideways.
  • Add the container to your normal vzdump backup schedule. It's a database-backed app; losing the container without a recent backup means losing every asset record you've entered.
  • Don't expose port 80 directly to the internet. If you need remote access, put it behind a reverse proxy with a proper TLS certificate instead.

Frequently Asked Questions

Is Snipe-IT actually free?

Yes. The self-hosted version is open source under the AGPL license and free to run indefinitely. Snipe-IT also sells a hosted cloud version, but that's a separate product from what you're installing here.

Could I run this in a VM instead of an LXC container?

Sure, nothing stops you. But for a single lightweight web app like this, a container spins up faster, uses less RAM, and is simpler to back up and snapshot.

How many assets can it realistically handle?

Thousands without any tuning at all. Tens of thousands is fine too, though at that scale you'll want to give the container more RAM and keep an eye on MariaDB performance.

Can I import assets from a spreadsheet I already have?

Yes. There's a built-in CSV importer under Assets > Import that maps your existing columns to Snipe-IT's fields.

Do I need a domain name to use this?

No, not for internal use. The container's local IP address works fine on your home or office network. A domain only matters if you're putting it behind a reverse proxy for external access.

How do I update Snipe-IT once it's installed?

Snipe-IT ships an upgrade guide in its own documentation, and the process is mostly pulling the new release and running the database migrations through artisan. Take that Proxmox snapshot first, as mentioned earlier — it's the cheapest insurance you'll ever buy for a five-minute upgrade.

What happens to my data if the container gets deleted by accident?

Whatever your last backup captured, and nothing after that. This is exactly why the container needs to be on your normal vzdump schedule from day one, not added later once you remember.

Conclusion

Fifteen minutes and one command is a fair trade for never again wondering who has the spare monitor or when a software license quietly expired. Snipe-IT isn't flashy, but it does exactly one job well, and running it in its own LXC container keeps it cheap to host and easy to back up. Once it's up, spend a few minutes importing what you already know about your gear, turn on email notifications, and let it start doing the remembering for you.