Big Bytes

Invoice Ninja on Debian Jessie

Installing Invoice Ninja on a Debian Jessie 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 4.1 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 0xcbcb082a1bb943db
user@debian:~# add-apt-repository ‘deb 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 jessie all
deb-src jessie all

Next, fetch and install the GnuPG key:
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 | 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 /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 = 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

You may also like:

Education Law / Legal Lifestyle Linux People Software Technology World

How to stay safe from Email Server Compromises & Data Scams?

Avoid using tools like mobile apps or fancy desktop apps for email send / receive and other critical transactions.

Read More
Media / PR Technology

Web and mobile services for print, online media, news agencies

While creating a dynamic web portal, mobile or desktop applications for broadcast, print and online media, editorial systems, adverts management, page planning, circulation, mobile, social media sync etc you hire an agency that fully understand the technologies and even have its own media channels. We offer custom services based on open source, there are no […]

Read More
Lifestyle Linux People Retail Software Startup Technology

Mobile is Driving Holiday Shopping

Mobile also offers an impressive selection of antiques shops and galleries with a wide variety of collectibles, vintage finds and funky pieces. Some features locally-owned specialty shops featuring high-end clothing, jewelry, furniture and home accessories – you can definitely shop till you drop in Mobile

Read More