Skip to content

Installation d’une stack LAMP sur debian

Attention ! Ce contenu a été publié il y a 8 ans. Merci de lire cette page en gardant son âge à l'esprit, son contenu étant potentiellement obsolète.

Aujourd’hui, nous allons voir ensemble comment installer une stack LAMP (Linux-Apache-MySQL-PHP) sur un serveur sous Debian.

Ce tutoriel se veut être le plus simple et basique possible.

Ce tutoriel va vous permettre :

  • de disposer d’un serveur web (Apache + PHP) de base
  • de disposer d’un serveur de base de donnée MySQL (et de phpMyAdmin, une interface web pour gérer celui-ci)
  • de disposer d’un serveur smtp local (uniquement utiliser pour envoyer des mails depuis vos sites en php)

Ce que ce tutoriel ne va pas vous permettre :

  • connaitre l’ensemble des possibilités d’apache
  • de disposer d’un serveur mail complet (POP, IMAP, SMTP)
  • de disposer d’un serveur ultra-sécurisé et optimisé

Attention ! Ce contenu a été publié il y a 8 ans. Merci de lire cette page en gardant son âge à l'esprit, son contenu étant potentiellement obsolète.

Étape 1 : préparation du serveur

Nous allons dans un premier temps nous assurer que le hostname du serveur est correct et corriger celui-ci le cas échéant.

Pour ce faire, commencez par afficher le contenu du fichier /etc/hostname à l’aide de la commande cat :

cat /etc/hostname

Il est plus que conseillé que celui-ci soit un FQDN (full qualified domain name) et qu’il corresponde au reverse IP configuré chez votre fournisseur. Dan notre cas, nous utiliserons le nom d’hôte lamp.example.com. Afin de modifier le fichier /etc/hostname nous allons utiliser le logiciel vi(m) :

vi /etc/hostname

Afin d’éditer le fichier, vous devez appuyer sur la touche « INS » ou « INSERT » de votre clavier. Afin d’enregistrer votre modification, appuyez consécutivement sur la touche « ESC » ou « ECHAP » de votre clavier et tapez ensuite « :wq » (w pour write, q pour quit) et pour finir la touche « ENTER » ou « ENTREE ».

Pour appliquer les modifications du hostname, vous devez effectuer la commande suivante :

/etc/init.d/hostname.sh start

Nous vérifions ensuite le contenu du fichier /etc/hosts. Celui-ci doit ressembler à l’exemple ci-dessous, le cas échéant, éditez-le  :

127.0.0.1 localhost
37.187.6.117 lamp.example.com lamp

Afin que notre serveur soit à jour au niveau de l’heure et de la date, nous allons y installer les logiciel ntp et ntpdate :

apt-get install ntp ntpdate

Étape 2 : installation du serveur Web Apache

Apache est l’un des serveurs web les plus répondu (39,74 % de part de marché en janvier 2015, d’après Netcraft) son installation et configuration est assez simple. L’avantage d’utiliser apache, outre le fait que l’installation de PHP est très simple, est que comme c’est le plus utilisé, vous trouverez sur Internet une multitude de guide et tutoriel sur son utilisation, configuration avancée, etc.

Pour l’installer, rien de plus simple :

apt-get install apache2 apache2-mpm-prefork

L’ensemble de la configuration de Apache est stockée dans le dossier /etc/apache2/ :

root@lamp:/etc/apache2# ls
apache2.conf conf-enabled magic mods-enabled sites-available
conf-available envvars mods-available ports.conf sites-enabled

apache2.conf contient la configuration générale de Apache
mods-available est un dossier qui contient les fichiers de chargement (.load) et de configuration des modules (.conf) disponibles
sites-available est un dossier qui contient les fichiers de configuration de vos sites

Pour activer les modules apaches, nous allons utiliser la commande a2enmod (pour Apache2 Enable Module) suivie du nom du ou des module(s) à activer. L’inverse est possible avec la commande a2dismod (Apache2 Disable Module).

a2enmod alias auth_basic deflate expires headers rewrite status

service apache2 restart

Certains de ces modules seront certainement déjà actifs. Ces modules sont les plus courant et généralement nécessaire pour l’utilisation de CMS tel que WordPress, etc.

Le même type de commande existe pour l’activation ou la désactivation de site internet dont la configuration est présente dans le dossier sites-available : a2ensite / a2dissite. Dans le cadre de ce tuto se voulant être le plus simple possible, nous n’utiliserons pas de configuration particulière pour notre premier site (cela sera traité ultérieurement dans un autre article), nous utiliserons donc la configuration par défaut d’apache (le fichier sites-enable/default.conf).

Je ne rentrerais volontairement pas en détail dans la configuration d’apache et de ses différents modules. Pour cela, Google/Bing/etc. sont vos amis 🙂

