Tuto : Installation d’un serveur LEMP – Debian, Nginx, MariaDB, PHP 5 FPM, APC-cache

Voici un petit tuto sur comment installer un serveur web sur une machine Debian 7 (wheezy) 64bits.

Au lieu d’utiliser le classique Apache/MySQL (architecture LAMP), je préfère utiliser Nginx/Mariadb, beaucoup plus performant selon moi. Par contre, avec nginx, fini les .htaccess compliqués, cette config se fait au niveau des vhost (et est beaucoup plus intuitive, même si ca nécessite un réapprentissage !).

Dans les lignes suivantes, je vais faire quelques manipulations que tu n’es pas obligé de suivre, comme par exemple la suppression du service apache ou l’installation de git. Tu peux sauter ces étapes si tu préfères. Ce guide est bien sûr destinés aux utilisateurs confirmés, qui savent comment utiliser linux en ligne de commande, aptitude, ouvrir et enregistrer un fichier texte et le principe de fonctionnement d’un serveur web.

Je te conseille aussi de te connecter en tant que « root » pour cet installation.

Préparation

apt-get update

apt-get install zip unzip htop vim

#Quelques programmes utilitaire optionnels : editeur texte, gestionnaire de tache avancé (htop). Tu peux remplacer vim par nano (déja installé) ou gedit si tu préfères. Dans ce tuto, j’utilise la commande vim pour éditer les fichiers.

apt-get install vim htop

#installation optionnelle : git

apt-get install git

#exécuter la commande suivante si tu as déja un serveur apaché installé et que tu veuille le désinstaller pour utiliser seulement nginx :

apt-get autoremove --purge apache2

Installation du serveur HTTP : nginx

apt-get install nginx

Installation de PHP 5 FPM et CLI

Pour nginx il faut utiliser php5-fpm au lieu de la librairie php5 standard. Cli, c’est pour faire du php en ligne de comma,de.  Le php.ini à éditer pour votre config nginx sera /etc/php5/fpm/php.ini ; celui du php-cli sera /etc/php5/cli/php.ini

apt-get install php5-cli

apt-get install php5-fpm

apt-get install php5-mysql curl php5-curl php5-intl php5-tidy php5-xsl php5-mcrypt php5-imap

php5enmod mcrypt

php5enmod imap

service nginx restart

service php5-fpm restart

Installation de MariaDB

.Mariadb est la version « libre » de mysql, depuis son rachat par Oracle, gérée par le fondateur de Mysql lui-même (petite anecdote, ses deux filles s’appellent My et Maria). Pour garder une compatiblité complète avec toutes les librairies utilisant mysql, elle en garde les mêmes noms de commandes.
A tel point que tes applications, ne verront pas la différence à l’utilisation. Ces lignes de comandes sont spécifiques a la version 10.0, qui était la dernière version stable au moment ou j’ai écrit ce tuto. Vous devriez jeter un oeil ici pour actualiser ces lignes de commandes. Dans ce cas vérifier avant quelle est la dernière version stable sur le site officiel, histoire de pas installer une version beta.

sudo apt-get install python-software-properties

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

add-apt-repository 'deb http://ftp.heanet.ie/mirrors/mariadb/repo/10.0/debian wheezy main'

apt-get update

apt-get install mariadb-server

service mysql restart

Montage de votre premier sites web et vhost

Je te recommande de choisir comme dossier http pour nginx cette arborescence : /opt/http/nginx/sites/

En effet Il est + conseillé de créer ses sites dans /opt que /var/www. Ce que je fais ici.
Ces différents sous-dossiers vont vous permettre par exemple de faire cohabiter des sites apaches et nginx
Je vous suggère de toujours garder cette hiérarchie :
/opt/http/(serveur http)/sites/(domaine)/(sous-domaine)/(fichiers)
Ainsi par exemple mondomaine/www contiendra le site racine pointé par mondomaine.com et www.mondomaine.com ; mondomaine/phpmyadmin sera pointé par phpmyadmin.mondomaine.com, etc.

cd /opt/
mkdir http
cd http/
mkdir nginx
cd nginx/
mkdir sites
cd sites/

Ca sera repertoire de ton premier site. Remplace mondomaine par le nom de ton site (généralement le nom de domaine sans l’extension) :

