Kwashi Eli
Je suis un SDF hybride (moitié Designer moitié Admin.) Je bavarde pour des humains quand je peux sur www.elkwaetblog.tk et en permanence avec mes machines. et je fais partie de la société Open-SDF (open.sdf30.com)
- Twitter: @KwahieOnline_
- Telegram: @Elkwaet
- Mise en marche d'une machine cloud avec un système open source GNU/Linux
- Paramétrage de l'environnement
- Notion de sécurité de la machine (installation & configuration d'un parfeu)
- Déploiement d'un serveur web asyncrone
- Activation de plusieurs domaines sur la même machine
- Déploiement d'une application web basée sur PHP sur un domaine
… via une connexion sécurisée SSH, en tant qu'utilisateur courant (ou en tant que root, le cas échéant)
$ ssh gezier@ip_du_server
Nous partons sur la base d'une installation fraiche de Debian9. Nous nous connectons en SSH parce que le service SSH y est activé déjà. Ce service requiert l'installation d'un paquet "OPENSSH" à priori puis son activation à partir de l'outils "SYSTEMCTL". POur en apprendre plus sur l'utilisation du service SSH, se référer wiki de ubuntu francophone (https://doc.ubuntu-fr.org/ssh) ou encore au manuel intégré au système unix avec la commande "
$man ssh
".
# apt update && apt upgrade
…
OPTIONNEL: Mettre à jour le fichier .bashrc du Home principal de l'utilisateur courant.
Télécharger mon fichier .bashrc ici sur GitLab. Après téléchargement, copier le fichier nommé "bashrc.txt" dans le home de l'utilisateur courant et le renommer en ".bashrc"; vous pouvez le personnaliser à votre guise.
…
# apt install htop elinks whois mc screenfetch ufw bash-completion sudo curl
$infos
"# ln -s /usr/bin/screenfetch /usr/bin/infos
# adduser gezier
Se connecter en tant que SUPER USER
Option1: $ su
Option2: $ sudo -i
NOTA: Pour l'Option2, il peut arriver que vous obteniez un retour
"bash: sudo : commande introuvable"
Celà dépend du système Linux installé. Dans ce cas, il va falloir installer le "paquet sudo' par un coup de #apt install sudo
(en se connectant en $su
bien attendu)
Ajouter l'utilisateur courant au groupe SUDO:
# gpasswd -a gezier sudo
Véritable couteau suisse à considérer; Le premier gilet de sécurité des applications hébergées ensemble sur une même machine est celui de la machine elle-même. Pour sécuriser une machine le mieux qu'il faut, il faut plusieurs paramètres inhérents aux besoins spécifiques pour lesquelles la machine sera exploitée. Nous ne pouvons pas tout dresser la dessus ici. Nous allons juste prendre une première précaution concernant notre connexion à distance via le service SSH:
Il faut retoucher le fichier de configuration du Serveur SSH.
Avant tout, il faut en faire une petite sauvegarde en le copiant dans un fichier clown dont le nom se terminera par .BAK (juste personnel).
# cd /etc/ssh
# cp sshd_config ssh_config.BAK
L'édition du fichier se fera avec l'application NANO (déja installée sur plusieurs distribution Linux, mais installable facilement au besoin)
# nano sshd_config
Il faut rechercher la ligne suivante à décommenter pour activer ce paramètre et le modifier:
#Port 22
deviendra
Port 987
Le port par défaut du service SSH connu sous le port 22 est désormais passé sur votre machine à 987 (par exemple).
# adduser gezier
Lui créer/modifier son mot de passe
# passwd gezier
Lui permettre d'utiliser les commandes SUDO pour se subtituer à ROOT au besoin, en l'ajoutant au groupe Sudo
# gpasswd -a gezier sudo
ou
# usermod -aG sudo gezier
Sur certaine installation, l'utilisateur ROOT peut se connecter en SSH. Pour bloquer cela, il faut retrouver dans la section #Authentification, la ligne "PERMITROOTLOGIN" et passer le paramètre de YES à NO.
PermitRootLogin no
Après quoi, il faut redémarrer le service SSH
# systemctl restart ssh
Ceci est succeptible de vous déconnecter. Il faut se reconnecter à la machine en SSH, mais cette fois-ci en ameliorant un peu la commande avec précision du nouveau port:
# ssh gezier@ip_du_server -p 987
Nous nous servirons de l'outils UFW.
Vérifions l'état du parfeu
# ufw status
Status: inactive
Il faut ouvrir le port 987 pour le SSH
# ufw allow 987
Il faut ensuite bloquer le port 22 par défaut du SSH
# ufw deny 22
Il faut aussi ouvrir les ports 80 (pour le HTTP) et 443 (pour le SSH) et d'autres ports dont on aura besoin en fonction de nos besoins
Il faut maintenant activer le parfeu et le mettre en route
# systemctl start ufw
# ufw enable
Désormais, vous devez obtenir ce qui suit:
Et…
Un billet sur UFW était publié sur mon blog; confere ElkwaetBlog.
# reboot
La prochaine tentative de connexion par la commande de départ n'aboutira plus. Il faut maintenant préciser le port
#ssh gezier@ip_du_server -p 987
Pour en apprendre plus sur NGINX, confère ElkwaetBlog.
Installation du Serveur Web
# apt install nginx-full
Testez l'opérabilité du serveur HTTP
Méthode1 (état du service du serveur): #systemctl status nginx
Ceci doit retourner ce qui suit:
Méthode2 (Navigateur web): $elinks http://localhost
Doit retourner ce qui suit:
Il est aussi possible d'utiliser les commandes $curl
et $ping
.
Le serveur HTTP est opérationnel à 100%. Cependant il n'est encore lié à aucun domaine. On ne peut y accéder qu'en local sur la machine avec les url suivants:
http://localhost
http://127.0.0.1
ou à distance: http://ip_serveur
Il faut:
L'activation du domaine/sou-domaine se fait dans une configuration DNS du domaine suivant laquelle, le domaine doit pointer sur l'IP de la machine distante (d'hébergement). Cette configuration DNS se gère de plusieurs manières. Habituellement, les registrars offrent une Zone DNS pour créer des records DNS (enrégistrements) de différents types: A, AAA, MX, TXT, CNAME.
Un enregistrement de domaine/sous-domaine suit habituellement le principe suivant:
TYPE A: nom de l'hote > serveur de destination
EX d'outils web: https://whatsmydns.net
$ ping adjovi.go
doit retourner:
puis en navigateur web:
$ elinks http://adjovi.go
doit retourner la page d'acceuil du serveur web de NGINX sur la machine distante
Créer le fichier de configuration du domaine (du site); Ceci sera répété pour activer tout autre hébergement de projets sur la machine afin de réussir à faire de l'hébergement personnalisé multiple.
# cd /etc/nginx/sites-available/
# touch adjovi
Contenu du fichier
Créer le répertoire d'hébergement du site pour le domaine
# login -a gezier
$ mkdir ~/hosting/adjovi/public/
$ nano ~/hosting/adjovi/public/index.html
Insérrer dans le fichier index.html le contenu suivant pour le test:
Ensuite déconnecter l'utilisateur et revenir sous ROOT
$ exit
# ln -s /etc/nginx/sites-available/adjovi /etc/nginx/sites-enabled/
Vérification de l'état des configurations du serveur http
# nginx -t
doit retourner ce qui suit:
puis un redémarage (actualisation) des configurations:
# systemctl reload nginx
Après ceci, l'adresse http://adjovi.go doit afficher la page "index.html" qui a été créé.
Il faut répéter la même opération pour activer autant d'hébergement.
CAS PARTICULIER: Installation d'une plateforme de E-Commerce & E-Business de type CMS
Configuration requise pour Prestashop
https://www.prestashop.com/en/system-requirements
Le serveur ne sert actuellement que des fichiers statiques HTML, CSS (par exemple). Pour un support PHP il faut le préparer à cela. Se documenter pour le cas des autres technologies afin de prendre les dispositions requises pour le déploiement des applications non basées sur PHP (cas des applications onRails, Django, JS, etc…).
Installation de PHP
# apt install php7.0
Vérification de la version PHP installée
# php --version
doit retourner ce qui suit:
Dans ce cas présent, la version installée est la V.7.0
Installation d'extensions de PHP (1)
# apt install php7.0-fpm php-gettext
# systemctl status php7.0-fpm.service
qui doit retourner ce qui suit:
Ceci confirme que le service de PHP-FPM (version 7.0) est bien fonctionnel sur le système.
En éditant le fichier de configuration de l'hôte virtuel du site…
# cd /etc/nginx/sites-available/
# nano adjovi
Modification à intégrer
Modifier la configuration du site "adjovi.go" comme suit:
# nginx -t
, qui doit retourner ce qui suit:
Redémarrer le serveur HTTP
# systemctl restart nginx
Créer un fichier PHP à la racine du site pour tester le support effectif de PHP et le fonctionnement de PHP-FPM
# login gezier
$ nano ~/hosting/adjovi/public/test.php
Insérer dans ce fichier:
Tester dans les navigateurs web en accédant à l'URL
"http://adjovi.go/test.php":
C'est OK. Le serveur HTTP interprete du code PHP maintenant.Image Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
# login gezier
$ mkdir fichiers
$ cd fichiers && pwd
pour obtenir le chemin absolu du répertoires fichiers créé; copier celà
À la fin de téléchargement de l'archive .ZIP, l'envoyer sur le serveur dans le répertoire "fichiers". Trois possibilités au moins se présentent
Dans une nouvelle session de terminal, exécuter la commande suivante (à adapter à votre cas):
$ scp -P 987 "~/Downloads/Prestashop_1.7.5.2.zip" "gezier@ip_serveur:/chemin_complet_repertoires_fichiers"
Entrer les informations SSH dans le client FTP pour se connecter et envoyer le fichier sur le dossier "fichiers".
Cas de l'explorateur de fichiers (ex: Nautilus)
Saisir dans la barre des emplacements la syntaxe suivante:
sftp://gezier@ip_serveur:987
$ curl -O https://download.prestashop.com/download/releases/prestashop_1.7.5.2.zip
(ne pas confondre "O" avec "0 zero")
$unzip prestashop_1.7.5.2.zip
$cp prestashop.zip ~/hosting/adjovi/public/
$cd ~/hosting/adjovi/public/ && ls
Quelques exigences PHP de PrestaShop
Installer des paquets additionnels pour activer des extensions PHP
$ sudo apt install php7.0-curl php7.0-xml php7.0-intl php7.0-xmlrpc php7.0-gd php7.0-zip php7.0-mysql php7.0-mcrypt php-common php-mbstring php-soap php-cli php-ldap
Ensuite, apporter quelques ajustements à PHP.INI
$ sudo cp /etc/php/7.0/fpm/php.ini /etc/php/7.0/fpm/php.ini.BAK
(sauvegarde du fichier par précaution)
$ sudo nano /etc/php/7.0/fpm/php.ini
Ajouter les parametres suivants:
extension = php_mysql.dll
extension = php_gd2.dll
allow_url_fopen = On
allow_url_include = Off
Augmenter les parametres suivants dans les fichiers PHP.INI de PHP-FPM et de PHP-CLI:
Ajustements connexes:
# nano /etc/php/7.0/fpm/pool.d/www.conf
et ajouter la ligne suivante à la fin du fichier
request_terminate_timeout = 300
Redémarrer les services de PHP-FPM
$ sudo systemctl restart php7.0-fpm.service
Changer les permissions du répertoire du site
$ sudo chown -R www-data /home/gezier/hosting/adjovi/
Tester dans un navigateur web … => http://adjovi.go/install
$ sudo apt install mariadb-server
(commande d'installation du paquet principal)$ sudo mysql_secure_installation
(commande d'exécution du script de configuration sécurisée)$sudo mysql
GRANT ALL ON . TO 'admin'@'localhost' IDENTIFIED BY 'p@ssw0rd_créé_pour_admin' WITH GRANT OPTION;
…
OU SUIVRE CETTE MÉTHODEImage Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
…
Ensuite,…
FLUSH PRIVILEGES;
Maintenant se déconnecter de la session root de mysql
exit
Vérifier le service de MariaDB:
$ sudo systemctl status mariadb
Se reconnecter avec le nouvel administrateur:
$ mysql -uadmin -p
Créer une base de données pour le site PrestaShop
CREATE DATABASE adjovishop;
exit
…
Il est aussi possible de gérer les bases de données MySQL à partir d'une application web; le plus populaire est PhpMyAdmin, installable égalament au gré suivant le même principe que n'importe quelle autre application web.
https://phpmyadmin.net
…
Relancer l'adresse: "http://adjovi.go/install"
Information à fournir à l'assistant d'installation:
Adresse du serveur de la base de donnée: localhost
Nom de la base: adjovishop (précédemment créé)
Nom d'utilisateur de la base: admin (précédemmebt créé)
Password: * * * (précédemment créé)
Préfixe: (à changer par 3 autres caracteres)
Installation terminée de la Prestashop1.7, basée sur le framework Symphony.