0 19 min 2 yrs

Installing Invoice Ninja on a Debian Server with MariaDB, PHP-FPM and Nginx. Invoice Ninja is a free, open-source solution for invoicing and billing customers and it’s based on Laravel framework. This guide should work on other Linux systems as well with few changes.

Login via SSH
Update the system and install necessary packages

user@debian:~# apt-get update && apt-get -y upgrade
user@debian:~# apt-get install python-software-properties git curl openssl

Install MariaDB 10.0

user@debian:~# apt-key adv –recv-keys –keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
user@debian:~# add-apt-repository ‘deb http://mirror.jmu.edu/pub/mariadb/repo/10.0/debian wheezy main’
user@debian:~# apt-get update
user@debian:~# apt-get install mariadb-server

When the installation is complete, run the following command to secure your installation:


Next, we need to create a database for our Invoice Ninja instance.

mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE ininja;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON ininja.* TO ‘ininjauser’@’localhost’ IDENTIFIED BY ‘ininjauser_passwd’;
MariaDB [(none)]> quit

Install and configure PHP and Nginx

The latest versions of Nginx 1.6.2 and PHP 5.6 are not available via the default Debian repositories, so we will add the Dotdeb repository. Open the /etc/apt/sources.list file and append the following lines:

user@debian:~# nano /etc/apt/sources.list
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Next, fetch and install the GnuPG key:
wget http://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg

Update the system and install Nginx, PHP and all necessary extensions:

user@debian:~# apt-get update
user@debian:~# apt-get install nginx php5-fpm php5-cli php5-mcrypt php5-gd
user@debian:~# php5enmod mcrypt

Install Composer

Composer is a dependency manager for PHP with which you can install packages. Composer will pull in all the required libraries and dependencies that you need for your project.

user@debian:~# curl -sS https://getcomposer.org/installer | php
user@debian:~# mv composer.phar /usr/local/bin/composer

Install Invoice Ninja

Create a root directory for your application.

user@debian:~# mkdir -p ininja

Clone the project repository from GitHub:

user@debian:~# git clone https://github.com/hillelcoren/invoice-ninja.git /var/www/ininja
user@debian:~# cd /var/www/ininja

Install all dependencies:

user@debian:~# composer install –no-dev -o

Set the environment to production:

user@debian:~# cp bootstrap/environment.default.php bootstrap/environment.php

user@debian:~# nano bootstrap/environment.php

Open the database.php file and edit the database settings:

user@debian:~# nano config/database.php

‘mysql’ => array(
‘driver’ => ‘mysql’,
‘host’ => ‘localhost’,
‘database’ => ‘ininja’,
‘username’ => ‘ininjauser’,
‘password’ => ‘ininjauser_passwd’,
‘charset’ => ‘utf8’,
‘collation’ => ‘utf8_unicode_ci’,
‘prefix’ => ”,

Run database migrations and seed the database with sample data:

user@debian:~# php artisan migrate
user@debian:~# php artisan db:seed

Generate a new application key:

user@debian:~# php artisan key:generate

user@debian:~# nano config/app.php

‘key’ => ‘Fi3hrBzshYCqzCcX9l99x1mAG31urmGr’,

Configure Nginx and PHP

Create a new PHP-FPM pool for your user:

user@debian:~# sudo nano /etc/php5/fpm/pool.d/your_user.conf

user = your_user
group = your_user
listen = /var/run/php5-fpm-your_user.sock
listen.owner = your_user
listen.group = your_user
listen.mode = 0666
pm = ondemand
pm.max_children = 5
pm.process_idle_timeout = 10s;
pm.max_requests = 200
chdir = /

Do not forget to change your_user with your username.

Restart PHP-FPM

user@debian:~# sudo service php5-fpm restart

Generate SSL certificate:

user@debian:~# mkdir -p /etc/nginx/ssl
user@debian:~# cd /etc/nginx/ssl
user@debian:~# openssl genrsa -des3 -passout pass:x -out ininja.pass.key 2048
user@debian:~# openssl rsa -passin pass:x -in ininja.pass.key -out ininja.key
user@debian:~# rm ininja.pass.key
user@debian:~# openssl req -new -key ininja.key -out ininja.csr
user@debian:~# openssl x509 -req -days 365 -in ininja.csr -signkey ininja.key -out ininja.crt

Next, create a new Nginx server block:

user@debian:~# sudo vim /etc/nginx/sites-available/your_ininja_site

server {
listen 443 default;
server_name your_ininja_site;

ssl on;
ssl_certificate /etc/nginx/ssl/ininja.crt;
ssl_certificate_key /etc/nginx/ssl/ininja.key;
ssl_session_timeout 5m;

ssl_ciphers ‘AES128+EECDH:AES128+EDH:!aNULL’;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

root /home/your_user/your_ininja_site/public;

index index.html index.htm index.php;

charset utf-8;

location / {
try_files $uri $uri/ /index.php?$query_string;

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }

access_log /var/log/nginx/ininja.access.log;
error_log /var/log/nginx/ininja.error.log;

sendfile off;

location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm-your_user.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;

location ~ /.ht {
deny all;

server {
listen 80;
server_name your_ininja_site;

add_header Strict-Transport-Security max-age=2592000;
rewrite ^ https://$server_name$request_uri? permanent;

Do not forget to change your_user with your username.

Activate the server block by creating a symbolic link and restart Nginx:

user@debian:~# ln -s /etc/nginx/sites-available/your_ininja_site /etc/nginx/sites-enabled/your_ininja_site
user@debian:~# /etc/init.d/nginx restart

You have successfully installed Invoice Ninja on Debian. For more information about Invoice Ninja, please refer to the Invoice Ninja website. You will full support if you use one of our Linux VPS Hosting services, in which case you can simply ask our expert Linux admins to setup this for you. They are available 24×7 and will take care of your request immediately.

Leave a Reply