Try   HackMD

Déploiement d'un serveur cloud basé sur Linux pour hébergement d'applications web

SDFClass06 by Open-SDF

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


Moi c'est


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)


Contenu de l'atelier

    • 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

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Identification des types de commandes:

  • Commençant par "#" : commande Super User
  • Commençant par "$" : commande User
  • Commençant par ">" : commande MySQL

Connexion distante à la machine

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".

FIRST TOUCH

> Mettre à jour le gestionnaire des paquets logiciels

# 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.

> Installer les paquets logiciels usuels (liste non exhaustives des paquets de base) pour quelques outils dont on se servira pour évoluer:

# apt install htop elinks whois mc screenfetch ufw bash-completion sudo curl

[Optionnel] Créer un lien symbolique de l'outil SCREENFETCH qui permet d'obtenir un aperçu globale des ressources de la machine, pour quelque chose de plus convival comme une nouvelle commande "$infos"

# ln -s /usr/bin/screenfetch /usr/bin/infos

> Créer un nouvel utilisateur (le principal administrateur)

# 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 $subien attendu)

Ajouter l'utilisateur courant au groupe SUDO:
# gpasswd -a gezier sudo

LA SÉCU.

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:

Changement du port de connexion par défaut du SSH (OPTIONNEL)

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).

Créer un utilisateur classique pour la connexion et la gestion de la machine (cas d'une connexion unique de ROOT permise à l'acquisition de la machine)

# 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

Bloquer la connexion directe en SSH à l'utilisateur ROOT (OPTIONNEL)

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

Bloquer le port 22 n'étant plus utilisé à travers le Parfeu du système (OPTIONNEL)

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:

# ufw status
Status: active

To                         Action      From
--                         ------      ----
987                        ALLOW       Anywhere                  
22                         DENY        Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
987 (v6)                   ALLOW       Anywhere (v6)             
22 (v6)                    DENY        Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)

Et

# systemctl status ufw
● ufw.service - Uncomplicated firewall
   Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enab
led)
   Active: active (exited) since Mon 2019-06-17 09:37:59 CEST; 3min 8
s ago
     Docs: man:ufw(8)
  Process: 2168 ExecStart=/lib/ufw/ufw-init start quiet (code=exited, status=0/S
UCCESS)
 Main PID: 2168 (code=exited, status=0/SUCCESS)

Un billet sur UFW était publié sur mon blog; confere ElkwaetBlog.

Redémarrer la machine maintenant:

# 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

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Bonus Sécu. (OPTIONNEL)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Il faut penser à sécuriser correctement une machine succeptible d'héberger plusieurs produits en même temps pour le public. Quelques outils utiles sont Fail2Ban, IpTables, RKHunter, PortsEntry

MISE EN PLACE D'UN SERVEUR WEB ASYNCHRONE

Engine-X (NGINX)

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:

~# systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy s
erver
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
abled)
   Active: active (running) since Mon 2019-06-17 10:36:11 CEST; 47min
 ago
     Docs: man:nginx(8)
  Process: 1147 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code
=exited, status=0/SUCCESS)

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

LIAISON DE NOM DE DOMAINE À LA MACHINE DISTANTE (pour info)

Il faut:

  • un domaine ou sous-domaine activé (EX: adjovi.go)
    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →
  • propagation DNS du domaine effectuée
    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →
  • un accès ROOT ou SUDO
  • une session SSH vers le serveur cloud + une session utilisateur locale

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

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Il est recommandé ici de privilégier les navigateurs web en console (EX: ELinks) et/ou la navigation incognito du navigateur graphique pour les tests; il est d'autant plus important de ne pas abuser des tentatives de vérification de la propagation DNS afin qu'elle se passe bien. Celle peut prendre entre 24 et 72H en fonction du Registrar, du type de Domaine et même du provider du Serveur.

* Vérification de la propagation DNS

EX d'outils web: https://whatsmydns.net

* Vérification de la propagation DNS en console (pas de connexion SSH)

$ ping adjovi.go doit retourner:

