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.
<?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.