GNU/Linux >> Tutoriels Linux >  >> Debian

Configurer Nginx + php-FPM + apc + MariaDB sur Debian 7 – Le serveur LEMP parfait

Serveur Web Debian

Debian est un excellent choix pour configurer des serveurs Web Linux. Selon les statistiques actuelles, il s'agit du système d'exploitation serveur le plus populaire, suivi de près par les centos.

Je suis un grand fan des commandes apt/dpkg/gdebi, qui facilitent l'installation et la mise à jour des packages sur le système.

Pour configurer un serveur Web php complet et fonctionnel, vous devez installer quelques éléments supplémentaires, notamment un serveur Web et une base de données. Dans cet article, nous allons configurer nginx, php, php-fpm, apc et MariaDB.

Nginx est un serveur Web moderne, qui a été conçu pour gérer de grandes quantités de trafic en utilisant le moins de ressources en termes de RAM et de CPU.

Avant nginx, le serveur Web traditionnel utilisé sur Internet était apache. Cependant, à mesure qu'Internet devenait de plus en plus peuplé, le besoin d'un serveur Web plus rapide et efficace s'est accru.

Nginx contre Apache

De par sa conception, Apache est très volumineux et possède des tonnes de fonctionnalités, dont la plupart ne sont pas nécessaires pour les sites Web typiques. Il a probablement été conçu pour satisfaire les besoins de chacun, mais cela a fini par en faire un serveur Web volumineux et lourd avec des fonctionnalités pour la plupart inutilisées.

Nginx, d'autre part, est un serveur Web très élégant et rapide qui se concentre entièrement sur la vitesse, l'évolutivité et l'efficacité.

Les aspects techniques de la façon dont il le fait sont importants et dépassent la portée de cet article. Peut-être pourrions-nous y jeter un œil plus tard. Juste pour votre information, ce site Web fonctionne sur nginx.

Maintenant, sans autre discussion, mettons-nous au travail.

1. Installer Nginx sur Debian

Le paquet nginx se trouve juste là dans les dépôts debian, vous n'avez donc pas à chercher ailleurs. Lancez apt-get et installez-le.

# apt-get install nginx

Lancez maintenant le serveur nginx.

# service nginx start
Starting nginx: nginx.

Accédez maintenant au serveur nginx depuis le navigateur en ouvrant l'url

http://localhost/

et vous devriez recevoir le message de bienvenue

Welcome to nginx!

Remarques importantes

Il y a peu de choses que vous devez mémoriser pour mieux gérer votre serveur nginx. Les fichiers de configuration nginx se trouvent à l'emplacement suivant

/etc/nginx/
[email protected]:/etc/nginx# ls
conf.d		koi-win		  naxsi.rules	scgi_params	 uwsgi_params
fastcgi_params	mime.types	  nginx.conf	sites-available  win-utf
koi-utf		naxsi_core.rules  proxy_params	sites-enabled

Nous ne modifierons pas directement le fichier nginx.conf. Au lieu de cela, nous créons un fichier de configuration séparé pour chaque vhost/site et l'enregistrons dans les répertoires suivants.

/etc/nginx/sites-available
/etc/nginx/sites-enabled

Ceci est similaire à apache. Le répertoire sites-enabled contient les configurations des vhosts à activer. Il contient des liens symboliques vers les fichiers de configuration correspondants dans le répertoire sites-available.

Configurer un hôte virtuel

Maintenant que nous avons installé nginx, il est temps de configurer un hôte virtuel. C'est ce que vous feriez sur un vrai serveur Web pour configurer votre site.

Dans /etc/nginx/sites-available, vous verrez un fichier nommé default. C'est un fichier modèle pour créer vos propres fichiers de configuration. Copiez-le simplement et nommez-le sur votre site.

# cp default binarytides.com
[email protected]:/etc/nginx/sites-available# ls
binarytides.com  default

Nous avons choisi de nommer les fichiers de configuration avec le nom du site, afin qu'il soit plus facile à mémoriser et à entretenir.
Maintenant, ouvrez binarytides.com et modifiez les éléments selon vos besoins.
Vous verriez un serveur bloc similaire à celui-ci

server {
	#listen   80; ## listen for ipv4; this line is default and implied
	#listen   [::]:80 default_server ipv6only=on; ## listen for ipv6

	root /usr/share/nginx/www;
	index index.html index.htm;

	# Make site accessible from http://localhost/
	server_name localhost;

Cette première chose à configurer ici est le server_name. Nommez-le à votre site. Par exemple

server_name binarytides.com
or
server_name binarytides.com www.binarytides.com

Lorsque quelqu'un ouvre binarytides.com dans son navigateur, l'en-tête http contient ce nom d'hôte que nginx récupère et recherche un bloc de serveur correspondant. Lorsqu'un bloc de serveur correspondant est trouvé, il utilise la configuration de ce bloc de serveur particulier.

Une autre chose à configurer est le répertoire racine Web pour ce site/vhost. Notez que c'est par défaut /usr/share/nginx/www que vous voudrez peut-être remplacer par autre chose.

La convention générale est d'avoir un répertoire séparé pour chaque vhost. Par exemple

/usr/share/nginx/www/binarytides.com/
/usr/share/nginx/www/google.com/

Créez donc un répertoire approprié et pointez le paramètre racine dans le fichier de configuration vers le répertoire.

...
root /usr/share/nginx/www/binarytides.com;
...

Après avoir effectué ces modifications, enregistrez le fichier de configuration et créez un lien symbolique dans le répertoire /etc/nginx/sites-enabled.

[email protected]:/etc/nginx/sites-available# ls
binarytides.com  default
[email protected]:/etc/nginx/sites-available# cd ..
[email protected]:/etc/nginx# cd sites-enabled/
[email protected]:/etc/nginx/sites-enabled# ln -s ../sites-available/binarytides.com
[email protected]:/etc/nginx/sites-enabled# ls
binarytides.com  default
[email protected]:/etc/nginx/sites-enabled#

Testez maintenant votre nouvelle configuration

# nginx -t
nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

La dernière ligne de la sortie doit indiquer "succès", sinon une erreur s'affichera. Il peut afficher des avertissements qui peuvent être corrigés ultérieurement.

Redémarrez enfin nginx pour que la nouvelle configuration prenne effet

# service nginx restart
Restarting nginx: nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored
nginx.
[email protected]:/etc/nginx/sites-enabled#

La nouvelle configuration a donc pris effet. Créez maintenant un nouveau fichier index.html dans la nouvelle racine Web de cet hôte virtuel et ouvrez-le à partir du navigateur et cela devrait fonctionner.

2. Installez php et php-fpm

La prochaine chose à installer est l'interpréteur php et php-fpm. Php-FPM est un gestionnaire de processus fastcgi dédié pour php qui peut s'interfacer ou se connecter avec n'importe quel serveur Web compatible et gérer les processus php pour traiter les requêtes php.

Nginx <== communicates ==> Php-FPM <== manages ==> php child process

Installez d'abord les packages nécessaires.

# apt-get install php5 php5-fpm

Il installera automatiquement les dépendances nécessaires. Vous pouvez également installer le package php5-cli si vous avez besoin de la commande php pour exécuter des scripts php.

Php-fpm runs as a separate server and nginx communicates with it over a socket. Hence the php execution is totally outside the server. Also since fpm keeps php process persistent, it fully supports APC.

Localisez maintenant les fichiers de configuration php fpm. Les fichiers situés à

/etc/php5/fpm/

Un pool est un ensemble de processus PHP exécutés avec le même utilisateur/groupe. Donc, si vous voulez que les fichiers php de chaque site s'exécutent avec une autorisation d'utilisateur distincte, vous devez créer des pools de fpm distincts. Par souci de simplicité, nous ne montrons qu'un seul pool ici.

Les fichiers de configuration du pool se trouvent dans le répertoire pool.d. Naviguer dans

[email protected]:/etc/php5/fpm/pool.d# ls
www.conf

Ouvrez le fichier www.conf qui est à nouveau un modèle à utiliser et créez des fichiers de configuration distincts pour chaque pool.
Il ressemble à ceci

; Start a new pool named 'www'.
; the variable $pool can we used in any directive and will be replaced by the
; pool name ('www' here)
[www]

; Per pool prefix
; It only applies on the following directives:
; - 'slowlog'
; - 'listen' (unixsocket)
; - 'chroot'
; - 'chdir'
; - 'php_values'
; - 'php_admin_values'
; When not set, the global prefix (or /usr) applies instead.
; Note: This directive can also be relative to the global prefix.
; Default Value: none
;prefix = /path/to/pools/$pool

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = www-data
group = www-data

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses on a
;                            specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /var/run/php5-fpm.sock

; Set listen(2) backlog.
; Default Value: 128 (-1 on FreeBSD and OpenBSD)
;listen.backlog = 128

La chose ci-dessus se compose principalement de commentaires et les 4 lignes les plus importantes sont

1. [www] 
this is the pool name

2. user = www-data 
this is the user with whose permissions the php script would be run

3. group = www-data
this is the group

4. listen = /var/run/php5-fpm.sock
this is the socket for communicating with this pool. This socket must be given to nginx for nginx to be able to talk to fpm

Connecter fpm avec nginx

Nous ne changerons pas grand-chose ici. Notez simplement le chemin du socket. Nous devons mettre cela dans le fichier de configuration nginx. Revenez à votre configuration nginx et ouvrez-la à nouveau.

Il contient une section pour la configuration de php fpm qui ressemble à ceci

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
#	fastcgi_split_path_info ^(.+\.php)(/.+)$;
#	# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
#	# With php5-cgi alone:
#	fastcgi_pass 127.0.0.1:9000;
#	# With php5-fpm:
#	fastcgi_pass unix:/var/run/php5-fpm.sock;
#	fastcgi_index index.php;
#	include fastcgi_params;
#}

Décommentez-le et faites-le ressembler à ceci

location ~ \.php$ {
	fastcgi_split_path_info ^(.+\.php)(/.+)$;
#	# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

#	# With php5-cgi alone:
#	fastcgi_pass 127.0.0.1:9000;
	# With php5-fpm:
	fastcgi_pass unix:/var/run/php5-fpm.sock;
	fastcgi_index index.php;
	include fastcgi_params;
}

Tester PHP

Maintenant, placez un fichier dans la racine Web avec l'appel phpinfo.

&lt;?php

phpinfo();

Et puis ouvrez le fichier dans le navigateur et le bloc d'informations php devrait apparaître, indiquant que php est configuré et fonctionne correctement.

Une autre chose que vous pouvez faire est d'ajouter index.php à la liste des fichiers d'index. Ainsi, lors de l'accès à un répertoire, si aucun fichier n'est spécifié, index.php est appelé.

root /usr/share/nginx/www/binarytides.com;
index index.html index.htm index.php;

Configurer apc - autre cache php

APC est un excellent moyen d'accélérer l'exécution des scripts php. Apc compile le code php et garde l'opcode en mémoire et l'utilise la prochaine fois sans compiler à nouveau le même code php à partir du fichier. Cela accélère considérablement l'exécution. Outre le cache opcode, apc propose également un cache utilisateur pour stocker les données brutes de l'application php en mémoire.

Php à partir de la version 5.5 a une nouvelle fonctionnalité appelée OPcache qui fait la même chose que le cache d'opcode apc, rendant ainsi apc obsolète.

La configuration d'apc est très simple et rapide. Installez simplement le package apc pour php

# apt-get install php-apc

Redémarrez ensuite php fpm

# service php5-fpm restart

Maintenant, vérifiez à nouveau la page phpinfo et elle devrait également contenir les détails de l'apc. Le fichier de configuration apc se trouve à

/etc/php5/fpm/conf.d/20-apc.ini

La configuration peut être légèrement modifiée pour des performances optimales en fonction de vos besoins. Voici le type de configuration que j'utilise

extension=apc.so
 
apc.enabled=1
apc.shm_size=128M
apc.ttl=3600
apc.user_ttl=7200
apc.gc_ttl=3600
apc.max_file_size=1M

Consultez la liste des paramètres de configuration apc pour plus d'informations.

3. Installer MariaDB sur Debian

Vient maintenant le dernier et dernier composant de la pile LEMP. C'est la base de données MariaDB et non mysql. Eh bien, vous devriez maintenant savoir que mysql est entre les mains d'Oracle et non plus une appartenance à une communauté. Les principaux corps ont donc commencé à passer à mariadb. La bonne chose est que mariadb est compatible binaire avec mysql avec de nombreuses fonctionnalités supplémentaires. Donc, si vous utilisez déjà mysql pour vos applications php, passer à mariadb serait absolument sans tracas.

MariaDB n'est pas présent dans debian dépôts. Pour obtenir les référentiels, visitez la page suivante

https://downloads.mariadb.org/mariadb/repositories/

Sélectionnez Debian comme distribution, Wheezy comme version et version 10.0 de mariadb. Sélectionnez ensuite un miroir sur le côté droit. Faites maintenant défiler vers le bas de la page pour trouver les détails du référentiel.

Voici les commandes que j'ai obtenues

sudo apt-get install python-software-properties
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
sudo add-apt-repository 'deb http://mirrors.fe.up.pt/pub/mariadb/repo/10.0/debian wheezy main'

Maintenant, mettez à jour le cache apt et installez les packages mariadb

sudo apt-get update
sudo apt-get install mariadb-server mariadb-client

Lors de l'installation, mariadb demanderait le mot de passe de l'utilisateur root. Entrez le mot de passe et assurez-vous de ne pas l'oublier.

Une fois l'installation terminée, vérifiez votre version de mariadb

# mysql -V
mysql  Ver 15.1 Distrib 10.0.3-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1

Notez que le nom de la commande est le même qu'avec mysql. Mais le nom mariadb est là dans les informations de version.

Le serveur Web est prêt

Alors maintenant, le serveur Web LEMP est prêt à être utilisé. Vous voudrez peut-être installer quelques bonus supplémentaires comme phpmyadmin pour mieux gérer votre base de données. Phpmyadmin est là dans le dépôt debian alors installez-le directement à partir de là.

Avez-vous des questions ? N'hésitez pas à commenter ci-dessous.


Debian
  1. Comment configurer un serveur LEMP sur Debian 10 Buster

  2. Mettre à jour le serveur ISPConfig Perfect de Debian 10 à Debian 11

  3. La configuration parfaite - Debian Sarge (3.1)

  4. Comment installer LEMP (Linux, Nginx, MySQL &PHP-FPM) sur un VPS Debian 8

  5. Comment installer le réseau social Elgg sur Debian 9

Comment installer Nginx, MariaDB, PHP (pile LEMP) sur Debian 11

Comment installer la pile LEMP sur le serveur/bureau Debian 10 Buster

Comment installer Nginx avec PHP-FPM sur Debian 11

Le serveur parfait - Debian Squeeze (Debian 6.0) avec BIND, Dovecot et Nginx [ISPConfig 3]

Le serveur parfait - Debian Wheezy (nginx, BIND, Dovecot, ISPConfig 3)

Comment configurer le cache Nginx sur le serveur LEMP