$ ping adjovi.go
PING adjovi.go (192.168.1.222) 56(84) bytes of data.
64 bytes from adjovi.go (192.168.1.222): icmp_seq=1 ttl=64 time=80.8 ms
64 bytes from adjovi.go (192.168.1.222): icmp_seq=2 ttl=64 time=104 ms

puis en navigateur web:
$ elinks http://adjovi.go doit retourner la page d'acceuil du serveur web de NGINX sur la machine distante

Création d'un Hôte virtuel pour le premier domaine

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Retour sur la session SSH de la machine distante
[En tant que ROOT ou Super User ou SUDO]

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

############
server {
    server_name adjovi.go;
    listen 80;
    listen [::]:80;
    root /home/gezier/hosting/adjovi/public;
    index index.html;

    location / {
    try_files $uri $uri/ =404;
    }
}
################

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:

<h1>
Coucou Adjovi
</h1>

Ensuite déconnecter l'utilisateur et revenir sous ROOT
$ exit

Activation de l'hôte virtuel créé

# 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:

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

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.

DÉPLOIEMENT D'UNE APPLICATION

CAS PARTICULIER: Installation d'une plateforme de E-Commerce & E-Business de type CMS

PrestaShop


Configuration requise pour Prestashop
https://www.prestashop.com/en/system-requirements

1. Mise en place du support PHP

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 des paquets requis

Installation de PHP
# apt install php7.0
Vérification de la version PHP installée

# php --version doit retourner ce qui suit:

PHP 7.0.33-0+deb9u3 (cli) (built: Mar  8 2019 10:01:24) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.33-0+deb9u3, Copyright (c) 1999-2017, by Zend Technologies

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

> Test de l'opérabilité du service FPM

# systemctl status php7.0-fpm.service qui doit retourner ce qui suit:

● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-06-18 06:42:51 CEST; 34s ago
     Docs: man:php-fpm7.0(8)
 Main PID: 3930 (php-fpm7.0)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 4915)
   CGroup: /system.slice/php7.0-fpm.service
           ├─3930 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
           ├─3931 php-fpm: pool www
           └─3932 php-fpm: pool www

Ceci confirme que le service de PHP-FPM (version 7.0) est bien fonctionnel sur le système.

> Adaptation de la configuration serveur du site au support de PHP et PHP-FPM

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:

############
server {
    server_name adjovi.go;
    listen 80;
    listen [::]:80;
    root /home/gezier/hosting/adjovi/public;
    index   index.php index.html;

    location / {
    try_files $uri $uri/ =404;
    }
    
#! AJOUT D'UN BLOC LOCATION POUR PHP-FPM
        location ~ \.php$ {
#       include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;

        fastcgi_keep_conn on;
        fastcgi_read_timeout 30s;
        fastcgi_send_timeout 30s;

        # Pour des cas de chargement long ou d'erreurs 502 / 504
        # fastcgi_buffer_size 256k;
        # fastcgi_buffers 256 16k;
        # fastcgi_busy_buffers_size 256k;
        client_max_body_size 10M;

        }

#Bloquer l'accès aux fichiers .htaccess d'Apache dans les répertoires
    location ~ /\.ht {
    deny all;
    }


}
################

2. Tester ensuite les configurations du serveur HTTP et du support PHP

# nginx -t, qui doit retourner ce qui suit:

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

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:

<center>
    <h1>Allo Allo PHP</h1>
<center>
<hr>
<?php
phpinfo();
?>

Tester dans les navigateurs web en accédant à l'URL
"http://adjovi.go/test.php":

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
C'est OK. Le serveur HTTP interprete du code PHP maintenant.