mkdir mondomaine
cd mondomaine/
mkdir www

Ensuite il te restera plus qu’a copier dans www/ les fichiers de ton site (une simple page index.php affichant « bonjour » peut faire l’affaire).

chown -R www-data:www-data /opt/http/nginx/sites
chmod -R g+rwX /opt/http/nginx/sites
chmod -R o-rwx /opt/http/nginx/sites

find /opt/http/nginx/sites -type d -exec chmod g+s '{}' \;

cd /etc/nginx/sites-available

vim /etc/nginx/sites-available/mondomaine

Voici un vhost basique que je te propose de copier-coller (en adaptant les premières lignes au nom de ton site) :

server {
    listen   80;
    root /opt/http/nginx/sites/mondomaine/www;
    index index.php index.html;
    server_name mondomaine.com www.mondomaine.com *.mondomaine.com

    location / {
        try_files $uri $uri/ /index.php;
    }
    
    client_max_body_size 3M;

    error_page 403 /index.php;

    # pass the PHP scripts to FastCGI server listening on /var/run/php5-fpm.sock
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    access_log   /var/log/nginx/www.mondomaine.access.log;
    error_log   /var/log/nginx/www.mondomaine.error.log;
}

Enregistre et active le vhost :

ln -s /etc/nginx/sites-available/mondomaine /etc/nginx/sites-enabled/mondomaine

service nginx restart

Bonus : Installation de phpMyAdmin

Ce n’est pas recommandé pour un serveur de production en raison des possibles failles de sécurité. Mais sinon c’est un outils pratique pour « dépanner », pouvoir accéder à votre base de donnée de n’importe ou.

Je ne peux que vous recommander cet article  si ca vous intéresse. Il faudra adapter votre répertoire nginx lors du lien symbolique :

sudo apt-get install phpmyadmin

Je vous recommande ensuite de laisser tout les choix par défaut, sauf quand l’assistant vous demandera le mot de passe root, et quand il vous sera demandé d’adapter phpmyadmin à apache ou lighthttpd, faites TAB-TAB Cancel.

Ensuite il restera plus qu’a pointer un lien symbolique entre votre dossier web et phpmyadmin, puis créer un vhost nginx


ln -s /usr/share/phpmyadmin /opt/http/nginx/sites
vim /etc/nginx/sites-available/phpmyadmin

Si vous n’êtes pas familier avec nginx, je vous propose de remplir le fichier comme ceci :

server {
    listen   80;
    root /opt/http/nginx/sites/phpmyadmin;
    index index.php;
    server_name pma.mondomaine.com;

    location / {
        try_files $uri $uri/ /index.php;
    }

    error_page 403 /index.php;

    # pass the PHP scripts to FastCGI server listening on /var/run/php5-fpm.sock
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    access_log   /var/log/nginx/phpmyadmin.access.log;
    error_log   /var/log/nginx/phpmyadmin.error.log;
}

PS : pour des raisons de sécurité, je te déconseille de faire pointer votre installation sur un sous-domaine facile à deviner, comme phpmyadmin.mondomaine.com ou pma.mondomaine.com. Change-le au niveau de server_name. Ensuite il reste plus qu’à activer le vhost :

ln -s /etc/nginx/sites-available/phpmyadmin/etc/nginx/sites-enabled/phpmyadmin
service nginx restart

Et à te rendre à l’adresse que tu as indiquée dans server_name voir si tout marche bien…

Gestionnaire de cache : APC Cache

Maintenant on va installer un gestionnaire de cache. Mon préféré est APC Cache.

sudo apt-get install php-apc
vim /etc/php5/fpm/php.ini

Chercher dans le fichier le titre  Module settings (sous vim, tapez /Module S) , écrivez extension=apc.so juste avant ce titre cela permet d’indiquer à nginx qu’il doit utiliser cette extension.

Et juste après le Module settings, écrivez

[APC]
apc.enabled=1
apc.shm_size=256
apc.stat=0

Met plutôt apc.stat = 1 si tu développe directement sur ce serveur. Ainsi APC va vérifier si la page a changé a chaque requête, auquel cas il va régénérer le cache. C’est bien plus plus lent. Le fichier doit donc ressembler maintenant  à ça :

