How to Install Snipe-IT on Ubuntu: Complete Setup Guide
To install Snipe-IT on Ubuntu, install PHP 8.2+ and MariaDB, clone the grokability/snipe-it repository, run composer install --no-dev --optimize-autoloader, configure the .env file, and execute php artisan migrate --seed to initialize the database.
Snipe-IT is a Laravel-based asset management application maintained by Grokability that requires PHP 8.2+ with a MySQL or PostgreSQL backend. When you install Snipe-IT on Ubuntu, you are deploying a classic Laravel structure where the app/ directory contains core logic, routes/ defines web and API endpoints, and the public/ folder serves as the web root. This guide provides the complete installation process using the source code from the official repository.
Prerequisites and System Requirements
Before installing Snipe-IT on Ubuntu 22.04 LTS, ensure your server meets the following requirements:
- PHP 8.2 or higher with extensions:
mbstring,xml,bcmath,gd,json,curl,zip,sqlite3,mysql, andpgsql - Database server: MariaDB, MySQL, or PostgreSQL
- Web server: Nginx or Apache
- Composer: PHP dependency manager
- Git: For cloning the repository
- Node.js and npm: Optional, only if compiling frontend assets
The repository structure follows standard Laravel conventions with configuration files in config/, Blade views in resources/, and controllers in app/Http/Controllers/.
Step 1: Install System Packages
Update your package index and install the required dependencies:
sudo apt update && sudo apt upgrade -y
sudo apt install -y \
nginx \
php8.2-fpm php8.2-cli php8.2-mbstring php8.2-xml php8.2-bcmath \
php8.2-gd php8.2-json php8.2-curl php8.2-zip php8.2-sqlite3 \
php8.2-mysql php8.2-pgsql \
composer \
unzip \
git \
mariadb-server
Step 2: Configure the Database
Secure your MariaDB installation and create a dedicated database:
sudo mysql_secure_installation
sudo mysql -u root -p <<SQL
CREATE DATABASE snipeit CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'snipeit'@'localhost' IDENTIFIED BY 'StrongPasswordHere';
GRANT ALL PRIVILEGES ON snipeit.* TO 'snipeit'@'localhost';
FLUSH PRIVILEGES;
SQL
Step 3: Clone the Repository and Install Dependencies
Clone the official repository and install PHP dependencies:
git clone https://github.com/grokability/snipe-it.git
cd snipe-it
composer install --no-dev --optimize-autoloader
This command reads the composer.json file located in the repository root and installs Laravel plus additional packages like Passport for API authentication.
Step 4: Environment Configuration
Copy the example environment file and configure your application settings:
cp .env.example .env
nano .env
Set the following essential variables in your .env file:
APP_NAME="Snipe-IT"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://snipeit.example.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=snipeit
DB_USERNAME=snipeit
DB_PASSWORD=StrongPasswordHere
MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=mailuser
MAIL_PASSWORD=mailpass
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=notifications@example.com
Generate the application encryption key:
php artisan key:generate
Step 5: Database Migration and Seeding
Run the migrations to create tables and seed initial data:
php artisan migrate --seed
After completion, the terminal displays the default admin credentials (typically admin / password), which you should change immediately upon first login.
Step 6: Set Directory Permissions
Configure proper ownership for Laravel's storage and cache directories:
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 755 storage bootstrap/cache
The storage/ directory handles logs and uploaded files, while bootstrap/cache/ stores optimized configuration files.
Step 7: Configure the Web Server
Configure Nginx to serve the application from the public/ directory:
server {
listen 80;
server_name snipeit.example.com;
root /path/to/snipe-it/public;
index index.php;
charset utf-8;
gzip on;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Enable the site and reload Nginx:
sudo ln -s /etc/nginx/sites-available/snipeit /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Optional: Compile Frontend Assets
If you modify the frontend or need to rebuild assets, install Node.js dependencies defined in package.json and compile:
npm install && npm run prod
This processes the Bootstrap and AdminLTE assets located in resources/.
Alternative Installation Methods
For automated deployments, the repository includes an install.sh script that automates many of these steps. Additionally, the docker/README.md file contains instructions for containerized deployments using Docker.
Summary
- Install PHP 8.2+ and required extensions (
mbstring,xml,bcmath, etc.) along with MariaDB or PostgreSQL. - Clone the
grokability/snipe-itrepository and runcomposer install --no-dev --optimize-autoloaderto install Laravel dependencies. - Configure the
.envfile with database credentials and application URL, then runphp artisan key:generate. - Initialize the database with
php artisan migrate --seedto create tables and set up the admin user. - Set permissions on
storage/andbootstrap/cache/towww-data(or your web server user). - Point your web server to the
public/directory, not the project root. - Access the application via your configured domain and change the default admin password immediately.
Frequently Asked Questions
What PHP version is required to install Snipe-IT on Ubuntu?
Snipe-IT requires PHP 8.2 or higher according to the composer.json in the repository. You must install php8.2-fpm or php8.2-cli along with extensions including mbstring, xml, bcmath, gd, curl, and database drivers for MySQL (php8.2-mysql) or PostgreSQL (php8.2-pgsql).
Can I use the automated installation script instead of manual setup?
Yes, the repository includes an install.sh script that automates package installation, database setup, and configuration. However, manual installation gives you finer control over security settings, directory paths, and web server configuration, which is recommended for production environments.
Why does the web server need to point to the public/ directory?
Snipe-IT follows Laravel's security model where only the public/ directory should be web-accessible. This prevents exposure of sensitive files like .env, composer.json, or the app/ directory containing business logic. Pointing your Nginx or Apache document root to snipe-it/public/ ensures proper routing through index.php while protecting backend code.
How do I verify the API is working after installation?
Test the REST API by querying the app/Http/Controllers/Api/ endpoints with a valid API token:
curl -H "Accept: application/json" \
-H "Authorization: Bearer <API_TOKEN>" \
https://snipeit.example.com/api/v1/hardware
The API routes are defined in routes/api.php and use transformers from app/Http/Transformers/ to format JSON responses.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →