Introducción
Invoice Ninja es una solución gratuita de código abierto para facturación desde un servidor web. Es ideal para ecommerce y realiza facturación, cotizaciones, gastos, seguimiento del tiempo y más funcionalidades que serán de utilidad a tu proyecto.
Está construida con Laravel y Flutter y tiene aplicaciones cliente para Android, iOS, macOS, entre otros. Es bastante reconocida por trabajadores autónomos, pequeñas empresas y startups.
Puedes descubrir más detalles sobre Invoice Ninja en la página oficial de la aplicación.
En este tutorial te ayudamos a instalarla de manera fácil, ¡sigue los pasos!
Para instalar Invoice Ninja usa la imagen preinstalada que encontrarás en tu panel de control de Ubuntu 20.04 LTS (64 Bits) utilizando el servicio NGINX, PHP y MariaDB.
Procedimiento de instalación
Actualiza repositorios y paquetes:
# apt update && apt upgrade
Instalación de dependencias:
# apt install gcc g++ make php php-{fpm,bcmath,ctype,fileinfo,json,mbstring,pdo,tokenizer,xml,curl,zip,gmp,gd,mysqli} mariadb-server mariadb-client curl git nginx vim -y
Descarga el instalador de composer:
# curl -sS https://getcomposer.org/installer -o composer-setup.php
Ejecuta el instalador de composer:
# php composer-setup.php --install-dir=/usr/bin --filename=composer
Inicia y activa MariaDB:
# systemctl start mariadb
# systemctl enable mariadb
Configura la seguridad de la base de datos:
# mysql_secure_installation
Comprueba el estado del servicio PHP instalado:
# systemctl status php7.4-fpm.service
Accede a MariaDB:
# mysql -u root
Crea la base de datos, usuario y da permisos en ella:
MariaDB .. > create database ninjadb;
MariaDB .. > create user 'ninja'@'localhost' identified by 'password';
MariaDB .. > grant all privileges on ninjadb.* to 'ninja'@'localhost';
MariaDB .. > flush privileges;
MariaDB .. > quit;
Crea así el directorio para certificados de NGINX:
# mkdir -p /etc/nginx/cert
Crea certificado auto firmado:
# openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/ninja.crt -keyout /etc/nginx/cert/ninja.key
Elimina el directorio default:
# rm /etc/nginx/sites-enabled/default
Crea el fichero de configuración para Invoice Ninja:
# vim /etc/nginx/conf.d/invoiceninja.conf
Inserta ahora el siguiente contenido (Modificar server_name por el correspondiente):
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name invoiceninja;
# Here, enter the path to your invoiceninja directory, in the public dir.
root /usr/share/nginx/invoiceninja/public;
client_max_body_size 20M;
gzip on;
gzip_types application/javascript application/x-javascript text/javascript text/plain application/xml application/json;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 1000;
index index.php index.html index.htm;
# Enter the path to your existing ssl certificate file, and certificate private key file
# If you don’t have one yet, you can configure one with openssl in the next step.
ssl_certificate "/etc/nginx/cert/ninja.crt";
ssl_certificate_key "/etc/nginx/cert/ninja.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
charset utf-8;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?q= last;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Here we pass to php-fpm listen socket. For configuration see /etc/php-fpm.d/*.conf.
fastcgi_pass unix:/run/php/php7.4-fpm.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;
}
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;
}
server {
listen 80;
server_name invoiceninja;
add_header Strict-Transport-Security max-age=2592000;
rewrite ^ https://$server_name$request_uri? permanent;
}
Detén ahora Apache2:
# systemctl stop apache2
Desactiva Apache2:
# systemctl disable apache2
Inicia NGINX:
# systemctl start nginx
Activa NGINX:
# systemctl enable nginx
Accede al directorio configurado de NGINX:
# cd /usr/share/nginx
Crea el directorio y accede a él:
# mkdir invoiceninja && cd invoiceninja
Descarga así último paquete (Revisarlo en https://github.com/invoiceninja/invoiceninja/releases):
# wget https://github.com/invoiceninja/invoiceninja/releases/download/v5.1.42-release/invoiceninja.zip
Instala unzip:
# apt install unzip
Descomprime ahora el fichero mediante unzip:
# unzip invoiceninja.zip
Realiza la instalación mediante composer:
# php /usr/bin/composer install --no-dev
Genera esta llave:
# php artisan key:generate
# php artisan optimize
Cambia la propiedad y el grupo del directorio:
# chown -R www-data:www-data /usr/share/nginx/invoiceninja
Modifica ahora los permisos del directorio:
# chmod -R g+s /usr/share/nginx/invoiceninja
Abre crontab del usuario www-data:
# sudo -u www-data crontab -e
Inserta en estos momentos el siguiente trabajo programado:
* * * * * php /usr/share/nginx/invoiceninja/artisan schedule:run >> /dev/null 2>&1
Instala dependencias opcionales:
# apt install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
Y finaliza la configuración accediendo desde el navegador para acabar la instalación:
Añade la configuración seleccionada para la base de datos:
Completa los datos, acepta los términos de uso e inicia sesión:
¡Perfecto! Has completado el procedimiento, ya puedes empezar a utilizar Invoice Ninja:
Recuerda que puedes utilizar la certificación de Let's Encrypt en lugar de un certificado auto firmado, puedes seguir el siguiente tutorial para ello: Certificado TSL/SSL de Let´s Encrypt: te enseñamos cómo configurarlo.
Esperamos haberte ayudado con este artículo. Si te quedan dudas sobre esta u otra cuestión relacionada con tus servidores en Clouding, escríbenos a soporte@clouding.io. ¡Estamos para ayudarte! 😉