Installer Un Serveur Web Sous Debian 7 Wheezy (lamp)
Edit du 14/07/2014 : visiblement le problème d’accès en SFTP venait d’un bug entre Filezilla et VSFTPS. Problème disparu avec la dernière mise à jour.
https://forum.filezilla-project.org/viewtopic.php?p=90179#p90179
Edit du 06/03/2014 : après quelques mois d’utilisation notamment avec des sites WordPress – assez gourmands en ressources – et un plugin de gestion de cache, cette installation sur un VPS tient bien la route et s’avère légère à administrer. Je ne regrette pas le choix de l’installation manuelle.
Voici une petite méthode d’installation d’un serveur Web complet, valable autant pour du développement que de la production sur un serveur dédié ou un VPS (Virtual Private Server). Elle est basée sur une distribution Linux Debian Wheezy (Debian 7) mais peut probablement être facilement utilisée sur une distribution Ubuntu de dernière génération, cette dernière étant basée sur Debian et ayant conservé de nombreuses similitudes avec son modèle.
Je me suis évidemment inspiré de quelques source présentes dans l’offre disponible – voire la jungle – des documentation en ligne dont les références seront indiquées en fin d’article.
Pourquoi ce guide d’installation manuelle de LAMP ?
Il existe des solutions permettant d’installer un serveur LAMP (Linux Apache MySQL PHP 5.4, voir NGNIX, MariaDB, php-FPM, PHP 5.5, etc.) à l’aide de scripts automatisant la procédure. Ils sont probablement très intéressants, ça n’est pas l’objet de cet article, qui a été écrit après que j’aie essayé la solution Virtualmin, qui est très bien, et testé les scripts automatiques, qui m’ont simplement laissé l’impression de ne pas savoir ce que j’avais fait ou installé, et donc vers quoi chercher en cas de problème.
Il y a aussi le plaisir de mettre en place un serveur Web pas-à-pas en buttant sur des erreurs et questionnements, en fouillant le Web à la recherche de solutions, apprenant des choses ou découvrant des bugs documentés m’ayant orienté vers d’autres choix.
Avant de commencer : les scripts d’installation automatiques
Ma procédure n’installe pas de gestionnaire graphique comme Webmin et Virtualmin, c’est un choix pour cet exemple. Si vous souhaitez travailler principalement avec Virtualmin, je vous recommande d’utiliser le script d’installation automatisé pour Virtualmin.
Virtualmin
Installation d’un serveur basé sur Webmin et Virtualmin.
http://virtualmin.com/download.html#gpl
Les scripts automatiques :
Tuxlite, script d’intallation automatique pour Debian et Ubuntu
http://tuxlite.com/
Page Git : https://github.com/Mins/TuxLite
Minstall, script d’intallation automatique pour Debian et Ubuntu, mais il n’est pas à jour pour les dernières version.
https://github.com/KnightSwarm/Minstall
Un site proposant des informations pour l’installer : http://www.lowendguide.com/3/database/introduction-to-minstall/
XAMPP
XAMPP, que je n’ai pas eu l’occasion d’essayer mais propose un choix très riche d’applications à installer, pour Windows, Linux et Mac, soit en environnement de développement (Windows par exemple, si vous n’utilisez pas un serveur local sous Linux ou un instance VMWare) ou de production.
http://www.apachefriends.org/fr/xampp-linux.html
Installer un serveur Web pas à pas
Acteurs principaux : Apache, MySQL, PHP, Exim4, PHPMyAdmin, ProFTPd.
C’est parti !
On suppose que vous avez un serveur fraîchement installé en Debian de dernière version. On commence à mettre à jour les paquets du serveur :
aptitude update && aptitude upgrade
updatedb
Si la commande updatedb ne répond pas, elle n’est peut-être pas installée. C’est plus que très pratique de l’avoir.
aptitute install mlocate
updatedb
On installe ntp (Network Time Protocole) et on règle la zone géographique du serveur pour que tout le monde soit bien à l’heure (et oui).
aptitude install ntp
dpkg-reconfigure tzdata
Eventuellement, on redémarre le service CRON qui gère les actions programmées.
service cron restart
Ou on reboot carrément
reboot
Ajouter un utilisateur, notamment pour la connexion SSH qui ne se fera plus directement en root à partir de maintenant.
adduser dominique
Selon votre préférence, pour éditer les fichiers de configuration vous utilisez peut-être nano ou Vim.
aptitude install vim
Edition du fichier de configuration du serveur SSH
vim /etc/ssh/sshd_config
Optimisation de la sécurité.
PermitRootLogin no
X11Forwarding no
Port 2022
Puis :
service ssh restart
Vous pouvez choisir de modifier le nom de votre machine, indiquez le nom de votre machine :
vim /etc/hostname
vim /etc/hosts
Installation d’un serveur de mail (SMTP) pour permettre au serveur d’envoyer ne serait-ce que les mails des formulaires de sites Web.
aptitude install exim4
Lors de la configuration, choisir : internet site.
dpkg-reconfigure exim4-config
Votre système va générer des emails internes pour root ou autre, le mieux est de les rediriger vers votre compte utilisateur, vous pouvez ainsi recevoir ces mails sur une adresse externe :
vim /etc/aliases
Ajouter en bas de fichier :
dominique: votreemail@gmail.com
Rafraîchissement des alias :
newaliases
C’est pas le tout, on install le serveur MySQL
aptitude install mysql-server
Vous pouvez avoir rencontré un problème lors de l’installation (plantage au moment d’indiquer le mot de passe root MySQL ?) et vous retrouver coincé avec un paquet en cours d’installation et des message d’erreur du genre « Impossible de verrouiller /var/lib/dpkg/lock ». Si c’est le cas, n’indiquez aucun mot de passe, vous le ferez lors de l’étape suivante de sécurisation.
Débloquer un crash lors de l’installation des paquets via aptitude (« impossible de verrouiller /var/lib/dpkg/lock ») :
killall aptitude
Sécuriser l’installation de MySQL :
mysql_secure_installation
Intallation d’Apache à la sauce pontikis.net :
aptitude install apache2 apache2-mpm-prefork
a2enmod rewrite
a2enmod deflate
On configure un rien :
vim /etc/apache2/ports.conf
En changeant ceci :
NameVirtualHost ADRESSE_IP_DE_VOTRE_SERVEUR:80
Optionnel : la gestion des quotas.
aptitude install quotatool
Pas optionnel, PHP
aptitude install php5
(Il faut rendre le fichier de logs inscriptible par Apache)
mkdir /var/log/php
chown www-data /var/log/php
Puis éditer le fichier de configuration.
vim /etc/php5/apache2/php.ini
Ajouter :
error_log = /var/log/php/php_errors.log
Créer un fichier pour le système de rotation des logs :
vim /etc/logrotate.d/php
Contenu :
/var/log/php/php_errors.log { weekly missingok rotate 4 notifempty create }
Ici on a choisi d’installe le driver MySQL natif :
aptitude install php5-mysqlnd
L’extension PHP AdoDB, PHP GD
aptitude install php5-adodb
aptitude install php5-gd
Configuration de mbstring :
vim /etc/php5/conf.d/mbstring-settings.ini
Indiquer :
[mbstring] mbstring.language = French mbstring.internal_encoding = UTF-8 mbstring.encoding_translation = On mbstring.http_input = UTF-8,SJIS,EUC-JP mbstring.http_output = UTF-8 mbstring.detect_order = UTF-8,ASCII,JIS,SJIS,EUC-JP mbstring.substitute_character = none mbstring.func_overload = 0
Optimisation de la sécurité de PHP,
vim /etc/php5/conf.d/security.ini
Avec ces instructions à modifier :
allow_url_include = Off allow_url_fopen = Off session.use_only_cookies = 1 session.cookie_httponly = 1 expose_php = Off display_errors = Off register_globals = Off disable_functions = escapeshellarg, escapeshellcmd,passthru, proc_close, proc_get_status, proc_nice, proc_open,proc_terminate
On relance Apache, c’est toujours intéressant de savoir si on ne s’est pas trompé à une étape plutôt qu’à la toute fin…
service apache2 restart
On installe Memcached
aptitude install memcached php5-memcached
On relance Apache, pareil.
service apache2 restart
PHPMyAdmin, installation, suppression du répertoire d’installation, et sécurisation de l’accès.
aptitude install phpmyadmin
rm -rf /usr/share/phpmyadmin/setup
vim /etc/phpmyadmin/apache.conf
On cherche et on remplace l’alias par un nom qui vous parle mais pas trop facile à deviner
Alias /mon-super-acces-a-phpmyadmin /usr/share/phpmyadmin
Activer le SSL sur le domaine par défaut pour PHPMyAdmin
a2enmod ssl
a2ensite default-ssl
service apache2 restart
Forcer PHPMyAdmin à passer en SSL, c’est-à-dire sur une adresse httpS://
vim /etc/phpmyadmin/config.inc.php
Ajouter en bas de fichier :
$cfg['ForceSSL'] = true;
On redémarre
service apache2 restart
Normalement, maintenant que vous avez relancé Apache, PHPMyAdmin est accessible à l’adresse :
https://VOTRE-SERVEUR/mon-super-acces-a-phpmyadmin/
ou encore
httpS://ADRESSE_IP_DE_VOTRE_SERVEUR/mon-super-acces-a-phpmyadmin/
Il est normal que vous ayez un message hyper flippant de votre navigateur Web comme, il faut ajouter le site puisque c’est le vôtre, et roule. De toute façon, SSL et PGP sont craqués depuis belle lurette par le NSA.
Un serveur FTP, c’est pratique.
aptitude install proftpd
vim /etc/proftpd/proftpd.conf
On rajoute en bas de fichier :
<Global> DefaultRoot ~ </Global>
Si on veut du SFTP (FTP sécurisé dans un tunnel SSH) pour Filezilla, par exemple, histoire de ne pas tout communiquer en clair :
vim /etc/proftpd/conf.d/sftp.conf
Et coller :
<IfModule mod_sftp.c> <VirtualHost 0.0.0.0 > SFTPEngine on SFTPLog /var/log/proftpd/sftp.log AllowOverwrite on # Configure the server to listen on the normal SSH2 port, port 22 Port 2222 # Configure both the RSA and DSA host keys, using the same host key # files that OpenSSH uses. SFTPHostKey /etc/ssh/ssh_host_rsa_key SFTPHostKey /etc/ssh/ssh_host_dsa_key # Configure the file used for comparing authorized public keys of users. SFTPAuthorizedUserKeys file:~/.sftp/authorized_keys # Enable compression SFTPCompression delayed # Allow the same number of authentication attempts as OpenSSH. # # It is recommended that you explicitly configure MaxLoginAttempts # for your SSH2/SFTP instance to be higher than the normal # MaxLoginAttempts value for FTP, as there are more ways to authenticate # using SSH2. MaxLoginAttempts 6 </VirtualHost> </IfModule>
Puis,
service proftpd restart
On peut avoir un message d’avertissement à propos de memcache,mais ça doit tourner.
A ce stade de l’installation, vous pouvez créer des utilisateurs (avec adduser par exemple), comme dominique tout à l’heure. En se connectant en (S)FTP au serveur avec son identifiant + mot de passe (n’oubliez pas de mettre le port 2222 en SFTP, comme dans votre configuration), on arrivera directement dans son répertoire utilisateur.
/home/dominique
On peut maintenant essayer de lui créer un premier site (VirtualHost sous Apache) :
vim /etc/apache2/sites-available/dominique.conf
Coller ceci en adaptant pour votre propre cas :
# # Optionnel : une redirection de dvda.fr vers www.dvda.fr # <VirtualHost *> ServerAdmin webmaster@dvda.fr ServerName dvda.fr Redirect permanent / https://www.dvda.fr </VirtualHost> # # www.dvda.fr # <VirtualHost ADRESSE_IP_DE_VOTRE_SERVEUR:80> ServerName www.dvda.fr ServerAdmin webmaster@dvda.fr DocumentRoot /home/dominique/dvda.fr/www DirectoryIndex index.html index.htm index.php index.php4 index.php5 <Directory /home/dominique/dvda.fr/www> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/dvda.fr_error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/dvda.fr_access.log combined ErrorDocument 404 /404/ SetOutputFilter DEFLATE SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|ico|png)$ \ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ \no-gzip dont-vary SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html </VirtualHost>
On relance le serveur Web :
service apache2 reload
On corrige une petite indélicatesse d’Apache si vous n’aimez pas que n’importe quel nom de domaine pointant vers votre serveur arrive, non pas sur la page par défaut d’Apache (dans /var/www) mais sur votre premier VirtualHost :
vim /etc/apache2/sites-available/default
Remplacer
<VirtualHost *:80>
Par :
<VirtualHost ADRESSE_IP_DE_VOTRE_SERVEUR:80>
service apache2 reload
Vous avez un serveur Web. Plus qu’à créer votre site et à l’héberger !
Références :
http://www.pontikis.net/blog/debian-wheezy-web-server-setup (principalement)
Le Barzic Frédéric a écrit :
Pour info, pour éviter la notice lors du restart du service proftpd il suffit de commenter la ligne 90 du /etc/proftpd/modules.conf
http://redmine.froxlor.org/projects/froxlor/repository/revisions/b5a999ae6b3fdce2e47e0c839785ec9b7e7c37b2/diff/templates/misc/configfiles/debian_wheezy/proftpd/etc_proftpd_modules.conf
Publié le 13 février 2014 à 19:48 ¶
D.VDA a écrit :
Merci pour l’info,
Ce qui donne à la ligne 90, commenter la ligne ou remplacer :
LoadModule mod_tls_memcache.c
Par :
# this is disabled because wheezy’s proftpd does not have memcache compiled,
# see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=707680
#LoadModule mod_tls_memcache.c
Publié le 6 mars 2014 à 19:23 ¶
erik a écrit :
Bonjour, super le tuto par contre quelques points de blocage.
1. Je pense que ce n’est pas vim /etc/apache2/sites-available/dominique.conf qu’il faut editer poue ajouter votre site mais plutot vim /etc/apache2/sites-available/dvda.fr
2. si je me deconnectes du ssh, et que je me reconnectes donc, je suis obligé de le faire avec le nouveau user, car le root étant désactivé, ben c plus possible, ok. Mais lorsque je me connecte avec mon nouveau user celui-ci n’étant pas un root et bien je ne peu plus editer de fichier conf ou autre et les enregistré car j’ai pas le droit, donc impossible de modifier ou créer un nouveau vhost. Lorsque je fais un sudo -s avec mot de pass root et bien erreur : erik is not in the sudoers file. This incident will be reported.
3. j’ai bien effectué le changement suivant afin de faire pointer mon site, mais rien le domaine que j’ai créé, dans le cas de votre exemple dvda.fr, et bien cela pointe toujours sur le rep par defaut d’apache et pas dans le rep du site.
4. impossible de me connecter en sftp, cela fonctionne pas, j’ai pourtant bien fait tout comme il faut.
Il peut d’aide serait la bienvenue.
Merci
Publié le 26 mars 2014 à 22:33 ¶
D.VDA a écrit :
Bonjour,
1) Vous pouvez appeler le fichier comme vous voulez
/etc/apache2/sites-available/dvda.fr.conf
/etc/apache2/sites-available/toto.conf
Ce qui compte c’est son contenu, vous pouvez y mettre la configuration d’un ou de plusieurs sites.
Si on veut être orthodoxe, on fait un fichier de configuration de serveur virtuel par fichier en nommant le fichier comme le site qu’on souhaite configurer :
/etc/apache2/sites-available/dvda.fr.conf
/etc/apache2/sites-available/www.dvda.fr.conf
/etc/apache2/sites-available/sousdomaine.dvda.fr.conf
2) Pour passer en root la commande est : su
3) Je ne l’ai peut-être pas noté, il faut activer le serveur virtuel :
a2ensite dvda.fr.conf (le nom de votre fichier de conf)
service apache2 reload (recharger la config Apache)
Publié le 27 mars 2014 à 7:34 ¶
franck a écrit :
bravo pour ce tuto dont j’ai utilisé la partie ssl pour phpldapadmin.
A ce sujet, j’utilise un port virtuel de redirection pour me connecter sur ma machine à distance via ssh et putty .
Tous les accès virtuels fonctionnent à travers le tunnel (par exemple webmin, etc …) .
Par contre impossible de me connecter en ssl sur https://monserver/phpldapadmin .
Auriez-vous une idée ?
Publié le 2 avril 2014 à 8:55 ¶
D.VDA a écrit :
Alors déjà je ne suis pas sysadmin et ai des compétences limités en administration de serveur Web. Qu’entendez-vous par port virtuel (un port genre http://url:8080) ? Il faudrait aussi voir quelle est l’erreur de connexion, en regardant les logs Apache pour commencer. Le fichier de configuration Apache du site en SSL est activé et Apache relancé ?
Publié le 2 avril 2014 à 13:58 ¶
Stoots a écrit :
Bonjour, j’ai un petit soucis:
dans fillezilla (SFTP)
la date s affiche devant tous mes fichier et dossier, une idée ?
Publié le 15 avril 2014 à 17:46 ¶
D.VDA a écrit :
Bonjour,
J’ai eu le même bug, sous Filezilla en SFTP, si vous passez en FTP non crypté normalement le bug n’apparaît plus, indiquant que le problème vient probablement du SSL.
En revanche, après mise à jour du paquet openssl et redémarrage du service proftp, le bug persiste.
Je n’ai pas regardé du côté de PROFTP ni de Filezilla et j’ignore si cela peut avoir un lien avec la faille SSL « Heartbleed » (lors du correctif par exemple) ; je suis preneur de toute info car pour le moment c’est FTP tout court…
Publié le 15 avril 2014 à 18:22 ¶
Stoots a écrit :
Rebonjour,
merci pour la réponse, j’ai un peu chercher et rien trouver du coter de filezilla.
je suis plus DevWeb que AdminReseau mais je posterais les résultats si je parviens a résoudre le problème
Publié le 15 avril 2014 à 21:24 ¶
Vinyz a écrit :
Bonjour,
super tuto qui fonctionne à merveille en ce qui me concerne. Merci beaucoup pour votre aide si précieuse !!!
Publié le 16 août 2014 à 9:31 ¶
Hypathie a écrit :
Bonjour,
merci pour ce tuto.
Selon mon expérience de sa mise en oeuvre, j’ai dû corriger quelque point.
Avec » vim /etc/apache2/sites-available/n’importe-quel-nom » , le retour de :
« a2ensite n’importe-quel-nom »
a été :
« Reloading web server config: apache2Warning: DocumentRoot [/home/n’importe-quel-nom/dvda.fr/www] does not exist »
Donc j’ai fait :
« cd /home/n’importe-quel-nom/ && mkdir -p dvda.fr/www/
Puis dans le navigateur « https/ip-server/n’importe-quel-nom »
Renvoyait « erreur 404 »
Donc : (en root)
« chown -R root:www-data /home/n’importe-quel-nom/ && chmod -R 755 /home/n’importe-quel-nom/ »
Après quoi « service apache2 reload » ne renvoyait plus aucune erreur et une page d’index.php placée dans « /home/n’importe-quel-nom/dvda.fr/www/ » peut s’afficher correctement directement le navigateur.
Par contre, je ne suis pas très sure quant au risque pour la sécurité avec les 755.
Quand pensez-vous ?
Merci encore
Publié le 21 septembre 2014 à 8:13 ¶
Dominique a écrit :
Bonjour, en effet il faut que le répertoire www vers lequel on fait pointer existe. En revanche avec le chown -R root:www-data je ne vois pas ce que vous cherchez à faire si ce n’est rendre root propriétaire des fichiers à la place du user. Si ça n’est pas le cas (on dira que le user est « toto »), un chown -R toto:toto sur le répertoire /home/toto et un chmod 775 ?
Publié le 16 octobre 2014 à 7:46 ¶