3. Quelques ajustements à rajouter au bloc SERVER{} (pour l'application PrestaShop)

########################################""
#! Ajustements particuliers pour PrestaShop (peut servir pour d'autres applications web)
#Compression GZIP
        gzip on;
        gzip_vary on;
        gzip_proxied any;

gzip_types
        application/atom+xml
        application/javascript
        application/json
        application/ld+json
        application/manifest+json
        application/rss+xml
        application/vnd.geo+json
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-web-app-manifest+json
        application/xhtml+xml
        application/xml
        font/opentype
        image/bmp
        image/svg+xml
        image/x-icon
        text/cache-manifest
        text/css
        text/plain
        text/vcard
        text/vnd.rim.location.xloc
        text/vtt
        text/x-component
        text/x-cross-domain-policy;

        gzip_disable "MSIE [1-6]\.(?!.*SV1)";


#! Interdire la prise en compte des éléments suivants dans les LOGS
        location = /favicon.ico {
        auth_basic off;
        allow all;
        log_not_found off;
        access_log off;
        }

        location = /robots.txt {
        auth_basic off;
        allow all;
        log_not_found off;
        access_log off;
        }

#! (À DÉCOMMENTER) Redirection / Version principale FR du site (cas d'un ECommerce Multi-langue)
# rewrite ^/fr$ /fr/ redirect;
# rewrite ^/fr/(.*) /$1;

#! Images (Récriture des liens des images)
        rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$1$2$3.jpg last;
        rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last;
        rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last;
        rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last;
        rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last;
        rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last;
        rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last;
        rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last;
        rewrite ^/c/([0-9]+)(-[.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+.jpg$ /img/c/$1$2$3.jpg last;
        rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+.jpg$ /img/c/$1$2.jpg last;
        
#! [SECU]
# Bloquer l'accès à tous les fichiers commençant par "."
        location ~ /\. {
        deny all;
        }

# Bloquer l'accès aux répertoires sources
        location ~ ^/(app|bin|cache|classes|config|controllers|docs|localization|override|src|tests|tools|translations|travis-scripts|vendor|var)/ {
        deny all;
        }

# Fichiers sensibles
        location ~ \.(yml|log|tpl|twig|sass)$ {
        deny all;
        }
# Bloquer l'accès aux données PHP dans les répertoires d'images
        location /upload {
                location ~ \.php$ {
                deny all;
                }
        }

        location /img {
                location ~ \.php$ {
                deny all;
                }
        }

#########################

4. Télécharger les fichiers sources du core de Prestashop

# login gezier
$ mkdir fichiers
$ cd fichiers && pwd pour obtenir le chemin absolu du répertoires fichiers créé; copier celà

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Visiter la page de téléchargement sur le site officiel de PrestaShop pour télécharger la dernière version stable
"https://www.prestashop.com/en/download"

À 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

Possibilité #1: à partir de l'outil SCP

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"

Possibilité #2: via le SFTP, à partir d'un explorateur de fichiers Linux ou un client FTP comme FileZilla

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

Possibilité #3: Téléchargement direct en session SSH avec la commande CURL

$ curl -O https://download.prestashop.com/download/releases/prestashop_1.7.5.2.zip (ne pas confondre "O" avec "0 zero")

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Revenir à la session SSH sur le serveur
Dans le répertoires "~/fichiers"

  • $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:

  • max_execution_time de 30(par défaut) à 300 pour le temps d'exécution par défaut des scripts
  • memory_limit de 128M(par défaut) à 256M
  • upload_max_filesize à 64M

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Pour l'extension PHP-CLI: "/etc/php/7.0/cli/php.ini"

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

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Avant de poursuivre,


Installation un serveur de base de données SQL fonctionnel

Installation de MariaDB

  • $ 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)
    Ici, répondre correctement aux questions posées:
  • Mot de passe de l'utilisateur root: (aucun); donc, ne rien saisir et faire Entrer
  • Répondre Oui aux questions suivantes
  • Se connecter ensuite à une session MySQL en tant que root: $sudo mysql
  • Pour créer un utilisateur mysql plus autonome en tant qu'administrateur des bases de données avec la commande mysql suivante:

GRANT ALL ON . TO 'admin'@'localhost' IDENTIFIED BY 'p@ssw0rd_créé_pour_admin' WITH GRANT OPTION;


Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
OU SUIVRE CETTE MÉTHODE

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

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Retour au navigateur pour l'installation de PrestaShop

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.