# Déploiement d'un serveur cloud basé sur Linux pour hébergement d'applications web [SDFClass06 by Open-SDF](https://www.open.sdf30.com) ![](https://i.imgur.com/Y6EtvYF.png) --- # Moi c'est... > [color=#86d65e] **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_](https://twitter.com/kwashieonline) > * Telegram: [@Elkwaet](https://t.me/elkwaet) --- # Contenu de l'atelier > [color=#4497ce] > 1. * Mise en marche d'une machine cloud avec un système open source GNU/Linux > 2. * Paramétrage de l'environnement > 3. * Notion de sécurité de la machine (installation & configuration d'un parfeu) > 4. * Déploiement d'un serveur web asyncrone > 5. * Activation de plusieurs domaines sur la même machine > 6. * Déploiement d'une application web basée sur PHP sur un domaine --- :red_circle: 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` > [color=red]... > OPTIONNEL: Mettre à jour le fichier **.bashrc** du Home principal de l'utilisateur courant. > [Télécharger mon fichier .bashrc ici](https://gitlab.com/elkwaet/tuxhome/blob/94e1583b3ec33499046cc7dd72d9295ae22ab080/.bashrc) 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 `$su`bien 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 [color=indigo] 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](https://elkwaetblog.tk/ufw-gerer-parfeu-linux-serveur-desktop). ### 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` ## :radio_button: Bonus Sécu. (OPTIONNEL) :information_desk_person: 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](https://docs.elkwaetblog.tk). 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: ![](https://i.imgur.com/TmrbcLN.png) 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) :white_check_mark: * propagation DNS du domaine effectuée :white_check_mark: * 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. ![](https://i.imgur.com/57RSNAW.png "Zone DNS") Un enregistrement de domaine/sous-domaine suit habituellement le principe suivant: **TYPE A: nom de l'hote > serveur de destination** :warning: 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 ![](https://i.imgur.com/VOaEk1U.png "WhatsMyDNS") ### * 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 :radio_button: **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 ![](https://i.imgur.com/G3dgWCS.png) ![](https://i.imgur.com/TQaVLmD.png) **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": ![](https://i.imgur.com/9NXIJrk.png) >[color=green] :+1: 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à :radio_button: 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") :radio_button: **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 :information_source: 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 ![](https://i.imgur.com/cIfAQAe.png) # :red_circle: 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; > [color=red]... > :information_desk_person: OU SUIVRE [CETTE MÉTHODE](http://www.daniloaz.com/en/how-to-create-a-user-in-mysql-mariadb-and-grant-permissions-on-a-specific-database/) > ... 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 > [color=#8ce24f]... > 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 > ... ## :radio_button: 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) ![](https://i.imgur.com/SXLitK7.png) Installation terminée de la Prestashop1.7, basée sur le framework Symphony. ![](https://i.imgur.com/m95zMok.png)