Installation serveur

De VK Wiki
Aller à : navigation, rechercher

Installation d'un nouveau serveur

Installation semi-automatique

Pour installer les éléments de base d'un serveur (nginx, PHP, mariadb...) il faut se connecter à la nouvelle machine en tant que « super utilisateur » et exécuter les commandes suivantes :

su

wget http://outils.sh-marketing.ca/install/standard.sh

chmod +x standard.sh

./standard.sh

Tous les éléments s'installeront automatiquement.

En milieu de traitement, une invite de commande apparaîtra pour saisir le mot de passe administrateur de la base de données, ainsi que pour confirmer le mot de passe.

À la fin du traitement, un fichier config.inc.php reste ouvert dans l'éditeur de texte. Il s'agit du fichier de configuration de phpMyAdmin. Le fichier est ouvert car il faut saisir manuellement une phrase secrète servant d'identifiant unique au niveau de la ligne $cfg['blowfish_secret'] = '';

Il suffit de mettre du texte, au choix, entre les deux apostrophes ' '.


Installation manuelle et explication du fichier standard.sh

Dans le premier paragraphe de l'article, nous montrions comment effectuer une installation semi-automatique à l'aide du script standard.sh. Ce script ne contient ni plus ni moins toutes les instructions qui pourraient être faites manuellement pour installer un nouveau serveur ; il s'agit d'une aide évitant à l'administrateur une saisie fastidieuse de toutes les instructions à saisir pour installer chaque élément nécessaire au serveur

Installation des sources pour Nginx et PHP

Pour expliquer les étapes d'installation, nous allons reprendre le contenu du script standard.sh qui installe tous les éléments nécessaires au fonctionnement d'un serveur Web. Certaines de ces lignes sont uniques au script, ce qui sera bien entendu expliqué. Le code indiqué en mauve est spécifique au script.


RELCODE=$(lsb_release -sc)

La ligne ci-dessus est nécessaire pour déterminer le nom de code du système d'exploitation. Cette information est nécessaire lorsque l'on ajoute des sources d'application dans le fichier /etc/apt/sources.list pour l'application apt-get.

Ainsi, pour obtenir les versions à jour de PHP7 et Nginx, il faut ajouter les lignes suivantes à la fin du fichier /etc/apt/sources.list[1][2]

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all
deb http://nginx.org/packages/debian/ jessie nginx
deb-src http://nginx.org/packages/debian/ jessie nginx
  • Le premier terme, deb ou deb-src correspond au type d'archive récupéré.[3]
