Installer un SERVEUR NGINX sous DEBIAN 10 & Proxmox
Hôtes virtuels : domoticz et des customs pages , zoneminder, Nginx, …J’ai installé docker et portainer.io sur proxmox sans problème mais impossible d’utiliser les images docker ; j’ai abandonné d’autant que sur le net les avis sur docker sont partagés , un résumé : "Le seul avantage de Docker est toutes les images de pré-construction sur dockerhub, mais à part cela, aucune raison d'utiliser docker ; sur Proxmox , LXC est en fait un meilleur choix. Les conteneurs LXC se comportent beaucoup plus comme des machines virtuelles que des conteneurs Docker, mieux adaptés à une grande partie du type d'applications exécutées sur un serveur domestique ".
Installation de NGINX (sous Proxmox 6.3 et Debian 10.7 Nginx est connu pour être un service web orienté vers la haute performance et je trouve la configuration des reverse proxy plus facile que sur Apache2 Pour la sécurité, en cas de coupures de courant, les VM reverse proxy doivent redémarrer automatiquement :
Vérifier l’heure de proxmox Configurer la box internet pour attribuer des IP statiques à nos différents serveurs installés, pour Nginx nous le ferons quand une adresse lui aura été attribuée.
Pré requis : l’iso de Debian 10 Buster est téléchargé. Création de la VM :
Accepter toutes les autres propositions (la taille du disque peut être réduite à 8Go)Démarrer la VM et commencer l’Install de BUSTER
Debian 10 BusterTuto pour une installation complète de DEbian buster
Indiquer plutôt un sous-domaine sss.xxxx.ovh Logiciels à installer, en rouge en option ,en plus du système de base :
- Une interface graphique - Un serveur ssh- Un serveur d’impression
L’installation étant terminée, la VM démarre automatiquementIndiquer login et mot de passe et demander l’IP du système :
Connaitre l’IP du serveur avec la console de l' interface graphique :
ou :
Préparer l'installation de Nginx Lancer Putty : Putty permet de faire des copier/coller avec la console
La commande visudo est un moyen sûr et sécurisé de modifier le fichier /etc/sudoers sur les systèmes UNIX et Linux. /etc/sudoers est essentiel pour obtenir un accès privilégié via la commande sudo .Étant donné que le fichier sudoers détermine quels utilisateurs peuvent exécuter des tâches administratives, celles qui nécessitent des privilèges de super utilisateur, il est judicieux de prendre certaines précautions lors de sa modification, et c'est ce que fait visudo.Avec une installation minimale , sudo n'est pas installé : l'installer
sudo apt install sudo
Lancer visudo :
Ou avec nano
Quelques explications :
On ajoute son nom d’utilisateur avec tous les privilèges :
CTRL O , ENTER , CTRL X Configuration NTP (synchronisation de l’horloge et date)Installation de ntp :
Modifier le fichier ntp de cette façon : fichier existant :
Fichier modifié : ajouter ces lignes :
server 0.europe.pool.ntp.org server 1.europe.pool.ntp.org server 2.europe.pool.ntp.org server 3.europe.pool.ntp.org
CTRL O , ENTER , CTRL X Redémarrer le service ntp
Vérifiez la connexion du serveur NTP aux pairs NTP et le résumé de leur état en exécutant la commande :
L’astérisque indique la source horaire préférée. Reconfigurer en choisissant bien Europe/Paris pour le fuseau horaire dpkg-reconfigure tzdata ne fonctionne pas sous buster, utiliser :
Choisir le continent et la ville
Installation de Nginx Exécuter la mise à jour du système puis l’installation de Nginx
Installer les pré-requis:
sudo apt install curl gnupg2 ca-certificates lsb-release
ajouter le package Nginx à notre référentiel
echo "deb http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
télécharger la clé de signature afin de vérifier l'authenticité
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
Installation:
Exécuter Nginx Lors de l'installation, Nginx est démarré et activé au démarrage du système.
Si erreur ci-dessus exécuter les commandes suivantes:
le statut est maintenant sans erreur
Pour un démarrage automatique :
Autres commandes:
Configuration d'un pare-feu de base :https://debian-facile.org/doc:systeme:ufwLes serveurs Debian peuvent utiliser des pares-feux pour s'assurer que seules certaines connexions à des services spécifiques sont autorisées.
Installation du pare-feu UFW
Pour éviter les règles conflictuelles qui peuvent être difficiles à déboguer n’utiliser qu’un seul pare feu Une fois le processus d'installation terminé, vous pouvez vérifier l'état d'UFW :
UFW est désactivé par défaut. L'installation n'activera pas automatiquement le pare-feu pour éviter un verrouillage du serveur. Les politiques par défaut sont définies /etc/default/ufw et peuvent être modifiées à l'aide de sudo ufw default Lors de l'installation d'un package avec apt , un profil d'application sera ajouté à /etc/ufw/applications.d Pour connaitre la liste des profils disponibles sur le système :
WWW : ce profil ouvre uniquement le port 80 (non chiffré) WWW Cache: ce profil ouvre uniquement le port 8080 . WWW Full : ce profil ouvre à la fois le port 80 et le port 443 (trafic chiffré TLS / SSL) WWW Secure : ce profil ouvre uniquement le port 443.
Activation du pare feu : la connexion ssh peut être interrompue , dans ce cas avec la console proxmox il faudra autoriser le port 22
Autoriser Nginx sur le pare-feu :
On peut le vérifier :
Pour le port 22, connexion ssh :
Vérification avec un navigateur :
la page d' accueil se trouve ici en "/usr/share/nginx/html pour afficher un domaine ou une page perso , il suffit de les placer dans un sous répertoire de html
exemple avec cette page html à la racine de "~~/html/mon/"
Configuration de la box internet Nous allons rediriger tout le trafic entrant sur notre réseau (côté WAN – internet) sur les ports 80 et 443, le 80 c’est le non sécurisé, le 443 c’est le SSL (sécurisé.)Configurerons la box internet J’utilise une box Free, connexion :
Ajoutez 2 règles :
Pour completer, il faut ajouter à notre serveur une base de données et PHP
Installer la base de données MariaDB dans NGINX
script de sécurité fourni pré installé avec MariaDB
Répondre ensuite Y à toutes les questions :
Connexion à la BD , vous n'avez pas besoin mot de passe pour vous connecter en tant qu'utilisateur root
Pour créer une BD et attribuer des privilèges:
CREATE DATABASE `database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Pour attribuer des privilèges à un utilisateur sur cette base de données.
GRANT SELECT, INSERT, UPDATE, DELETE ON `database`.* TO 'user'@'localhost';
pour attribuer tous les droits sur une base de données à un utilisateur:
GRANT ALL ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
pour que les nouveaux droits attribués soient pris en compte :la requête FLUSH.
Pour quitter mariaDB : exit
Pour tester tester le nouvel utilisateur , se connecter en tant que cet utilisateur:
mariadb -u example_user -p
Lancer cette commande:
SHOW DATABASES;
Installer PHP dans NGINX, pour générer du contenu dynamique pour le serveur Web. ajouter les référentiels pour PHP
sudo apt-get install software-properties-common
packages à installer :
On vérifie que php est installé correctement et a démarré:
Sécuriser PHP-FPM avec cgi.fix_pathinfo dans le fichier de configuration(souvent dans les tutos): ce n'est pas nécessaire avec les versions de PHP >5.21 par contre il est utile d'augmentater la limite de la mémoire pour améliorer les performances et d'indiquer la time zone:
sudo nano /etc/php/7.3/fpm/php.ini
Pour chercher un mot dans nano: CTRL W (le fichier est très grand)Autres options :
file_uploads = On upload_max_filesize = 32M max_execution_time = 300 post_max_size = 32M max_input_time = 300 max_input_vars = 4440
La version 7.3 a été installée ;Configuration de Nginx - Ajouter nginx au groupe www-data- Changer le propriétaire du répertoire où se trouve le site (/usr/share/nginx/html, /var/www/html, ...) en www-datadans ce tuto le site se trouve dans "/usr/share/nginx/html"
Si ce serveur n’a qu’un seul site ,nous n’avons besoin que d’une seule configuration PHP ( www.conf par défaut, le "pool"), on s'assure donc que ce fichier contient la configuration suivante:
si le fichier est OK : CTRL X sinon apès modification CTRL , ENTER , CTRL X Si il y a plusieurs sites rattachés à ce serveur ,chaque pool php-fpm doit être configuré dans un fichier à l'intérieur du répertoire /etc/php7.3/fpm/pool.d.
Il suffit de copier le contenu du fichier précédent(www.conf) et de modifier au minimun les lignes:- au début [www]. Renommez-le en [nom du site].- modifiez les champs utilisateur et groupe - modifiez le nom du fichier de socket: /run/php/php7.3-fpm.sock devient /run/php/php7.3-nom du site-fpm.sock. exemple :
[monitor] user = michel group = monitor listen = /var/run/php/php7.3-monitor-fpm.sock
Le fichier de configuration de Nginx doit contenir : user www-data;
- Configuration de l’hôte virtuel (ici default.conf) devra être configuré comme suit : Il faut remplacer le fichier existant /etc/nginx/conf.d/default.conf par celui-ci :
server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.php index.html index.htm; location / { if ($request_uri ~ ^/(.*)\.html$) { return 302 /$1; } } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
sudo nano /etc/nginx/conf.d/default.conf
redémarrer Nginx et créer un fichier php qui affichera les infos php
sudo systemctl restart nginx nano /usr/share/nginx/html/phpinfo.php
<?php phpinfo(); ?>
Dans un navigateur:
Cette configuration d'un hote virtuel est développé plus loin avec le https.
Installer PHPADMINlogiciel web gratuit (open source) basé sur PHP pour gérer les serveurs de bases de données MySQL et MariaDB. Il n’existe pas de package Debian 10 il faut télécharger l'archive tar sur le site officiel , vérifier le lien de la dernière mise à jour: https://www.phpmyadmin.net/ Le 10/02/2021 version 5.0.4
Ajout des extensions php et téléchargement de phpMyAdmin remplacer le numéro de version par le numéro de la version en cours.
su apt-get update & apt-get upgrade -y apt install php-{mbstring,zip,gd,xml,pear,gettext,cgi} wget https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.tar.gz
extraction de l’ archive:
mkdir /usr/share/nginx/html/phpmyadmintar xzf phpMyAdmin-* --strip-components=1 -C /usr/share/nginx/html/phpmyadmin
cp /usr/share/nginx/html/phpmyadmin/config{.sample,}.inc.php nano /usr/share/nginx/html/phpmyadmin/config.inc.php
pour le Blowfish Secret vous pouvez le gébérer en allant sur ce site:
$cfg['blowfish_secret'] = '$1$mIMbRWxs$PjwPO3Mh8GcGyXqyS30UK.';
Décommenter les lignes ci-dessous :
CTRL O , ENTER , CTRL X Importez le create_tables.sql pour créer des tables pour phpMyAdmin ; vérifier le chemin du répertoire de "create_table.sql"
Connexion à MariaDB :
Ajoutez un utilisateur (ici michel) et accordez lui l'autorisation à la base de données de phpMyAdmin.
GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass'; FLUSH PRIVILEGES; exit;
FLUSH PRIVILEGES; : commande pour que les privilèges soient pris en compte :
Configurer NGINX pour phpMyAdmin Créez un fichier de configuration d'hôte virtuel pour phpmyadmin et tous les sites rattachés à ce serveur, de la même façon que le fichier default.conf, lors de l'installation de PHP..
cd /etc/nginx/conf.d sudo cp default.conf nginx.conf sudo mv default.conf default.conf.save sudo nano nginx.conf
server { listen 80; server_name 192.168.1.7; root /usr/share/nginx/html/; location / { index index.php; } ## Images and static content is treated different location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ { access_log off; expires 30d; } location ~ /\.ht { deny all; } location ~ /(libraries|setup/frames|setup/libs) { deny all; return 404; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$fastcgi_script_name; } }
Créez un répertoire tmp pour phpmyadmin et modifiez l'autorisation.Définissez la propriété du répertoire phpyyadmin.
cette dernière commande change le propriétaire de tous les fichiers en www-data et le groupe en www-data.
On redémarre tous les services :
Pour y accéder, en fonction de notre configuration, ouvrez le navigateur et entrez :- en local l'adresse IP du serveur:IP/phpmyadmin - distant : domaine/phpmyadmin ; il faut auparavant avoir fait une redirection du port 80 de la box vers l' IP du serveur nginx
Création des noms de domaine pour les différents serveurs, domoticz, zoneminder, monitor, ….
Nom de domaine Si vous avez souscrit un domaine chez OVH (2 Euros HT /an)Pour ajouter une redirection, cliquez sur Zone DNS
L’édition d’une zone DNS est une manipulation sensible , Tableau des différents types d’enregistrements :
Choisir le domaine de type A et modifier l’ adresse IP
Avec un navigateur taper votre nom de domaine : vous devez arriver sur la page d’accueil de votre serveur Nginx Vous pouvez faire de même avec vos sous-domaines
Configuration des hôtes virtuels (sous domaines)Lorsque vous utilisez le serveur Web Nginx, vous pouvez utiliser des hôtes virtuels pour héberger plusieurs domaines à partir d'un seul serveur, c’est ce que nous voulons faire avec le « Reverse Proxy »Il ne faut pas confondre proxy et reverse proxy. Un proxy est un serveur qui se positionne généralement entre les utilisateurs et internet et qui permet à ceux-ci d'accéder à internet au travers son service de proxy. Un reverse proxy se positionne en frontal d'un serveur web et permet de rediriger les requêtes venant de l'internet vers des serveurs (web) qui eux, sont en internes du réseau. C'est donc exactement l'inverse. https://www.it-connect.fr/configurer-nginx-en-tant-que-reverse-proxy/
Par défaut, la configuration officielle se trouve à cet emplacement (déjà utilisé après l'installation de Nginx): /etc/nginx/conf.d/default.conf
avec certaines distributions les configurations des hôtes virtuels peuvent setrouver à cet emplacement : /etc/nginx/sites-available; dans ces 2 cas, les fichiers sont implémentés en tant que convention de configuration.Extrait du fichier '/etc/nginx/nginx.conf installé dans la configuration installée précédemment:
Si vous souhaitez néanmoins utiliser le 2eme cas , il suffit d'ajouter au fichier de configuration de Nginx un include:
sudo nano /etc/nginx/nginx.conf
include /etc/nginx/sites-enabled/*.conf;
/etc/nginx/sites-enabled/ est le lien vers /etc/nginx/sites-available/
1.Configuration a exécuter pour chaque hôte virtuel non sécurisé (http) Créer un fichier de configuration par site web (par nom de domaine ou sous domaine),
Exemple : -/etc/nginx/conf.d/domoticz.conf -/etc/nginx/conf.d/zoneminder.conf -/etc/nginx/conf.d/monitor.conf (affichage html tablette domoticz) -/………..
pour , par exemple domoticz, la configuration est la suivante :
upstream domoticz { server 192.168.1.75:8082; }server { server_name domoticz.xxxxxxx.ovh; location / { proxy_pass http://domoticz; proxy_set_header Host $host; proxy_connect_timeout 30; proxy_send_timeout 30; }}
upstream : Permet de définir serveur ou un groupe de serveurs. server : Contient toutes les options et directives à propos du sous-domaine ou domaine. courant.Création du fichier "domoticz.conf":
CTRL O , ENTREE, CTRL XDans le navigateur : http://domoticz.DOMAIN
Même chose pour le 2eme serveur,
Et le 3eme …………pour le site hébergé sur ce serveur , pour plus de facilités :- création d'un répertoire www à la racine et d' un sous répertoire "monitor" un lien symbolique va assurer la redirection vers ces répertoires:
mkdir /www mkdir /www/monitor ln -s /www/monitor /usr/share/nginx/html/monitor
- Ajouter des droits , ex: chmod -R u+rx /www (lecture+ exécution) - Tester la bonne configuration :
il ne faut indiquer que l'adresse ip , sans le répertoire ; c'est à l'appel du site qu'il faut , dans le navigateur ajouter le répertoire.Résultat :
2.Configuration a exécuter pour chaque hôte virtuel sécurisé (https)Avec la configuration précédente, tout le trafic entrant sur le port HTTP standard, non sécurisé, est répondu par Nginx, qui le transmet à l'application Web. Pour des raisons de sécurité, il est recommandé d'ajouter une couche de chiffrement avec TLS / SSL et d'utiliser HTTPS.
Installer Certbot: Sous Debian Buster , il est facile d' installer des packages certbot via ces commandes : https://certbot.eff.org/docs/using.html#nginx
Installer le plugin "python-certbot-nginx" afin que Certbot puisse entièrement automatiser la configuration HTTPS du serveur
Obtenir un ou plusieurs certificats, lancer le le plugin:
Résultat pour domoticz :
En cas d’erreur, possible en cas d’impossibilité de vérifier le propriétaire du site, ajouter ces lignes dans les Vhosts
Aide pour Certbot:
les Certtificats Letsencrypt sont valables 3 mois et sont renouvellés automatiquement sur Nginx ; pour le vérifier :
Avec un certificat sur le serveur NGINX, il est possible d’accéder facilement aux autres serveurs domoticz, zoneminder, ….mais pour limiter l’accès des applications une authentification par mot de passe ou mieux par un certificat client sont indispensablesNous devons donc ajouter une demande de mot de passe ou générer un certificat client qui sera charger dans le navigateur web avec une clé privée. la génération d'un certificat client sera l'objet d'un autre tutoriel
Ajouter un mot de passe utilisateur: Créer le fichier de mot de passe (fichier caché /etc/nginx/htpasswd) à l'aide des utilitaires d'OpenSSL et ajouter un utilisateur
Remarque: l’ option -c n’est à effectuer que lors de la création du 1ER utilisateur ; il ne faut pas utiliser cette option ensuite sauf si l’ on veut effacer le fichier pour en créer un nouveau.
Afficher tous les utilisateurs :
Modification de /etc/nginx/sites-available/domoticz.conf : Ajouter :
auth_basic "Restricted Content"; auth_basic_user_file /etc/nginx/.htpasswd;
CTRL ENTER CTRLX Ne pas oublier de relancer le system :
Résultat :
En complément : - voir comment créer une Custom Page de domoticz après son installation….
crée le 14/07/2020 maj 20/01/2021 htmlmaj avec Proxmox 6.3 et Debian 10.7 maj 13/02/2021 Refonte complète de la page