Dans cet article, je vais vous montrer comment installer Ubuntu, Apache, MariaDB, PHP dans un environnement virtuel avec Virtual Machine Manager d’un NAS Synology. (Ce travail n’est pas fait avec Conatiner Manager). Vous allez aussi installer un certificat Let’s Encrypt pour accéder à votre installation (Apache / InvoiceNinja) grâce au protocole HTTPS. Finalement, vous allez installer InvoiceNinja, qui est une application de facturation, de paiement et de gestion de workflow. Suivre ce lien pour en savoir plus sur les fonctionnalités
J’ai écris cet article au fur et à mesure de mes investigations pour arriver à mes fins, sans avoir une connaissance approfondie sur les VMM (Virtual Machine Manager) de Synology. Si vous découvrez une erreur ou une amélioration, je serai ravi d’avoir votre partage.
Cet exercie est réalisé avec un Macbook, un NAS synology DS220+ (DSM 7.2), dans un réseau local (Routeur WiFi de mon domicile). J’ai ajouté 4G de RAM à mon NAS (6G au total)
InvoiceNinja
InvoiceNinja est une application de facturation qui simplifie et facilite l’envoi de factures et la réception de paiements. Elle a une version gratuite et une version payante.
Prérequis
Vous devrez aussi avoir
- Vous connaissez Ubuntu et vous savez l’installer ou/et de personaliser son installation. Vous connaissez l’outil ‘ufw’ d’ubuntu (Firewall). Je ne parlerai pas de ceci.
- un nom de domaine avec la possibilité de créer un A Record dans votre zone DNS. Si vous n’avez pas de nom de domaine, dans votre console de votre NAS, vous pouvez créer un DDNS ce qui pourrait vous aider, mais je ne montrerai pas cette partie.
- un accès à votre Routeur WiFi pour activer et configurer le port forwarding 443.
- Attention: Mon NAS DS220+ n’a que 2G de RAM. Afin d’attribuer de la RAM à ma machine virtuelle sans qu’elle utilise la RAM actuelle, j’ai ajouté une barette de RAM de 4G à mon NAS.
Virtual Machine Manager (VMM)
Depuis votre NAS, ouvrez le centre de paquets et installer Virtual Machine Manager
Vous allez devoir créer une Cluster. J’ai réponse aux proposirions par défaut…
Téléchargement d’Ubuntu
Télécharger l’ISO de Ubuntu Server
Ouvrer Virtual Machine Manager et dirigez-vous dans l’onglet ‘images’ et ajoutez l’ISO d’Ubuntu
Création de votre VM
Créer votre machine virtuelle en suivant ces images:
Ci dessous:
- Définissez le nombre de processeur que vous voulez donner à votre VM
- Donnez au moins 2G à votre VM
- Bien sélectionner ‘vga’. Ne pas garder la sélection ‘vmvga’
Dans la prochaine fenêtre, sélectionnez les utilisateurs de votre NAS qui peuvent accéder à la VM, puis Cliquez suivant et confirmez le résumé.
Ensuite, quand votre VM est créé, mettez la sous tension et cliquez sur « Connecter ». Une fenêtre de votre navigateur va s’ouvrir et vous allez devoir installer Ubuntu.
Installation d’Apache et de MariaDB
Quand Ubuntu est installé, mettez le à jour
sudo apt update && sudo apt upgrade
Puis quand le processus est terminé, installer
apt install lsb-release unzip
Installation d’apache
sudo apt install apache2 apache2-utils
Vérifier que apache tourne
sudo service apache2 status sudo service apache2 start # Démarrage d'apache sudo service apache2 status
Modifier les permissions sur le dossier
sudo chown www-data:www-data /var/www/html/ -R
Installation de MariaDB
sudo apt install mariadb-server mariadb-client sudo service mariadb status #Vérifiez le status sudo service mariadb start #démarrer MariaDB si besoin
Saisisser la commande suivante et répondre aux questions
sudo mysql_secure_installation
Enter the current password for root: Saisisser un mot de passe pour root et confirmer-le
Switch to unix_socket authentification [Y/n]?: n
Change the root password [Y/n]?: n
Remove user anonimous account [Y/n]?; Y or press enter
Disable root login remotely [Y/n]?: Y
Remove test database and access to it) [Y/n]: Y
Reload privilege tables now [Y/n]: Y
Install php
sudo apt install php
Installation de phpmyadmin
sudo apt install phpmyadmin
Répondez aux questions
Configure the database with dbconfig-common [yes/non]: yes
Web server to reconfigure automatically: 1
sudo service apache2 restart
Si vous n’arrivez pas à accéder à phpmyadmin, pas de soucis, on verra cela plus bas en créant un utilisateur dans la base de donnée.
Rendre vôtre VM accessible depuis l’extérieur
Pour ces parties, vous allez devoir faire preuve d’investigation, car mon hébergeur, ma boîte WiFi n’est pas forcément les mêmes que les vôtres. Je ne vais donc pas fournir des images ou écrire exactement mes étapes vu que nos interfaces diffèrent.
Dynamic DNS / Sous domaine
Vous allez avoir besoin de chercher et de relever l’adresse IP fournie à votre Routeur par votre fournisseur d’accès à internet (Orange, Sunrise, Salt, Swisscom, etc). Vous allez en avoir besoin plus loin.
Vous devez créer DDNS. Personnellement, je l’ai fais depuis mon hébergeur pour avoir quelque chose comme cela: invoice.mondomaine.ch
Redirections des ports
Vous devez vous rendre dans votre routeur WiFi qui s’accède généralement avec l’adresse 192.168.1.1. Rechercher l’onglet « redirection des ports » ou « Port forwarding » et créez une nouvelle entrée de la sorte
Depuis votre routeur que vous pouvez connaitre l’adresse IP local qui est fourni à votre NAS par votre routeur.
Il est aussi fort recommandé de réserver cette adresse IP de manière à ce que votre routeur fournisse toujours la même adresse IP à votre VM, ou… qu’il ne la fournisse pas à un autre périphérique.
Proxy inversé (Reverse proxy)
Rendez-vous sur votre panneau de configuration) , puis Portail de connexion et sur l’onglet Avancé et cliquer sur proxy inversé, puis cliqué sur créé
Saissisez les informations suivantes
- Source – Nom d’hôte: L’URL que cous avez créé plus haut (DDNS) pour accéder à votre NAS
- Destination – Nom d’hôte: L’adresse IP de votre VM, fournie par votre routeur
A partir de maintenant votre machine virtuelle est accessible depuis l’extérieur. Mais si votre saisissez dans votre navigateur saisissez https://invoice.quelquechose.ch, vous allez avoir un message d’avertissement Warning: Potential Security Risk Ahead que vous allez devoir confirmer pour continuer. Ceci parce qu’il manque un certificat SSL.
Configuration de SSL (https)
Il faut maintenant que vous puissiez accéder à votre serveur apache de manière sécurisée. En d’autres de mots, vous devez pouvoir afficher la page d’apache par défaut, qui se trouve dans votre VM, depuis votre navigateur de manière sécurisée (https://invoice.mondomaine,ch) avec le protocole HTTPS
Certificat SSL
Rendez-vous sur votre panneau de configuration) , puis Securité et sur l’onglet Certificat. Ajouter un certifcat et suivez ces indications
- Dans la première fenètre « Veuillez choisir une action », cocher ajouter un nouveau certificat
- Dans la deuxième fenêtre « Veuillez choisir une action », donner une description et cocher Procurez-vous un certificat auprès de Let’s Encrypt
- Dans la fenêtre « Procurez-vous un certificat auprès de Let’s Encrypt », saisissez le DDNS que vous avez créé plus haut (invoice.mondomaine.ch) et siasissez votre adresse e-mail. Laissez vide le dernier champ.
- Cliquez « effectué »
- Une fois que votre certificat est créé, sélectionnez-le et cliquez sur ‘paramètres’
- Sous l’onglet Configurer, rechercher votre DDNS sous la colonne ‘service’ et assurez-vous quand la colonne ‘certificate’, le certificat que vous avez créé est bien sélectionné. Par défaut, cela ne l’est pas.
Si vous recevez un message d’erreur indiquant que votre VM n’est pas accessible, retournez dans la console de votre routeur WiFi et créez unenouvelle règle (port forwarding) pour le port 80 et activez provisoirement le redirection du port 80. Puis refermez le. Ci-dessous, l’adresse IP correspond à celle fournie à votre NAS.
Résultat
Vous pouvez tester maintenant. Si vous saisissez dans votre navigateur préféré https://invoice.mondomaine.ch, vous devriez voir la page apache de votre container! Bravo!!
Installation de InvoiceNinja
cd mkdir Soft cd Soft wget https://github.com/invoiceninja/invoiceninja/releases/download/v5.10.43/invoiceninja.tar sudo mkdir -p /var/www/invoiceninja/ sudo tar xf invoiceninja.tar -C /var/www/invoiceninja/ sudo chown www-data:www-data /var/www/invoiceninja/ -R
Il faut maintenant créer une base de donnée
sudo mysql MariaDB [(none)]> create database invoiceninja; MariaDB [(none)]> create user ninja@localhost identified by 'ninja_password'; MariaDB [(none)]> grant all privileges on invoiceninja.* to ninja@localhost; MariaDB [(none)]> flush privileges; MariaDB [(none)]> exit;
Puis, il faut installer les modules PHP nécessaire à InvoiceNinja
sudo apt install php-imagick php8.3 php8.3-mysql php8.3-fpm php8.3-common php8.3-bcmath php8.3-gd php8.3-curl php8.3-zip php8.3-xml php8.3-mbstring php8.3-bz2 php8.3-intl php8.3-gmp
et redémarrer apache
sudo service apache2 restart
Configuration de Ninja
Commencer par copier le fichier .env.example, que vous allez modifier ensuite
cd /var/www/invoiceninja/ sudo cp .env.example .env #Copier et renommer sudo nano .env #Editer le fichier
Rechercher les lignes suivantes et modifier les comme indiqué ci-dessous. (APP_URL doit avoir le sous-domaine que nous avons créé plus haut (A Record))
# APP_URL=http://localhost APP_URL=https://invoice.mondomaine.ch TRUSTED_PROXIES=* REQUIRE_HTTPS=true
Puis, toujours dans le même fichier, modifier les lignes suivantes
DB_HOST=localhost DB_DATABASE=invoiceninja # Moficier ici le nom de la base de donnée que vous avez créé plus haut DB_USERNAME=ninja # Modifier ici le nom d'utilisateur que vous avez créé plus haut DB_PASSWORD=ninja_password # et ici le mot de passe que vous avez défini pour cet utilisateur DB_PORT=3306
Corriger les propriétés du fichier .env
sudo chown www-data:www-data /var/www/invoiceninja/.env
Ensuite, exécutez la commande suivante pour générer une clé d’application unique pour votre installation InvoiceNinja.
sudo php8.3 /var/www/invoiceninja/artisan key:generate
et migrez la dans la base de donnée
sudo php8.3 /var/www/invoiceninja/artisan migrate:fresh --seed
Cette commande va créer les tables dans votre base de données. Cette opération est relativement longue.
Correction de la configuration d’Apache
Nnous aimerions pour avoir accéder à l’application de facturation depuis l’URL https://invoice.mondomaine.ch
Pour cela, vous devez modifier la configuration d’appache. Etidez le fichier
sudo nano /etc/apache2/sites-available/invoice-ninja.conf
et coller ces lignes:
<VirtualHost *:80> ServerName invoice.mondomaine.ch DocumentRoot /var/www/invoiceninja/public <Directory /var/www/invoiceninja/public> DirectoryIndex index.php Options +FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/invoice-ninja.error.log CustomLog ${APACHE_LOG_DIR}/invoice-ninja.access.log combined </VirtualHost>
Vérifier bien que ServerName correspond bien à votre domaine, comme vu plus haut. Sauver et fermer ce fichier, et activer ce virtual host
sudo a2ensite invoice-ninja.conf
On a besoin d’activer le rewrite module et de redémarrer Apache
sudo a2enmod rewrite sudo service apache2 restart
Vous pouvez maintenant accéder à la page de l’assistant de configuration d’Invoice Ninja (invoice.mondomaine.ch/setup). Si vous voyez la page Apache par défaut au lieu de l’assistant de configuration, vous devez désactiver l’hôte virtuel par défaut.
sudo a2dissite 000-default.conf
Setup de InvoiceNinja
Vous pouvez maintenant lancer le setup de InvoiceNinja en suivant cette url https://invoice.mondomaine.ch. Cependant, j’ai rencontré une erreur « Blocked loading mixed active content »
Qu’est-ce que le contenu mixte ? Lorsqu’un utilisateur visite une page servie via HTTP, sa connexion est ouverte aux écoutes clandestines et aux attaques de l’homme du milieu (MITM). Lorsqu’un utilisateur visite une page servie via HTTPS, sa connexion avec le serveur Web est authentifiée et cryptée avec SSL et donc protégée contre les écoutes indiscrètes et les attaques MITM. Cependant, si une page HTTPS inclut du contenu HTTP, la partie HTTP peut être lue ou modifiée par des attaquants, même si la page principale est diffusée via HTTPS. Lorsqu’une page HTTPS a du contenu HTTP, nous appelons ce contenu « mixte ». La page Web que l’utilisateur visite n’est que partiellement cryptée, puisqu’une partie du contenu est récupérée en clair via HTTP. Le Mixed Content Blocker bloque certaines requêtes HTTP sur les pages HTTPS.
En d’autres mots, la page setup, fait appel à des fichiers CSS ou Javascipt avec le protocole HTTP alors que vous utiliser le protocole HTTPS.
J’ai résolu mon problème en modifiant cette ligne, dans le fichier .env (voir plus haut)
TRUSTED_PROXIES=*
Pour les dernières étapes, saisissez l’URL https://invoice.mondomaine,ch qui vous redirigera dans le setup. Il faudra donner les informations de votre base de données que nous avons défini plus haut. Il faudra aussiet surtout n’oubliez pas de cocher la case « HTTPS require »
CRON
Vous devez encore configurer votre CRON pour vos rappels (etc) soient envoyés. Editez le fichier
sudo -u www-data crontab -e # Ajouter la ligne suivante * * * * * cd /var/www/invoiceninja && php artisan schedule:run >> /dev/null 2>&1
Références:
- https://www.linuxbabe.com/ubuntu/install-invoiceninja-ubuntu-22-04-apache-nginx
- https://www.linuxbabe.com/ubuntu/install-lamp-stack-ubuntu-22-04-server-desktop
- https://mariushosting.com/synology-https-ssl-to-your-docker-containers-without-port-at-the-end/
- https://www.wundertech.net/container-manager-on-a-synology-nas/