deb correspond à un paquet pré-compilé pour Debian
deb-src correspond au code-source (qui devra être compilé à postériori à l'aide de l'option --compile de l'application apt-get par exemple)
  • Le second terme est l'adresse (URL) du dépôt où chercher l'archive
  • Le troisième terme est le nom de code du système d'exploitation. Pour Debian 8.4 il s'agit de Jessie. Ce code peut être retrouvé à l'aide de l'instruction lsb_release -sc
  • Le quatrième terme correspond au composant

Dans le script standard.sh, ces ajouts se font automatiquement avec l'instruction ci-dessous

printf "#Php7\ndeb http://packages.dotdeb.org %s all\ndeb-src http://packages.dotdeb.org %s all\n#Nginx\ndeb http://nginx.org/packages/debian/ %s nginx\ndeb-src http://nginx.org/packages/debian/ %s nginx" "$RELCODE" "$RELCODE" "$RELCODE" "$RELCODE" >> /etc/apt/sources.list

printf est la fonction qui affiche du texte, qui se trouve entre guillemets, et au lieu d'afficher le résultat à l'écran, on fait un ajout au fichier /etc/apt/sources.list à l'aide de l'opérateur de concaténation fichier >>

$RELCODE est la variable enregistrée précédemment qui contient le code de la version courante de la distribution Linux (Jessie pour Debian 8.4)

Une fois les sources ajoutées dans le fichier de configuration d'apt-get, il faut que le serveur soit capable de les authentifier. Pour cela, il faut ajouter les clefs d'identification des deux sources que nous venons d'ajouter

Pour PHP7

wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg
rm dotdeb.gpg

On télécharge la clef avec l'instruction wget, on l'applique avec apt-key, puis on la supprime (car déjà appliquée) avec rm


Pour NGINX

wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
rm nginx_signing.key


Installation des sources pour mariaDB (équiv mySQL)

apt-get -y install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mariadb.mirror.rafal.ca/repo/10.1/debian jessie main'

Les instructions ci-dessus ajoutent automatiquement les sources sans avoir besoin d'éditer le fichier /etc/apt/sources.list


Installation de NGINX

Avant d'installer NGINX, on recherche les mises à jour du système, qui incluent entre autre Nginx et php 7.0, dont on vient d'ajouter les adresses.

apt-get update

Puis on met à jour les éléments du système qui sont déjà installés (Nginx et PHP 7.0 ne sont pour le moment pas installés.) L'option -y permet l'autoconfirmation de l'installation (pas besoin de saisir "oui" à chaque fois que le système demande de confirmer l'installation de tel ou tel élément.

apt-get -y upgrade

Et enfin on installe nginx, toujours avec l'option -y

apt-get -y install nginx


Une bonne pratique pour les serveurs web est d'avoir un répertoire contenant les configurations pré-enregistrées ou disponibles et un répertoire contenant les configuration utilisées ou actives. En général la répertoire des configurations actives contient les liens symboliques des configurations à utiliser parmi les configurations disponibles. Les deux répertoires à créer sont respectivement /etc/nginx/sites-available et /etc/nginx/sites-enabled

mkdir /etc/nginx/sites-available

mkdir /etc/nginx/sites-enabled

Une autre bonne pratique est de sauvegarder la configuration par défaut de nginx avant d'y porter quelconque modification

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

ensuite on modifie le fichier de configuration /etc/nginx/nginx.conf afin que le serveur web prenne en compte les sites dont les configurations se trouve (par lien symboliques interposés) dans le répertoire /etc/nginx/sites-enabled

On remplace donc la ligne

include /etc/nginx/conf.d/*.conf

par la ligne

include /etc/nginx/sites-enabled/*.conf


Dans le script standard.sh, cette action est faite automatiquement à l'aide de l'instruction

sed -e 's/conf.d/sites-enabled/' -e 's/user nginx;/user www-data;/' </etc/nginx/nginx.conf.bak >/etc/nginx/nginx.conf

L'instruction sed (stream-editor)[4] permet d'éditer le contenu d'un flux texte (dans notre cas il s'agit d'un fichier), et de l'enregistrer dans un autre fichier.


Enfin on créé le répertoire dans lequel les sites (ou plutôt les liens symboliques pointant vers les répertoires des sites*) seront hébergés, et y attribuons le propriétaire par défaut d'un répertoire web, à savoir le compte www-data.

mkdir /var/www

mkdir /var/www/html

chown -R www-data:www-data /var/www


On en profite pour inscrire l'utilisateur devweb au groupe www-data afin que celui-ci puisse lire et écrire des répertoires appartenant à Wordpress usermod -a -G www-data devweb

Installation de PHP7.0

Php est un interpréteur de code, ce qui signifie que son action est d'effectuer des actions décrites dans du code source. Installer juste php7.0 n'est pas suffisant, il faut installer aussi le module qui "explique" au serveur web (nginx) comment utiliser cet interpréteur, ainsi que des modules permettant de se connecter à une base de données, effectuer des requêtes http, etc.

apt-get -y install php7.0 php7.0-fpm php7.0-mysql php7.0-curl php7.0-gd php7.0-json php7.0-mcrypt php7.0-opcache php7.0-xml php7.0-intl curl php7.0-mbstring php7.0-imagick

  • php7.0 : interpréteur PHP
  • php7.0-fpm : Module qui permet à nginx d'utiliser l'interpréteur pour afficher des pages web en php[5]
  • php7.0-mysql : module de connexion à une base de données mySQL[6]
  • php7.0-curl et curl : module permettant d'effectuer des requêtes http (lire ou poster des données une page web)[7]
  • php7.0-gd : bibliothèque de manipulations graphique (édition, création d'images)[8]
  • php7.0-json : bibliothèque de traitement d'objets JSON[9]
  • php7.0-mcrypt : bibliothèque de cryptage[10]
  • php7.0-opcache : système de cache pour PHP[11]
  • php7.0-xml : bibliothèque de traitement d'objets XML[12]
  • php7.0-intl : bibliothèque pour l'internationalisation de PHP (dates par exemple) [13]
  • php7.0-mbstring : bibliothèque de gestion des caractères multi-bits ; nécessaire pour les nouvelles versions de phpMyAdmin [14]
  • php7.0-imagick : bibliothèque de traitement d'images


Ces éléments sont exhaustifs et répondent à la plupart des besoins. Selon le cas, certains d'entre eux peuvent ne pas être nécessaires, dans d'autres cas il faudra encore installer des éléments supplémentaires.


PHP installé, on peut créer une configuration web par défaut compatible PHP 7.0 en créant un fichier default.conf dans le répertoire /etc/nginx/sites-available avec le contenu suivant :


server {
listen 80;
listen [::]:80;
server_name <nom ou adresse IP du serveur>;
#Répertoire dans lequel il faut chercher les fichiers Web
root /var/www/html/;
# Ajouter index.php à la liste lorsque l’on utilise PHP
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
# Modification spéciale pour gérer Wordpress
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
# Gestion de PHP
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Ce fichier est automatiquement créé par le script standard.sh avec l'instruction suivante :

printf "server {\n\tlisten 80;\n\tlisten [::]:80;\n\tserver_name %s;\n\n\n\t#Répertoire dans lequel il faut chercher les fichiers Web\n\troot /var/www/html/;\n\n\n\t# Ajouter index.php à la liste lorsque l’on utilise PHP\n\tindex index.php index.html index.htm index.nginx-debian.html;\n\n\n\tlocation / {\n\t try_files \$uri \$uri/ /index.php?\$args;\n\t}\n\n\n # Modification spéciale pour gérer Wordpress\n # Add trailing slash to */wp-admin requests.\n rewrite /wp-admin\$ \$scheme://\$host\$uri/ permanent;\n\n\n\t# Gestion de PHP\n\tlocation ~ \.php\$ {\n\t\tfastcgi_split_path_info ^(.+\.php)(/.+)\$;\n\t\tfastcgi_pass unix:/var/run/php/php7.0-fpm.sock;\n\t\tfastcgi_index index.php;\n\t\tfastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;\n\t\tinclude fastcgi_params;\n\t}\n}" $(hostname) > /etc/nginx/sites-available/default.conf

La variable server_name est automatiquement configurée par le script avec le nom enregistré du serveur courant ($hostname)


Le fichier de configuration créé, on l'active en créant un lien symbolique dans le répertoire /etc/nginx/sites-enabled/ ln -s /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/

Enfin on redémarre proprement nginx pour que la nouvelle configuration soit prise en compte

nginx -s quit

nginx

Note : l'instruction nginx -s reload (mise à jour de la configuration à chaud) fonctionne, mais peut ne pas suffire si le serveur est chargé.

Installation de Git

Git est le service de gestion de configuration utilisé au groupe, pour l'installer saisir simplement l'instruction suivante : apt-get -y install git


Installation de MariaDB (equiv mySQL)

mariaDB est une base de donnée libre créée par l'auteur de MySQL et entièrement compatible avec ce dernier.

Les sources pour installer MariaDB ont déjà été configurées dans le premier point du présent chapitre. La base de données peut maintenant être installée à l'aide de l'instruction suivante :

apt-get -y install mariadb-server


Remarque : le paragraphe ci-dessous est valable pour certaines version de Debian et MariaDb. En effet, suite à une mise à niveau de MariaDb, ce dernier ne permet plus de changer le répertoire data, et donc les actions ci-dessous ne peuvent pas être effectuées tant que le problème de MariaDb n'a pas été réglé. Pour palier ce problème, il a été demander de créer des souches Debian (machines virtuelles vierges) avec une seule partition

Le problème lorsqu'apt-get installe mariadb, est que le répertoire par défaut de l'application se trouve dans la partition /var/ qui offre un espace limité (quelques giga-octets) ; si la taille des données dans la base atteint la taille de cette partition, mysql plante, et d'autres éléments du serveur qui utilisent cette partition peuvent planter aussi.

Pour palier ce défaut, il faut déplacer le répertoire de la base de données dans une partition plus partition plus grande, par exemple /home/, puis modifier la configuration de mariaDB. On affiche les tailles des partitions avec la commande df -h

La première chose à faire avant de toucher à mariaDB est d'arrêter le serveur de base de données :

/etc/init.d/mysql stop

Puis on déplace le répertoire de la base de données et son contenu avec tous les droits associés : cp -rap /var/lib/mysql /home/mysql

On re-précise que mysql (mariaDB) est le propriétaire de son répertoire

chown mysql.mysql /home/mysql


On supprime l'ancien répertoire

rm -R /var/lib/mysql


On sauvegarde la configuration par défaut de mariaDB

cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak


On récupère la nouvelle configuration sur le serveur outils de SH Marketing

wget -O /etc/mysql/my.cnf http://outils.sh-marketing.ca/install/my.cnf


On modifie le fichier /etc/systemd/system/multi-user.target.wants/mariadb.service afin d'autoriser le fonctionnement de la base dans le répertoire home nano /etc/systemd/system/multi-user.target.wants/mariadb.service

Trouver la ligne ProtectHome=true et remplacer la valeur true par false

ProtectHome=false

quitter en enregistrant


IMPORTANT ! ne pas oublier de recharger les services de systemctl pour que le changement soit pris en compte :

systemctl daemon-reload

Enfin on redémarre mariaDB /etc/init.d/mysql start

Installation de phpMyAdmin[15]

Pour installer PHPMyAdmin, il faut télécharger l'archive contenant la dernière version de l'application directement sur le site de l'éditeur. Au moment où ces lignes sont écrites, il s'agit de la version 4.6.6.

wget -O /home/phpma.tar.gz https://files.phpmyadmin.net/phpMyAdmin/4.6.6/phpMyAdmin-4.6.6-all-languages.tar.gz

Ensuite, décompresser l'archive téléchargée

tar -xzvf phpma.tar.gz

Et supprimer l'archive .gz qui ne sert plus à rien.

rm phpma.tar.gz

Reste à créer un fichier de configuration en recopiant le fichier standard fourni avec l'application

cp /home/phpma/config.sample.inc.php /home/phpma/config.inc.php


Et enfin de saisir une chaîne de caractères au choix entre les deux apostrophes de la ligne suivante :

$cfg['blowfish_secret'] = '';

Connexion au disque réseau Stockage

Le disque réseau stockage est accessible (depuis l'intérieur du réseau uniquement) par le protocole FTP. L'outil curlftpfs[16] permet de se connecter à un serveur FTP et de le monter comme un disque dur local pour y accéder plus facilement.

pour l'installer :

apt-get install -y curlftpfs

Ensuite, il faut créer un répertoire local par lequel on accèdera au serveur FTP. Dans notre cas, nous le nommons ftp_stockage, et il se situe dans le répertoire /mnt, mais il pourrait s'appeler autrement et se situer dans un autre répertoire, auquel cas il faudrait adapter les informations de connexion dans les instructions suivantes

mkdir /mnt/ftp_stockage

Ensuite, il faut rechercher les informations pour se connecter au serveur FTP où la sauvegarde devra être faite. Dans notre cas, il s'agit du serveur 192.168.123.55 et plus précisemment du répertoire StudioH dans ce serveur.

serveur hôte : 192.168.123.55:/StudioH
utilisateur  : devweb
mot de passe : ********
note : ce serveur n'est accessible qu'à l'interne du réseau de la compagnie


Pour faire la liaison entre le répertoire créé, /mnt/ftp_stockage et le serveur FTP indiqué ci-dessus, on lance l'instruction suivante :

curlftpfs -o allow_other devweb:******@192.168.123.55:/StudioH /mnt/ftp_stockage/
  • curlftpfs est le nom de la commande
  • -o allow_other est une option qui permet aux autres utilisateurs que root d'accéder aux données, car le propriétaire du contenu de /mnt/ftp_stockage reste root
  • devweb:******@192.168.123.55:/StudioH correspond aux informations, sous forme standard, de connexion au serveur FTP ; (utilisateur):(mot de passe)@(adresse serveur):(chemin sur le serveur)
  • répertoire local qui servira de passerelle

une fois cette instruction lancée, on peut accéder au serveur StudioH simplement en entrant dans le répertoire /mnt/ftp_stockage, par exemple à l'aide de l'instruction cd /mnt/ftp_stockage


L'accès est maintenant créé, mais si le serveur devait être redémarré, cet accès serait alors perdu. Pour palier ce problème, on peut ajouter un script de montage dans le répertoire /etc/init.d/

-> /etc/init.d/ est un répertoire qui contient tous les scripts sous forme bash à lancer au démarrage du serveur

saisir l'instruction ci-dessous pour créer un script à exécuter à chaque démarrage, et qui connectera le serveur FTP au répertoire ftp_stockage

nano /etc/init.d/stockage.sh

Dans le fichier nouvellement créé, ajouter les lignes suivantes :

#! /bin/sh
# /etc/init.d/stockage.sh
curlftpfs -o allow_other devweb:********@192.168.123.55:/StudioH /mnt/ftp_stockage/
exit 0
  • Les deux premières lignes sont facultatives, mais fortement recommandées. La première précise le langage et l'interpréteur de ce langage, en l'occurence /bin/sh (il pourrait s'agir d'un script Python ou javascript), *la deuxième est un rappel du fichier ouvert, pour éviter les confusion.
  • la troisième ligne est l'instruction que nous avons utilisée pour connecter le serveur FTP au répertoire /mnt/ftp_stockage
  • La dernière ligne sert à sortir du script proprement (exit 0 signifie qu'aucun problème n'est à signaler, exit 1 signifie qu'il y a une erreur, etc.)

Quitter et enregistrer avec la combinaison de touches au clavier Ctrl + X puis taper y pour confirmer.

Une fois le fichier /etc/init.d/stockage.sh enregistré, il faut indiquer au système qu'il s'agit d'un script exécutable avec l'instruction suivante :

chmod +x /etc/init.d/stockage.sh

Petit Bonus : Root en couleur

Dans les installations de Debian par défaut, lorsque l'on est en mode super-utilisateur (su), l'affichage passe en mode monochrome (blanc sur fond noir). Pour avoir l'affichage en couleur pour le mode root - et différentier plus facilement les fichiers / dossiers après une commande ls par exemple - il faut éditer le fichier /root/.bashrc.

su

nano /root/.bashrc

une fois le fichier ouvert, décommenter (supprimer le signe # eb début de ligne) les lignes suivantes

export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'


Pour ajouter un peu de fantaisie, et surtout rappeler qu'on est en mode root, on peut ajouter la ligne suivante à la fin du fichier[17][18] :

PS1='${debian_chroot:+($debian_chroot)}\[\033[00;31m\]\u\[\033[01;30m\]@\[\033[01;34m\]\h\[\033[00m\]:\[\033[00m\]\w\[\033[00m\]\$ '


PS1 correspond au champ à gauche de la ligne de commande. $debian_chroot est une variable qui indique si on est en mode chroot (en général non) ou pas.

Les champs entre crochets précédés du code \033 sont des codes couleurs pour le champ suivant. Le premier nombre avant le point virgule est la palette de couleurs, le second est le code de la couleur dans la palette (voir références). Le caractère \u représente l'utilisateur en cours, \h le nom de l'hôte (de la machine), \w le répertoire courant de travail (working directory)




  1. https://www.colinodell.com/blog/2015-12/installing-php-7-0-0
  2. https://www.nginx.com/resources/wiki/start/topics/tutorials/install/
  3. https://wiki.debian.org/fr/SourcesList
  4. http://www.grymoire.com/Unix/Sed.html
  5. http://php.net/manual/en/book.fpm.php
  6. http://php.net/manual/en/book.mysqli.php
  7. http://php.net/manual/en/book.curl.php
  8. http://php.net/manual/en/ref.image.php
  9. http://php.net/manual/en/book.json.php
  10. http://php.net/manual/en/book.mcrypt.php
  11. http://php.net/manual/en/book.opcache.php
  12. http://php.net/manual/en/book.xml.php
  13. http://php.net/manual/en/book.xml.php
  14. http://php.net/manual/en/intro.mbstring.php
  15. https://docs.phpmyadmin.net/en/latest/setup.html
  16. http://curlftpfs.sourceforge.net
  17. http://askubuntu.com/questions/123268/changing-colors-for-user-host-directory-information-in-terminal-command-prompt
  18. http://www.ibm.com/developerworks/linux/library/l-tip-prompt/