Outils pour utilisateurs

Outils du site


creation_d_un_serveur_lamp_debian_php_mariadb_nginx

Je vais revenir durant cet article sur l’installation d’une debian 9 (Stretch) avec Nginx, PHP7-FPM et MySQL. Ceci ayant pour but de faire tourner dans un premier temps mon blog. Cela sert aussi de base pour des tests pour un déploiement sur un serveur avec plusieurs sites.

Les ingrédients de la recette !

De quoi avons-nous donc besoin ?

  • 1 serveur (dans mon cas un contenair proxmox)
  • 1 debian 9 (Stretch) pré-installé
  • 1 logiciel pour se connecter en SSH (putty pour windows, Linux et Mac notre bon vieux terminal)
  • d’un bon tutoriel et d'une bonne tasse de café et de quoi grignoter

Installation des paquets

Tout d’abord on va mettre à jour le système d’exploitation par défaut je considère que vous êtes connecté en root :

Cette commande va mettre à jour la liste des paquets disponibles :

apt-get update

Celle-ci va mettre à jour votre système d’exploitation :

apt-get upgrade

Installation de Nginx :

apt-get install nginx
vi /etc/nginx/nginx.conf
# Deux processus fonctionnent bien pour un seul processeur si + de cpu mettre le nb de cpu
user www-data;
worker_processes 2;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
use epoll;
}

http {
include /etc/nginx/mime.types;

# Nginx fait la journalisation
access_log /var/log/nginx/access.log;

# TCP
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
server_names_hash_bucket_size 64;
server_tokens off;

# Laissez nginx faire la compression, désactivez le mod_deflate d'Apache
gzip on;
gzip_vary on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_comp_level 6;
gzip_min_length 1400;
gzip_proxied any;
# le type mime text / html est automatiquement inclus pour gzip, il faut ajouter le reste
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/rss+xml text/javascript;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4';
ssl_session_cache shared:SSL:10m;

proxy_cache_path /var/cache/nginx levels=2:2:2 keys_zone=STATIC:1000m inactive=24h max_size=1g;
proxy_temp_path /var/lib/nginx/proxy;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

Installation de MySQL :

MySQL va vous demander notamment de saisir le mot de passe de l’utilisateur root, le root de MySQL pas celui de votre serveur, un conseil mettez un mot de passe le plus fort possible :

apt-get install mysql-server mysql-client mysql-common

Installation de Php 7.0

apt-get install php7.0 php7.0-fpm php7.0-mysql php7.0-curl php7.0-json php7.0-gd php7.0-mcrypt php7.0-msgpack php7.0-memcached php7.0-intl php7.0-gmp php7.0-geoip php7.0-mbstring php7.0-xml php7.0-zip

Attention les paquets installés au-dessus sont un minimum vous pouvez bien entendu en ajouter d’autres par la suite.

Configurer nginx pour utiliser PHP7-FPM :

Vous allez voir la partie un peu plus compliquée de cet article. En effet contrairement à une installation avec apache et PHP5, PHP7-FPM ne fonctionne pas tout de suite avec nginx. Pour qu'il soit pris en compte vous allez devoir modifier très légèrement votre configuration.

Armé de notre fidèle nano, ou vi pour les plus chevronnés, vous allez éditer votre fichier de configuration nginx du site par défaut via la commande :

vi /etc/nginx/sites-available/default

Ajoutez une section “location” pour les fichiers PHP comme suit :

server {
    listen 80;

    root /var/www/html/;
    index index.php index.html index.htm index.nginx-debian.html;
    
    location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/run/php/php7.0-fpm.sock;
      fastcgi_param PHP_VALUE "max_execution_time=1800
                              post_max_size=1500M
                              upload_max_filesize=32M
                              max_input_time=1800
                              max_file_uploads=300";
    }

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

    location ~ /\.ht {
        deny all;
    }
}

Vous avez presque terminé votre installation ! Vous allez maintenant modifier le fichier php.ini via la commande suivant :

vi /etc/php/7.0/fpm/php.ini

Il vous faut trouver dans le fichier le paramètre suivant : cgi.fix_pathinfo=0 si il y a un ; devant la ligne retirez le et assurez-vous que la valeur est bien de 0. Le but de le mettre à 0 va vous éviter beaucoup de soucis dans vos applications web car les chemins d'appels seraient différents avec une valeur à 1.

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting
; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0

Pour finir on va relancer nos deux services que sont PHP7-FPM et nginx pour qu'ils prennent en comptes les modifications :

service php7.0-fpm reload
service nginx reload

Petite explication de différence entre reload et restart. Reload va simplement recharger la configuration du service sans l'interrompre. Alors que restart va interrompre le service avant de le redémarrer. En production le restart va s'utiliser que dans des cas très rares.

Il nous reste plus cas tester que tout fonctionne pour cela on va créer le fichier suivant :

vi /var/www/html/info.php

Dedans on va mettre le code qui suit (qui a simplement pour but d'afficher le phpinfo) :

<?php
phpinfo();

Si vous voyez apparaître ceci c'est que le serveur et PHP7 fonctionne :

creation_d_un_serveur_lamp_debian_php_mariadb_nginx.txt · Dernière modification : de 127.0.0.1