In this blog post, we will look at SNIPE-IT installation on Ubuntu Server with NGINX web server.
Last updated on 9th of March 2021
Check-out step-by-step video demonstration of SNIPE-IT installation.
Requirements for this guide to follow
- Ubuntu server up and running
- Static IP assigned to the server
- Internet connectivity
- Logged in with user account created during Ubuntu server installation or Root user (logging in as root not recommended)
1. Connect to Ubuntu server
Highly recommend to use a SSH client for connectivity and it will make easy to copy/paste commands as compare to directly interacting with your Ubuntu server console.
I will be using Putty as SSH client. Here is the direct link to download Putty or you could use your preferred SSH client.
OpenSSH server status/installation
- OpenSSH is already installed. You can check SSH server status
sudo service ssh status
- If Open SSH server is not installed, you can install it by using the following commands:
sudo apt install OpenSSH-Server
- Verify Open SSH server status
sudo service ssh status
- Open SSH server’s configuration file is located here, file name is sshd_config. Open SSH should work out of the box, however, you can edit it if needed with your preferred choice of editor
cd /etc/ssh
2. Update/Upgrade installed packages
Update and upgrade installed packages on Ubuntu server. You will need to run this command as sudo and enter ‘y’ when prompted to confirm.
sudo apt update && sudo apt upgrade
3. Install NGINX, MySQL, PHP and PHP FPM
- Install NGINX
sudo apt install nginx
- Install MySQL
sudo apt install mysql-server
- Install PHP and PHP-FPM
sudo add-apt-repository universe
sudo apt install php-fpm php-mysql
Check versions
- MySQL server version
sudo mysql -V
- NGINX version
sudo nginx -V
- PHP Version
sudo php --version
Test Installation
- NGINX: Browse to IP address of your server and you should see NGINX generic web page
- MySQL: Run the following command to see the status of MySQL Server
sudo service mysql status
4. Create a new site and test PHP
In this step, we will create a new site for Snipe-IT, disable default site and test php. Also, we will restart the relevant services. We will come back to this later and update the root folder once SNIPE-IT is downloaded.
- Create new site with name ams.teknex.com.au, you can update this name if you like to something else
sudo nano /etc/nginx/sites-available/ams.teknex.com.au
- Add site content as follows, update Directory if you download Snipe-IT in a different folder and Server Name to your Ubuntu Server’s IP address
server { listen 80; listen [::]:80; server_name 172.24.200.95; root /var/www/html; index index.php index.html index.htm; access_log /var/log/nginx/ams.teknex.com.au.access.log; error_log /var/log/nginx/ams.teknex.com.au.error.log; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; } }
Line number | Config | Update |
5 | server_name | Enter your server’s IP Address/Host Name |
9 | access_log | Update name of your website |
10 | error_log | Update name of your website |
20 | location ~ \.php$ | Update PHP-FPM version in fastcgi_pass |
Easiest way to check PHP-FPM version is by typing the following in the terminal and hit tab. This should populate the value as shown below. For instance if your PHP-FPM version is 7.4 then enter the value as php7.4-fpm.
php-fpm
- Enable new site
sudo ln -s /etc/nginx/sites-available/ams.teknex.com.au /etc/nginx/sites-enabled/
- Disable default site
sudo unlink /etc/nginx/sites-enabled/default
- Restart Nginx
sudo service nginx restart
- PHP: Create a simple PHP page and browse to IP_Address/phpinfo.php
sudo bash -c "echo -e '<?php\nphpinfo();\n?>' > /var/www/html/phpinfo.php"
Do not proceed further if PHP is not working
5. Download Snipe-IT
Clone recent version of Snipe-IT from GIT into a local folder snipeit.
- Working directory is /var/www
cd /var/www/
- Clone Snipe-IT to local folder snipeit
sudo git clone https://github.com/snipe/snipe-it snipeit
- Make a copy of .env environmental file
cd /var/www/snipeit
sudo cp .env.example .env
- If you like, you can have a quick look inside the .env file with nano editor. We will come back to this file later on. Don’t make any changes to the file and use Ctrl + X to exit
sudo nano .env
6. Configure MySQL Server
Run MySQL secure installation command line wizard and secure the installation.
sudo mysql_secure_installation
- yes or no, if you would like to install Validate Password Plugin (I selected no for this in my lab environment)
- The next part offers you to change the password for the root of MySQL and enter password twice
- The next option to remove anonymous users, I will choose Yes
- The next option to stop root login remotely, I would go for no
- Reload privileges table: Yes
- You will see, “All done”, once it is all done
7. Create an initial database and a user
In this step, we will create database, user and grant specific privileges to new user.
Database | snipeit_db |
User | snipeit_user |
Password | password |
- Login to MySQL server, provide password for MySQL root user when it prompts
sudo mysql -u root -p
- Create new database snipeit_db
CREATE DATABASE snipeit_db;
- Create new user snipeit_user
CREATE USER 'snipeit_user'@'localhost' IDENTIFIED BY 'password';
- Grant permissions to sipeit_user on database snipeit_db
GRANT ALL PRIVILEGES ON snipeit_db.* TO 'snipeit_user'@'localhost';
- Verify permissions
Show GRANTS FOR 'snipeit_user'@'localhost';
- Flush privileges
flush privileges;
- Quit
quit;
- Restart MySQL service
sudo service mysql restart
- Check MySQL service status
sudo service mysql status
8. Update .env file
Let’s update .env file with the required information.
cd /var/www/snipeit
sudo nano .env
Update the following:
- App_URL
- DB_DATABASE
- DB_USERNAME
- DB_PASSWORD
9. Update folder permissions
Update folder permissions in the Snipe-IT root directory
- Working directory is /var/www/snipeit
cd /var/www/snipeit
- Update permissions
sudo chown -R www-data:www-data /var/www/snipeit/
sudo chmod -R 755 storage
sudo chmod -R 755 public/uploads
10. Download Composer
Working directory is logged in user’s home directory. In my case it is /home/snipeit
sudo curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
11. Install PHP dependencies
There are a number of PHP dependencies, ensure these all are successfully installed.
Working directory: Home directory of logged in user
sudo add-apt-repository universe
sudo apt-get install -y git unzip php php-curl php-mysql php-gd php-ldap php-zip php-mbstring php-xml php-bcmath php-tokenizer
12. Install Composer
Working directory: /var/www/snipeit
cd /var/www/snipeit
sudo composer install --no-dev --prefer-source
13. Generate App Key for .env file
Run the following command and enter yes when prompted
sudo php artisan key:generate
Verify the key generation
Open .env file and check APP_KEY value
sudo nano .env
14. Update Snipe-IT site
We created a site earlier and in this step we will update the root folder.
sudo nano /etc/nginx/sites-available/ams.teknex.com.au
Update the root to the following:
/var/www/snipeit/public
Restart the web server
sudo service nginx restart
15. Snipe-IT pre-flight setup
Browse to IP address of your Ubuntu server and you should see the pre-flight page. Follow the prompts and you are done!!
Your feedback is important for us and other users. Leave it in the comments how did you go with your setup 🙂
Hi Jay!
Thanks for the tutorial. I really enjoy your teaching style. Concise, to the point, and easy to understand. And your blog is phenomenal. Appreciate your work
Hi Val,
You are welcome. I am glad you find my videos and tutorial helpful.
Cheers!
Jay
I installed snipe-it together with zabbix so I cannot go to last step. is there any link to go to pre flight?
your_ip_address/setup is the direct link to pre-flight.
If both services are running on the same port, then there will be an issue.
yeah, same port 80. Hurm
me dice error en el server
Very userful and well done tutorial and explanations. Thanks.
Can I install it on win 10, but isnt server? Cheers!
Hi Jay, Thanks, it is a great tutorial…
Glad to hear you find it helpful.
I am installed SnipeIT on my Ubuntu 20 server. suddenly I can’t login with any user or admin credentials. what is this issue? I have checked on my mysql DB but in the users table I can see only admin name but also I could not login with admin credentials. ? I am fed up.
Hey, Great video and tutorial, would you mind doing one where you update an existing system, would the php upgrade.php command work? after using your steps?
thanks
I have not tested it.
You might have to change the permissions on some specific files in order to achieve the upgrade.
Nice tutorial Jay.
Thanks for the feedback.
Really nice one…More Useful.. Thanks for the video
Thanks for the blog, It’s helpful & really working.
hey i have error
500 Server Error
can you help me
I’m getting 500 server error too. I’ve checked everything. Document root is as specified in the tutorial. :-/
I found the problem. In his tutorial, if you used the information in his screenshot, that was different from the commands that created the snipeit database and username. If you used the same information provided in this tutorial when setting up snipe IT, then apply the following to correct the issue.
cd /var/www/snipeit
sudo nano .env
Change:
DB_DATABASE=snipeit
DB_USERNAME=mysqlsnipeit
To this:
DB_DATABASE=snipeit_db
DB_USERNAME=snipeit_user
Ctrl + Shift + x and Y to save the changes.
sudo service mysql restart
sudo service nginx restart
Open a browser and hit your IP. You should get the pre-flight page. Hope this helps someone!
I figured out why for anyone else having this issue. Edit the below and make sure you have the IP address entered in. As well for the .env the full http://<ipv4 or FQDN>:
sudo nano /etc/nginx/sites-available/<site-name>
When running this line, I get an error message:
# sudo composer install --no-dev --prefer-source
"Do not run Composer as root/super user! See https://getcomposer.org/root for details"
It is highly suggested not to install this as root, is this a known issue for this project, or am I missing someting, like permissions?
I am getting the 500 Server Error after I complete all the steps on ubuntu server 20.04 LTS. Following other tutorials using Centos 7, AlmaLinux and Ubuntu desktop 20.04 I get the same error. I never get the pre-flight check page.
I had these issues after an upgrade. Check out their shell that changes permissions https://snipe-it.readme.io/docs/debugging-permissions. I did that and the site loaded right up. What’s weird, is their documentation gives read/write to apache to all files. (Actually this tutorial here gives read write execute because apache is the owner, that seems even more weird to me)
This worked for me, thanks
I’m unable to generate the key. Tried all the possible ways…
i completed 15 steps, but when I load site show error ??
Fatal error: Uncaught ErrorException: file_put_contents(/var/www/www-root/data/www/findmyphone.today/storage/framework/cache/cf/90/cf906e7195218453e4ff6f1bdcdc6b2d9f6cae71): failed to open stream: No such file or directory in /var/www/www-root/data/www/findmyphone.today/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:187 Stack trace: #0 [internal function]: IlluminateFoundationBootstrapHandleExceptions->handleError(2, ‘file_put_conten…’, ‘/var/www/www-ro…’, 187, Array) #1 /var/www/www-root/data/www/findmyphone.today/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(187): file_put_contents(‘/var/www/www-ro…’, ‘9999999999N;’, 2) #2 /var/www/www-root/data/www/findmyphone.today/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php(77): IlluminateFilesystemFilesystem->put(‘/var/www/www-ro…’, ‘9999999999N;’, true) #3 /var/www/www-root/data/www/findmyphone.today/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php(200): IlluminateCacheFileStore->put(‘snipeit_app_set.. in /var/www/www-root/data/www/findmyphone.today/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php on line 187
Fatal error: Uncaught ErrorException: file_put_contents(/var/www/www-root/data/www/findmyphone.today/storage/framework/cache/cf/90/cf906e7195218453e4ff6f1bdcdc6b2d9f6cae71): failed to open stream: No such file or directory in /var/www/www-root/data/www/findmyphone.today/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:187 Stack trace: #0 [internal function]: IlluminateFoundationBootstrapHandleExceptions->handleError(2, ‘file_put_conten…’, ‘/var/www/www-ro…’, 187, Array) #1 /var/www/www-root/data/www/findmyphone.today/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(187): file_put_contents(‘/var/www/www-ro…’, ‘9999999999N;’, 2) #2 /var/www/www-root/data/www/findmyphone.today/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php(77): IlluminateFilesystemFilesystem->put(‘/var/www/www-ro…’, ‘9999999999N;’, true) #3 /var/www/www-root/data/www/findmyphone.today/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php(200): IlluminateCacheFileStore->put(‘snipeit_app_set.. in /var/www/www-root/data/www/findmyphone.today/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php on line 187
Hi Jay.. I was stuck installing Snipeit. unable to clone from github. at the 5 th point. pls do assist.
very informative articles or reviews at this time.
Nice post. I learn something totally new and challenging on websites
I like the efforts you have put in this, regards for all the great content.