Au niveau de la configuration de apache, nous allons effectuer quelques modifications simple afin de rendre celui-ci plus sûr et fonctionnel comme nous le souhaitons :

Dans le fichier /etc/apache2/mods-enabled/dir.conf, vous allez modifier la ligne qui commence par DirectoryIndex de cette manière :

DirectoryIndex index.html index.php

Le but est d’indiquer à Apache la priorité de traitement des index de vos sites. C’est à dire son comportement lorsqu’un fichier n’est pas explicitement spécifié dans l’URL d’accès. Par exemple : http://lamp.example.com/ au lieu de http://lamp.example.com/monfichier.html.

Avec cette configuration, apache va dans un premier temps tenter d’afficher le fichier index.html, si celui-ci n’existe pas, le fichier index.php sera utilisé.

Pour plus de sécurité, nous allons masquer la version d’apache utilisée, nous ferons par ailleurs de même avec PHP dans la suite du tuto.  Dans le fichier /etc/apache2/apache2.conf, modifiez les valeurs suivantes :

ServerSignature off
ServerTokens Prod

Pour des questions d’optimisation, nous allons également modifier quelques autres valeurs :

Timeout 60

KeepAlive On

MaxKeepAliveRequests 0

KeepAliveTimeout 10

HostnameLookups Off

Dans le fichier /etc/apache2/mods-enabled/mpm_prefork.conf, nous allons indiquer le nombre

Par défaut, les fichiers de votre site doivent être stocké dans le dossier /var/www. Cela correspond à la valeur de DocumentRoot dans le fichier de configuration par défaut d’apache sites-enabled/default.

Dans le fichier /etc/apache2/mods-enabled/mpm_prefork.conf, nous allons indiquer le nombre d’instance d’Apache peuvent être exécuter simultanément. Tout est une question d’équilibre ici par rapport aux capacités CPU & RAM de votre serveur, du type de sites hébergés (statique ou dynamique), etc. (cela sera abordé dans un autre article).

StartServers 2
MinSpareServers 2
MaxSpareServers 8
MaxRequestWorkers 150
MaxConnectionsPerChild 5000

Nous allons finalement légèrement éditer la configuration du site par défaut d’apache afin de renseigner notre nom de domaine. Dans le fichier /etc/apache2/sites-enabled/default.conf :

ServerName monsupersite.com

On redémarre Apache :

service apache2 restart

Et voilà ! Vous disposez maintenant d’un serveur Web Apache configuré et prêt à recevoir ses premières requêtes. Maintenant, passons à la suite …

Étape 3 : installation de PHP

On commence par installer les différents packages qui vont bien (PHP + quelques modules couramment utilisés) :

apt-get install libapache2-mod-php5 php5 php5-common php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Par défaut, la configuration de PHP n’est pas très adaptée. Elle est soit trop restrictive soit pas assez. Nous allons donc modifier quelques valeurs dans le fichier de configuration /etc/php5/apache2/php.ini :

max_execution_time = 30
max_input_time = 60
memory_limit = 64M        # Il est possible que suivant le site que vous allez héberger que cette valeur ne soit pas assez haute. Il vous suffit d’indiquer ici une valeur plus important, généralement recommandée à 128M avec certain CMS
upload_max_filesize = 12M
register_globals = Off
expose_php = Off

Toujours dans le même fichier et pour plus de sécurité, nous allons également désactiver quelques fonctions PHP permettant, entre autres, d’éxecuter des requêtes directement sur le système :

disable_functions = symlink,shell_exec,exec,proc_close,proc_open,popen,system,dl,passthru,escapeshellarg,escapeshellcmd

On oublie pas de redémarrer Apache après avoir effectuées les modifications du dessus :

service apache2 restart

Hey, mais ça y est ? On a un serveur Web avec PHP d’installé ! C’est le moment de faire un petit test.

On va créer un fichier dans le dossier /var/www : _info.php

 echo « <?php phpinfo(); ?> » > /var/www/_info.php

Rendez-vous ensuite sur http://monsupersite.com/_info.php, vous devriez voir une page affichant une pléiade d’information sur votre serveur, php et ses modules, etc. Félicitation, ça veut dire que tout est fonctionnel !

On passe à la suite ? Oui ? Ok, let’s go !

Étape 4 : installation de MySQL

A nouveau, on commence par l’installation des paquets adéquat :

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

Suivez les instructions à l’écran et surtout, notez bien le mot de passe root que vous allez devoir renseigner pendant l’installation !

Avant de passer à la suite, on va sécuriser un peu notre installation en utilisant le script fourni par le paquet mysql-server : mysql_secure_installation. Il vous suffit de taper cela dans votre terminal, de faire entrée et de répondre à quelques questions :

