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.

Installer Un Serveur Web Sous Debian 7 Wheezy (LAMP)

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 / http://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)

https://wiki.debian.org/LaMp

https://wiki.archlinux.org/index.php/LAMP

Commentaires

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

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

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

  4. 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)

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

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

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

  8. 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…

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

  10. Vinyz a écrit :

    Bonjour,

    super tuto qui fonctionne à merveille en ce qui me concerne. Merci beaucoup pour votre aide si précieuse !!!

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

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

Laisser un commentaire

Votre email ne sera pas publié. Les champs requis sont marqués *

*

*