Ceci est une ancienne révision du document !
Serveur web (LAMP)
Lorsqu'il est question d'un serveur "LAMP", on décrit un serveur web faisant fonctionner, dans un environnement GNU/Linux, les logiciels de serveur web Apache, MySQL et PHP.
Le présent document décrit le téléchargement et l'installation d'une solution LAMP pas-à-pas sous Ubuntu, ainsi qu'une sécurisation de base de l'ensemble du serveur.
Installation directe de tous les Paquets
Pour les plus pressés, les paquets à installer sont :
apache2 mysql-server-5.1 php5 php5-mysql phpmyadmin
ou en tapant la commande dans la console :
sudo apt-get install apache2 mysql-server-5.1 php5 php5-mysql phpmyadmin
Ensuite cliquez sur ce lien : http://localhost/phpmyadmin/ pour accéder à votre phpMyAdmin, si ça fonctionne, vous avez terminé, sinon il va falloir tout lire.
ou encore en allant dans le gestionnaire de paquets Synaptic, puis dans le menu Édition > Sélectionner des paquets par tâche. Cocher LAMP Server, valider & appliquer.
Puis continuer à partir de Vérification du bon fonctionnement d'Apache
Vous pouvez compléter l'installation si vous le souhaitez en installant après phpmyadmin
Installation d'Apache2
Afin d'installer et de configurer Apache2, allez voir sur sa page dédié apache2
Installation de MySQL 5.1
Installez le paquet mysql-server-5.1
plus d'informations sur le serveur MySQL ...
Pour entrer à nouveau le mot de passe :
sudo dpkg-reconfigure mysql-server-5.1
Installation de PHP 5 (avec modules pour Apache et MySQL)
Pour installer PHP5 et quelques modules supplémentaires pour Apache2 et MySQL, installez les paquets php5 php5-mysql.
éditez le fichier /etc/apache2/mods-enabled/php5.conf
puis ajoutez a la ligne "AddType application/x-httpd-php" l'extension ".php5" puis
éditez le fichier /etc/apache2/mods-enabled/dir.conf
puis ajoutez a la ligne "DirectoryIndex" la valeur "index.php5"
puis un petit
sudo /etc/init.d/apache2 reload
ou pour forcer un redémarrage du serveur avec les nouveaux paramètres
sudo /etc/init.d/apache2 restart
et c'est pris en compte
Pendant l'installation, le serveur Apache2 sera redémarré et vous allez sûrement rencontrer une erreur de ce genre :
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
Ceci n'est absolument pas gênant et vous pouvez régler le problème en ajoutant la directive « ServerName » dans le fichier de configuration principal : /etc/apache2/apache2.conf
Exemple si vous avez comme nom de domaine « www.monsite.tld » :
ServerName www.monsite.tld
Ou si vous êtes en local :
ServerName 127.0.0.1
Premières vérifications
Si vous avez modifié la configuration d'Apache2 (voir ci-dessus), vous devez d'abord recharger sa configuration :
sudo /etc/init.d/apache2 reload
Vérification du bon fonctionnement d'Apache
Ouvrez votre navigateur internet et rendez-vous à l'URL :
- http://127.0.0.1/ ou http://localhost/ si vous êtes sur la machine locale ;
- http://xxx.xxx.xxx.xxx/ où « xxx.xxx.xxx.xxx » est l'adresse IP de la machine (ou encore en utilisant un nom de domaine de la machine) si vous êtes sur une machine distante.
Si tout s'est bien passé, vous devriez voir une page Web dans laquelle s'affiche
it works!
Pour voir apparaître le contenu d'un répertoire Web, il suffit qu'il ne comporte pas de fichier "index" (index.html par défaut).
Vérification du bon fonctionnement de PHP5
Nous allons créer un fichier PHP : le fameux « phpinfo.php » qui est très simple mais permettra de savoir si PHP est correctement installé et fonctionnel.
Créez le fichier /var/www/phpinfo.php ou /var/www/htdocs/phpinfo selon votre version.
Insérez-y le code suivant :
<?php phpinfo(); ?>
Testez en accédant à http://localhost/phpinfo.php qui doit vous afficher un tableau.
Si ce n'est pas le cas et que votre navigateur vous propose de télécharger le fichier, continuez la lecture.
Problèmes d'exécution PHP
Effectuez les opérations suivantes :
Il y a deux solutions très proches dans la suite, merci de clarifier.
-éditer apache2.conf :
sudo nano /etc/apache2/apache2.conf
-ajouter, dans apache2.conf, les lignes suivantes :
AddType application/x-httpd-php .php\\ AddType application/x-httpd-php-source .phps
-recharger apache2
sudo /etc/init.d/apache2 reload
Une fois le fichier créé (et enregistré), il devrait apparaitre sur la page d'index de votre serveur (vue tout à l'heure). Cliquez alors dessus ou entrez directement l'URL dans votre navigateur (du type http://localhost/phpinfo.php, mais pas /var/www/phpinfo.php).
1 - Si votre navigateur vous demande de télécharger le fichier « phpinfo.php », cela peut venir d'un problème de module mal chargé. Dans ce cas, vous pouvez tenter de résoudre cette « erreur » en activant le module PHP5 :
sudo a2enmod php5
et
sudo /etc/init.d/apache2 restart
puis videz le cache de votre navigateur (Ctrl+Maj+Suppr. sous Firefox).
2 - Si votre navigateur vous affiche le contenu du fichier « phpinfo.php » ( il n'interprète pas les fichiers *.php seulement les *.phpx ( x=3 ou 4 ou 5 )) alors essayer ce qui suit …
( solution trouvée et adaptée à partir du forum http://forum.ubuntu-fr.org/viewtopic.php?pid=1793306)
-éditer apache2.conf :
sudo nano /etc/apache2/apache2.conf
- rajouter les lignes suivantes dans apache2.conf :
<IfModule mod_mime.c> AddType application/x-httpd-php .php .phtml .php3 .php4 .php5 </IfModule>
-recharger et relancer apache2
sudo /etc/init.d/apache2 reload sudo /etc/init.d/apache2 restart
puis videz le cache de votre navigateur
Si tout s'est bien passé, vous devriez voir apparaître une page Web dans laquelle se trouvent plusieurs informations, notamment celles liées à la version de PHP utilisée sur votre système, sur le système en lui-même, etc.
Installation de quelques modules supplémentaires pour PHP5
Vous pourriez avoir besoin de quelques modules supplémentaires pour PHP5, afin d'ajouter certaines fonctionnalités à votre serveur.
Pour connaitre les différents module disponibles, visitez la section dédiée aux modules pour PHP.
Installation de postfix pour envoyer des mails
Permet d'utiliser la fonction mail() de php…
Note : Plus facile à mettre en place, vous pouvez utiliser ssmtp qui utilise un serveur smtp distant, cf. ssmtp.
Installation
sudo apt-get install postfix
Je ne sais pas si c'est indispensable :
sudo adduser postfix sasl
Configuration
Pour une utilisation sur un ordi connecté via un FAI :
- Choisir "Internet avec un "smarthost""
- Nom de courrier : mettre une adresse mail valide (indispensable)
- Serveur relais SMTP : mettre le smtp de votre FAI (ex : smtp.free.fr)
- pour le reste, garder les valeurs par défaut
Pour reconfigurer :
sudo dpkg-reconfigure postfix
Sécurisation de MySQL
Pour l'instant, on peut accéder aux bases de données MySQL avec le login « root » et sans mot de passe.
Nous allons donc sécuriser un peu le serveur.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
il suffit de lancer MySQL avant de faire ces manipulations :
sudo /etc/init.d/mysql start
Ouvrez un terminal et tapez :
sudo mysql_secure_installation
Le script de sécurisation du serveur MySQL démarre.
Enter current password for root (enter for none):
Validez avec « Entrée ». En effet, pour l'instant, il n'y a pas de mot de passe.
Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. Set root password? [Y/n]
Faites « Entrée » pour choisir un mot de passe.
New password:
Entrez le mot de passe de votre choix et validez par « Entrée ».
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n]
Faites « Entrée » pour supprimer l'utilisateur anonyme créé lors de l'installation.
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n]
Si vous n'avez pas besoin d'administrer votre base de données à distance, ce qui devrait être le cas de la plupart des utilisateurs, validez par « Entrée ». Ainsi, l'utilisateur « root » ne pourra se connecter qu'en local. Sinon tapez « n ».
Remove test database and access to it? [Y/n]
Validez par « Entrée » pour supprimer la base de données de test créée lors de l'installation.
Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n]
Validez par « Entrée » pour prendre en compte les changements que vous venez de faire et les appliquer immédiatement.
Préserver ses bases de données (facultatif)
Par défaut les bases de données sont stockées dans : /var/lib/mysql/
Le problème ici c'est qu'en cas de ré-installation du système vous perdez toutes vos bases de données. Vous pourriez aussi manquer de place sur la partition qui sert à monter /var.
Si vous avez une partition séparée pour monter /home (ce qui est fortement recommandé) le mieux est par exemple de stocker les bases de données dans /home/mysql (ou ailleurs, à vous de choisir).
Pour cela vous allez créer un nouveau fichier avec les droits du super-utilisateur (gksudo gedit) et y placer les lignes suivantes :
[mysqld] datadir = /home/mysql
Enregistrez ce fichier sous /etc/mysql/conf.d/datadir.cnf (le nom du fichier doit obligatoirement se terminer par .cnf). Ce fichier ne sera pas écrasé lors d'une mise à jour de MySQL et les directives qu'il contient prennent le pas sur celles du fichier de configuration global /etc/mysql/my.cnf
Arrêter mysql :
sudo /etc/init.d/mysql stop
Créer le dossier /home/mysql :
sudo mkdir /home/mysql
Copier le contenu du dossier /var/lib/mysql/ :
sudo cp -R /var/lib/mysql/* /home/mysql
Supprimer les fichiers copiés ib_logfile0, ib_logfile1, etc. :
sudo rm /home/mysql/ib*
Réattribuer les fichiers à l'utilisateur mysql :
sudo chown -R mysql: /home/mysql
Relancer mysql :
sudo /etc/init.d/mysql start
Vérifier que tout est en place via phpmyadmin. Désormais vos données seront toutes stockées dans /home/mysql.
gksudo gedit /etc/apparmor.d/usr.sbin.mysqld
Là, il faut modifier le chemin /var/lib/mysql par /home/mysql, ou l'endroit où vous avez déplacé votre fichier (éventuellement sur plusieurs lignes différentes).
Ensuite :
sudo /etc/init.d/apparmor restart
sudo /etc/init.d/mysql start
Votre MySQL devrait alors redémarrer correctement.
Si MySQL ne se démarre pas, (erreur parue sous Jaunty, Intrepid ), le problème peut venir de la présence d'un fichier de sauvegarde de "/etc/apparmor.d/usr.sbin.mysqld" créé par Gedit. Pour corriger ce problème :
sudo rm /etc/apparmor.d/usr.sbin.mysqld~
ATTENTION à ne supprimer que celui finissant par "~" Puis :
sudo /etc/init.d/apparmor restart
sudo /etc/init.d/mysql start
La création d'un fichier usr.sbin.mysqld.old conduit également à ce problème. Si le problème n'est pas résolu, c'est que la solution est ailleurs…
Installation de PhpMyAdmin
Installez le paquet phpmyadmin
Sous Gutsy, pendant l'installation de phpmyadmin, il vous sera demandé de choisir le serveur web à configurer. Choisissez apache2 (en appuyant sur la barre d'espace après avoir sélectionné l'entrée correspondante avec les flèches du clavier).
sudo dpkg-reconfigure phpmyadmin
sudo gedit /etc/phpmyadmin/apache.conf
Modifier le chemin d'acces "/phpmyadmin" par le chemin de votre choix (ex: "/adminmysqldb") et redémarrer le serveur Apache.
Vérification du bon fonctionnement de PhpMyAdmin
Pour vérifier le bon fonctionnement de PhpMyAdmin, rendez-vous à l'URL de votre serveur web (voir plus haut) et cliquez sur le répertoire « phpmyadmin » ou tapez http://localhost/phpmyadmin/ si vous ne voyez le répertoire évoqué (voir plus bas pour les explications).
Vous arriverez alors sur la page d'authentification de PhpMyAdmin. Entrez alors votre login (« root ») et le mot de passe choisi lors de la sécurisation de MySQL. Remarque : si votre login est dupont ne pas mettre dupont comme utilisateur mais root puis le mot de passe sinon vous risquez d'avoir l'erreur #1045 - Access denied for user 'root'@'localhost' en tentant d'accéder à vos bases de données.
Si tout s'est bien passé, vous devriez être connecté à PhpMyAdmin et pouvoir créer et gérer vos bases de données.
sudo ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin
Alias /phpmyadmin/ "/usr/share/phpmyadmin/" <Directory "/usr/share/phpmyadmin/"> Options None AllowOverride None Order allow,deny Allow from all </Directory>
Si vous n'arrivez pas sur la page d'authentification de PhpMyAdmin et que vous avez l'erreur "Wrong permission on configuration file, should not be world writable!" vous devez modifier les modes d'accès du fichier "config.inc.php" de la façon suivante :
sudo chmod 644 /usr/share/phpmyadmin/config.inc.php
Pour vérifier de nouveau que PhpMyAdmin fonctionne : utiliser l'URL de votre serveur et cliquer sur le répertoire "phpmyadmin", la page d'authentification doit s'ouvrir.
Si vous n'arrivez pas à créer des bases de données et que vous avez une erreur :
#1006 - Can't create database (errno: 13)
c'est que vous n'avez pas les bons droits sur le répertoire /var/lib/mysql. Pour y remédier vous pouvez faire la commande suivante :
chown -R mysql:mysql /var/lib/mysql
Utiliser aisément le répertoire contenant les sites
Le répertoire contenant les sites lus par Apache est par défaut /var/www/ Ses droits par défaut sont : propriétaire=root, group=root droits rwXr-Xr-X (X signifie droit x pour les répertoires, mais pas pour les fichiers). L'utilisateur Apache est 'www-data'.
Pour accéder aux fichiers qu'il doit lire, Apache utilise donc en standard le droit 'r' de others, mais seul root peut modifier ces fichiers, ce qui n'est pas pratique.
Un ajustement de la politique des droits permet de mieux utiliser ce répertoire
Il faut commencer par s'ajouter au groupe de apache le 'www-data':
sudo addgroup $USER www-data
Puis modifier les droits
sudo chown -R www-data:www-data /var/www sudo chmod -R 770 /var/www sudo chmod g+s /var/www
il faudra peut être redémarrer votre session ou actualiser l'explorateur pour que cela soit pris en compte.
- permettra à apache de lire le répertoire pour produire les pages
- permettra à tous les utilisateurs membres du groupe www-data de travailler sur les fichiers (en général, il faut créer ce groupe "www-data" et se mettre comme membre)
- permettra à tous les fichiers et répertoires créés dans ce répertoire d'avoir les mêmes propriétés au travers du groupe (GIG activé par g=s)
- les autres utilisateurs n'ont droit à rien (correct dans un environnement avec de nombreux utilisateurs)
Il reste à
- mettre les utilisateurs ayant le droit de travailler sur les sites dans le groupe 'www-data' (NB: il peut être nécessaire de se déconnecter et se reconnecter d'Ubuntu pour que le système prenne en compte les changements, c'est-à-dire pouvoir lire et travailler sur /var/www)
- Si nécessaire, mettre en place les hotes virtuels pour travailler sur plusieurs sites http://doc.ubuntu-fr.org/tutoriel/virtualhosts_avec_apache2
- faire des raccourcis pour accéder plus facilement aux répertoires /var/www/… a adapter pour les utilisateurs devant travailler sur tel ou tel site.
- dans le cas de plusieurs utilisateurs devant travailler sur des sites distincts sans possibilité d'interférence, envisager l'utilisation des "Access Control List" (acl) sur les sous répertoires de /var/www
Alternativement, vous pouvez aussi utiliser la méthode ci dessous … chacun fait ce qu'il veut
Changer le répertoire WWW contenant mes sites Web
Tutoriel avancé : http://doc.ubuntu-fr.org/tutoriel/lamp_repertoires_de_travail
Afin de faciliter l'édition de vos fichiers (pouvoir y accéder facilement sans droits d'administration), vous pouvez créer un lien symbolique, utiliser un alias ou un serveur virtuel avec Apache.
Lien symbolique
La première solution consiste à créer dans le répertoire /var/www un lien symbolique vers votre répertoire dans votre /home qui vous servira au quotidien à positionner et modifier vos pages.
Voici le code à lancer dans votre terminal :
cd /var/www sudo ln -s /home/votre_identifiant/répertoire_pour_votre_site mon_site
Voilà, si vous accédez à votre http://localhost vous pouvez voir un nouveau répertoire qui porte le nom « mon_site » et qui pointe vers « /home/votre_identifiant/répertoire_pour_votre_site ».
Trop tard ?
Il suffit d'effacer le fichier créé par erreur :
sudo rm /var/www/mon_site
Alias
Apache2 dispose d'une fonctionnalité pour créer un alias, une sorte de lien symbolique, qui va pointer vers un autre répertoire (dans notre cas dans votre répertoire personnel).
Afin de créer cet alias, vous devez éditer le fichier /etc/apache2/sites-available/default avec les droits d'administration.
Ajoutez-y le code suivant :
Alias /mon_site/ "/home/votre_identifiant/répertoire_pour_votre_site" <Directory "/home/votre_identifiant/répertoire_pour_votre_site"> # vous pouvez rajouter vos options ici </Directory>
Une fois la modification effectuée et le fichier sauvegardé, il faut recharger la configuration d'apache pour que vos modifications soient prises en compte.
sudo /etc/init.d/apache2 reload
Voilà, si vous accédez à l'adresse http://localhost vous ne verrez pas de nouveau répertoire. C'est normal, par contre si vous tentez d'accéder à http://localhost/mon_site alors vous vous retrouverez dans "/home/votre_identifiant/répertoire_pour_votre_site".
sudo chmod -R 755 /home/votre_identifiant/répertoire_pour_votre_site
Logiquement, c'est déjà le cas. D'ailleurs, si votre lien ou votre alias fonctionne, aucune modification ne sera nécessaire, mais on ne sait jamais.
sudo mkdir /var/www/monsite sudo mount --bind ~/monsite /var/www/monsite
Le repertoire de développement de votre dossier personnel est maintenant accessible via /var/www/monsite. Il est aussi possible de rendre le lien permanent par /etc/fstab avec quelque chose comme ça:
/home/pascal/monsite /var/www/monsite none bind
Virtualhost
Suivez le tutoriel sur la création d'un VirtualHost avec le dossier de votre choix et placez-y vos fichiers.
Astuces, Problèmes
.htaccess
Pour que apache2 prenne en compte la présence d'un fichier .htaccess, il faut éditer le fichier /etc/apache2/sites-available/default et remplacer les deux 1ers AllowOverride None (dans les balises <Directory /> et <Directory /var/www/>) par AllowOverride All
Une fois fait, redémarrez Apache2.
php5: This module does not exist!
Si vous êtes dans ce cas:
sudo a2enmod php5 This module does not exist!
C'est juste que les fichiers php5.load et php5.conf n'existent pas. On va donc les créer ! ;)
Donc pour commencer, on va créer le fichier php5.load:
sudo gedit /etc/apache2/mods-available/php5.load
Et y taper :
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
Ensuite le fichier php5.conf:
sudo gedit /etc/apache2/mods-available/php5.conf
Et y taper:
<IfModule mod_php5.c> AddType application/x-httpd-php .php .phtml .php3 AddType application/x-httpd-php-source .phps </IfModule>
Il reste les liens à créer :
sudo ln -s /etc/apache2/mods-available/php5.load /etc/apache2/mods-enabled/php5.load sudo ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf
Et on finit par redémarrer Apache:
sudo /etc/init.d/apache2 restart
Perdu apache2.conf
Vous avez désinstallé apache2 avec la manipulation suivante :
sudo apt-get remove --purge apache2 sudo rm -rf /etc/apache2
Suite à celà vous avez voulu re-installer apache2 :
sudo apt-get install apache2
et vous n'arrivez plus à lancer apache.
En effet en faisant le 'rm -rf', vous avez perdu certain fichiers de configuration qui ne se sont pas re-installés (ex : apache2.conf). Pour rectifier la chose, suivre la procédure suivante :
sudo apt-get remove --purge apache2 apache2.2-common
et
sudo apt-get install apache2
Et tout rentrera dans l'ordre. ( Merci à ButterflyOfFire )
Supprimer Apache et mysql du démarrage
pour que les serveurs apache et mysql ne se lancent pas automatiquement au démarrage
dans le menu système > administration > services décochez les options des serveurs
Pour lancer les serveurs tapez les commandes:
sudo /etc/init.d/apache2 start sudo /etc/init.d/mysql start
ou créez un exécutable pour controller votre serveur apache2 et mysql en même temps : Créez un script exécutable lamp :
sudo nano /bin/lamp
contenant :
#!/bin/sh case "$1" in start) /etc/init.d/apache2 start /etc/init.d/mysql start ;; stop) /etc/init.d/apache2 stop /etc/init.d/mysql stop ;; reload) /etc/init.d/apache2 reload /etc/init.d/mysql reload ;; restart) /etc/init.d/apache2 restart /etc/init.d/mysql restart ;; *) echo "Usage: lamp {start|stop|restart|reload}" exit 1 ;; esac exit 0
Ne pas oublier de rendre le script exécutable :
sudo chmod +x /bin/lamp
À ce point vous pouvez respectivement démarrer, redémarrer, arrêter et recharger lamp à l'aide des commandes :
sudo lamp start sudo lamp restart sudo lamp stop sudo lamp reload
Conclusion
Vous devriez maintenant avoir un serveur Apache2 gérant le PHP et les bases de données MySQL.
Pour aller plus loin dans la configuration de votre serveur, visitez la page suivante : Serveur LAMP - Aller plus loin.
Si vous avez installé Lamp pour utiliser Drupal, visitez la page suivante : Drupal sous Lamp.
ScreenCast
- installer LAMP en vidéos (à diffuser sans restrictions )
Installer LAMP ~ 3 minutes
- 01-LAMP_details.ogg - 18.0 Mo
- 01-LAMP_details.avi - 19.5 Mo
Sécuriser Apache ~ 3 minutes
- 02-Securiser_apache2_details.ogg - 5.3 Mo
- 02-Securiser_apache2_details.avi - 5 Mo
Préserver ses données MySql ~ 2 minutes
- 03-Preserver_ses_donnees_details.ogg - 3.4 Mo
- 03-Preserver_ses_donnees_details.avi - 3.5 Mo
- (add-on Hardy - Apparmor en cours )
Répertoires de travail ~ 14 minutes
- 04-Environnement_de_travail.ogg - 21 Mo
- 04-Environnement_de_travail.avi - 39 Mo
Installer SuPhp
- À venir -
Installer ZendOptimizer ~ 5 minutes
- 06_Installer_ZendOptimizer_details.ogg - 10 Mo
- 06_Installer_ZendOptimizer_details.avi - 12 Mo
Contacter : McPeter pour un problème sur les vidéos
Augmenter les performance de votre site PHP
XCache est un accélérateur PHP. Il permet de mettre en cache le code PHP déjà compilé. Ceci évitera de recompiler les fichiers PHP à chaque fois, ce qui augmente de façon considérable les performances de votre site.
Contributeurs : M. DECLERCQ, _Enchained, rubika, McPeter, zedtux, xXKirastarotHXx, ALAYA, Philippe Vienne