extension=apc.so

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;


[APC]
apc.enabled=1
apc.shm_size=128M
apc.stat=0

Enregistrer le fichier et redémarrer les services http et php pour prendre en compte les modifications. Pour plus de détails sur la configuration d’APC, je vous suggère de regarder la doc officielle.

service php5-fpm restart
service nginx restart

Bonus : créer des alias et enregistrer l’historique de commandes

je vous suggère maintenant créer quelques alias de lignes de commande, pour accéder facilement aux répertoires des sites, backuper votre base de donnée ou redémarrer les services web par exemple.

vim /root/.bashrc

Copier-coller ceci en fin du fichier :

#l = ls -lhA colorized:
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias l='ls $LS_OPTIONS -lhA --author $1'

#b = cd ..
alias b='echo "^ Back to parent dir:" ; cd .. ; pwd'

#www = cd on sites directory
alias www='cd /opt/http/nginx/sites/ ; l'

#sqldumpall  = create a sql dump of all db with timestamp in the name. Create the /opt/dumps/ directory first !
alias sqldumpall='mysqldump --host='localhost' --user='root' --password='xxxxxxx' --all-databases | gzip > /opt/dumps/mariadump-alldb-`date +"%Y-%m-%d-%H%M%S"`.sql.gz'

alias phpini='vim /etc/php5/fpm/php.ini' 

alias restart-http='service nginx restart'
alias restart-php='service php5-fpm restart'
alias restart-db='service mysql restart'
alias restart-all='restart-php ; restart-http ; restart-db'

#az = edit this file
#za = compile the changes
alias az='vim /root/.bashrc'
alias za='source /root/.bashrc'

Remplace xxxxxxx par ton mot de passe root, choisi lors de l’installation de mariadb. Enregistre et fermer le fichier. La commande suivant activera tes modifications :

source /root/.bashrc

Tu peux bien sûr adapter ces alias sur d’autres utilisateurs que root. il te faudra donc éditer leurs fichier ~/.bashrc, installer sudo et préfixer certains alias par cette commande.

#Garder une trace de toutes ces commandes d’install

history > /root/install_lemp.txt

Il ne te reste plus qu’à bien configurer tes sites-available, et bien sûr faire/transférer tes sites web et pointer leurs noms de domaine sur cette machine.

On peut également optimiser cette config avec un proxy-cache comme Polipo ou squid, installer un serveur de mail (comme Postfix pour un serveur de production, ou Mailcatcher pour un serveur de test) et renforcer la sécurité. J’y viendrais dans un prochain article, mais tu as déja un serveur web totalement fonctionnel et opérationnel !

Don't be selfish...Tweet about this on TwitterShare on LinkedInShare on FacebookShare on RedditDigg thisEmail this to someone

5 réflexions au sujet de « Tuto : Installation d’un serveur LEMP – Debian, Nginx, MariaDB, PHP 5 FPM, APC-cache »

  1. pas mal le tuto, merci !
    attention quelques oublis :
    – ici ; à la fin :
    server_name mondomaine.com http://www.mondomaine.com *.mondomaine.com
    server_name mondomaine.com http://www.mondomaine.com *.mondomaine.com;
    – ici un espace manquant :
    ln -s /etc/nginx/sites-available/phpmyadmin/etc/nginx/sites-enabled/phpmyadmin
    ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enabled/phpmyadmin
    bonne continuation

  2. Super tuto! Merci beaucoup pour le partage! :) Tout marche très bien, et mes sites n’ont jamais été aussi rapides! :D

  3. Salut, merci encore pour ton super tuto!
    Cependant je rencontre un bug avec le dump sur la base de données. J’ai le message d’erreur suivant :

    -bash: –all-databases | gzip > /opt/dumps/mariadump-alldb-`date + »%Y-%m-%d-%H%M%S »`.sql.gz: No such file or directory

    Aurais-tu une idée d’où cette erreur pourrait venir ? :)

  4. Salut !

    Merci c’est cool de partager, ça m’intérresse mais à ce niveau c’est un peu pourri sur le net.

    J’aurais bien aimé que tu développes un peu plus mais ça pourrait être prise de tête… En tout cas merci pour ton partage, tu m’as bien aidé !

Les commentaires sont fermés.