Set root password ? Y
Permet de modifier le mot de passe root de mysql
Remove anonymous users ? Y
Retire les accès anonymes
Disallow root login remotely ? Y
Désactive l’accès distant pour l’utilisateur root
Remove test database and access to it ? Y
Retire la base de donnée test et les accès associés
Reload privilege tables now ? Y
Recharge les privilèges

Et c’est tout pour MySQL !

Étape 4 (bonus) : installation de phpMyAdmin

Afin de vous faciliter la tâche et pour gérer votre serveur mysql dans une interface web sympathique, nous allons installer phpMyAdmin :

apt-get install phpmyadmin

Attention à bien sélectionner apache2 à la question « Serveur web à reconfigurer automatique » en appuyant sur la touche espace de votre clavier suivie de la touche entrée. A la question « Faut-il configurer la base de données de phpmyadmin avec dbconfig-common ? », répondez oui et indiquez votre mot de passe root MySQL.

Maintenant, en vous rendant sur l’adresse http://monsupersite.com/phpmyadmin/, vous devriez arriver sur la page de connexion à phpMyAdmin. Vous devez utiliser vos identifiants root MySQL.

Étape 5 : installation de Postfix (serveur mail)

Postfix est un serveur SMTP. Dans notre cas, nous allons exclusivement l’utiliser afin de permettre à notre site d’envoyer des mails si nécessaire, cette étape est donc optionnelle.

Il est possible que Postfix soit déjà installé sur votre serveur. 

 apt-get install postfix
Lecture des listes de paquets… Fait
Construction de l’arbre des dépendances
Lecture des informations d’état… Fait
postfix est déjà la plus récente version disponible.
0 mis à jour, 0 nouvellement installés, 0 à enlever et 60 non mis à jour.

Nous allons reconfigurer celui-ci :

dpkg-reconfigure postfix

Dans l’ordre, choisissez en premier lieu « Site Internet » à la question concernant le type de serveur de messagerie souhaité. Indiquez ensuite le hostname de votre serveur (celui-ci que vous avez indiqué au début de ce tuto. Dans notre exemple, nous utilisons lamp.example.com). A la question « Destinataire des courriels de « root » et de « postmaster » », renseignez une adresse email valide sur laquelle le serveur transféra les emails locaux des comptes root et postmaster. Le reste peut être laissé par défaut, faites juste entrée.

On s’accroche, c’est presque fini !

Conclusion

Pour résumer, vous disposez maintenant d’un serveur Web (Apache2), de PHP, d’un serveur de base de donnée (MySQL), de phpMyAdmin et d’un serveur SMTP (Postfix). Il ne vous reste maintenant plus qu’à mettre en ligne votre site. Pour ce faire, utilisez la méthode de votre choix : ssh, sftp, ftp, … cela n’a pas d’importance. Pour rappel, les fichiers de votre site doivent se situer dans le dossier /var/www/.

Je couvrirais la personnalisation, la sécurisation et l’optimisation d’un serveur plus détail ultérieurement.

N’hésitez pas à laisser un commentaire au bas de cet article si celui-ci vous a été utile, si vous avez des questions ou bien une quelconque remarque !

Attention ! Ce contenu a été publié il y a 8 ans. Merci de lire cette page en gardant son âge à l'esprit, son contenu étant potentiellement obsolète.
Published inadministration systèmetutoriels

Be First to Comment

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.


Fatal error: Uncaught TypeError: flock(): supplied resource is not a valid stream resource in /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-content/plugins/w3-total-cache/Cache_File_Generic.php:64 Stack trace: #0 /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-content/plugins/w3-total-cache/Cache_File_Generic.php(64): flock() #1 /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-content/plugins/w3-total-cache/PgCache_ContentGrabber.php(2191): W3TC\Cache_File_Generic->set() #2 /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-content/plugins/w3-total-cache/PgCache_ContentGrabber.php(457): W3TC\PgCache_ContentGrabber->_maybe_save_cached_result() #3 [internal function]: W3TC\PgCache_ContentGrabber->ob_callback() #4 /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-content/plugins/w3-total-cache/Util_Bus.php(21): call_user_func() #5 /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-content/plugins/w3-total-cache/Generic_Plugin.php(563): W3TC\Util_Bus::do_ob_callbacks() #6 [internal function]: W3TC\Generic_Plugin->ob_callback() #7 /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-includes/functions.php(5420): ob_end_flush() #8 /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-includes/class-wp-hook.php(324): wp_ob_end_flush_all() #9 /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters() #10 /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-includes/plugin.php(517): WP_Hook->do_action() #11 /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-includes/load.php(1270): do_action() #12 [internal function]: shutdown_action_hook() #13 {main} thrown in /var/www/vhosts/maiko.sh/domains/maiko.sh/blog/wp-content/plugins/w3-total-cache/Cache_File_Generic.php on line 64