Ça faisait un moment que je n’avais pas eu à configurer un serveur dédié pour de la production. L’occasion d’en faire un petit article, le but étant de faire un serveur très basique, sans gestion de boîte mails, sans LDAP, sans chroot, etc. Juste une base LAMP.
Ce serveur dédié a été choisi chez OVH. J’ai bien sûr demandé une Debian nue mais ça n’a pas vraiment été le cas. En fait, OVH livre une distribution Debian avec un noyau personnalisé et plusieurs outils installés par défaut. Suite à une mésaventure lors du passage de Etch à Lenny sur un de mes dédiés, j’ai décidé de ne plus laisser le noyau d’OVH mais d’installer un noyau standard. Si cette manipulation vous intéresse, voyez ce billet. Sinon ce qui suit fonctionne quand même parfaitement. Ces infos sont désormais obsolètes, GRUB2 semble parfaitement gérer les noyaux OVH automatiquement.
Les outils
La première chose que je fais en arrivant sur une installation neuve, c’est de configurer le raccourcit ll afin d’avoir un ls détaillé et en couleur. J’ai déjà fais un billet là-dessus que vous pourrez trouver à cette adresse.
La deuxième chose est de configurer un accès par clé privée ssh. L’article est à cet endroit.
Ceci fait, nous allons faire une première mise à jour du système:
> apt-get update > apt-get -u dist-upgrade
Vient ensuite l’installation de quelques outils. Chez moi ils étaient déjà pré-installés mais s’ils ne le sont pas, faites-le:
- aptitude (permet de gérer les packages dans un mode semi-graphique)
- vim (qui est une version un peu plus évoluée de vi et qui permet notamment la coloration synthaxique)
- screen (permet de créer des consoles virtuelles supplémentaires, voir ce billet)
Pour activer la coloration syntaxique dans vim il faut taper la commande
:syn on
Si vous voulez qu’elle soit permanente, créez le fichier .vimrc dans votre répertoire utilisateur et insérez la ligne de commande:
syn on
Déplacer le dossier /var
Je pense que la première chose à faire, avant de se retrouver avec des daemons qui tournent de tous les côtés, c’est de déplacer le dossier /var. En effet les partitions système ne sont pas très grosses chez OVH et il arrivera un moment où les logs et les bases de données vont saturer cette partition et amener à un plantage du serveur. Etant donné qu’on a de la place dans /home, on va y déplacer le dossier /var
> cp -Rp var/ /home/ > mv /var/ /var.old/ > ln -s /home/var/ var
Installation de MySQL
rien de plus simple:
> apt-get install mysql-server
Dans la dernière version que j’ai installé, MySQL me propose désormais de paramétrer le mot de passe root du serveur. Je vous encourage fortement à le faire dès maintenant. Si vous ne le faites pas, vous pourrez le faire plus tard mais le plus tôt est le mieux car à ce niveau, ce n’est plus un trou de sécu, c’est la porte ouverte à toutes les fenêtres 😉
Installation d’Apache 2.2
Pareil, trop dur Debian:
> apt-get install apache2-mpm-prefork
Notez que l’on installe ce paquet là d’Apache car le module PHP5 en dépend. Il ne fonctionne pas avec le paquet classique d’Apache 2.2.
Installation de PHP 5
> apt-get install libapache2-mod-php5
On va devoir également installer quelques modules supplémentaires pour PHP:
> apt-get install php5-cli > apt-get install php5-gd > apt-get install php5-mcrypt > apt-get install php5-mysql
sont un minimum je pense. On peut facilement voir la liste des modules dispos en faisant un petit:
> dpkg -l *php5*
A ce niveau on peut déjà faire quelques petits tests. Déjà il faut redémarrer Apache:
> /etc/init.d/apache2 restart
Puis les tests : taper l’adresse du serveur dans votre navigateur web. Vous devriez avoir le fameux « It Works! » d’Apache.
Dans le répertoire /var/www créez un fichier info.php dans lequel vous allez mettre le code suivant:
1 2 3 | <?php phpinfo(); ?> |
Pareil, dans votre navigateur tapez : http://monserver/info.php. Normalement la config de PHP apparaît.
Configuration
maintenant que l’environnement LAMP est installé, on va faire un peu de configuration.
Tout d’abord pour MySQL, de base il n’y a rien de spécial à toucher. Cependant si vous désirez personnaliser votre installation, vous pouvez le faire en rajoutant un fichier dans /etc/mysql/conf.d. Toutes les options que vous y insèrerez seront prises en compte automatiquement.
PHP
Pour PHP, il faut faire la configuration classique de php.ini qui se trouve dans /etc/php5/apache2/php.ini
Ce fichier est configuré de façon très basique. Tel quel il fonctionne, il y a cependant moyen de l’améliorer un petit peu:
Si vous n’avez pas de scripts PHP balisés par <? et ?>, mettez l’option short_open_tag à Off. Cela obligera les scripts PHP à être balisés par <?php et ?>. Pourquoi? A partir de PHP6 PHP 5.4, le balisage court n’existe plus. Même si vous installez une version inférieure, autant se mettre à la norme dès maintenant.
Si vous voulez désactiver certaines fonctions par mesure de sécurité (exec par exemple), vous pouvez les rajouter à l’option disable_functions en les séparant par des virgules.
En production, on conseille de passer l’option display_errors à Off car cela peu donner des indications importantes à une personne mal intentionnée. Par contre on passera le paramètre log_errors à On pour que les messages d’erreur soient enregistrés dans un fichier. Par défaut les erreurs seront enregistrées dans le fichier de log d’erreur d’Apache.
Si vous installez une version inférieure à PHP 5.4, laissez bien le paramètre register_globals à Off. Si vous avez de vieux sites nécessitant qu’il soit à On, il est temps de les corriger 🙂
Vous pouvez également décommenter la ligne:
;include_path = ".:/usr/share/php"
Cela vous permettra de protéger certains fichiers d’inclusion en les déportant de l’espace accessible par le web.
D’autres billets sur la configuration de PHP :
Apache
Passons maintenant à la configuration d’Apache. Tout se passe dans le répertoire /etc/apache2/
La première chose que nous allons faire c’est activer les modules dont nous avons besoin. La gestion des modules Apache à la sauce Debian est plutôt bien foutue: Dans le répertoire mods-available se trouvent tous les modules disponibles pour Apache. Le répertoire mods-enabled contient les modules activés. Si on veut activer un module, on ne va pas copier le module en question du répertoire mods-available au répertoire mods-enabled, mais plutôt faire un lien symbolique dans le répertoire mods-enabled vers les modules que l’on veut activer. Par exemple, pour activer le mod_rewrite, se placer dans le répertoire mods-enabled et taper la commande:
> ln -s ../mods-available/rewrite.load rewrite.load
Faire cela pour tous les modules que vous voulez activer. Si par exemple vous voulez activer le module userdir, n’oubliez pas qu’il y a deux liens à faire: un pour le .load et un pour le .conf
Les autres éléments de configuration se trouvent dans le répertoire /etc/apache2/conf.d. A l’image de ce qui se fait pour MySQL, tout fichier créé dans ce répertoire et contenant des directives sera pris en compte et écrasera la configuration d’origine. De base il y a un fichier charset qui contient une directive
AddDefaultCharset UTF-8
Qui active le jeu de caractère UTF-8 par défaut. Si vous préférez activer l’ISO-8859-1 par défaut, remplacez par:
AddDefaultCharset on
On va également créer un fichier directoryindex contenant la directive suivante:
DirectoryIndex index.html index.htm index.cgi index.pl index.php index.xhtml
Qui permet d’accepter une page index.php ou index.cgi comme page d’accueil pour un site
Si vous voulez accepter les CGI, il faut egalement créer un fichier cgi.conf dans lequel on va mettre:
AddHandler cgi-script .pl AddHandler cgi-script .cgi
Ce qui va permettre d’accepeter les fichier .pl et .cgi comme CGI
Vous pouvez bien sûr continuer comme ça à paramétrer tout ce que vous voulez.
D’autres billets sur la configuration d’apache :
Installation de vlogger : on décharge Apache de la gestion des logs.
Installation de ProFTPD
On est presque prêt à accueillir nos premiers sites. Mais pour cela il faut les uploader sur le serveur et pour ça il nous faut un serveur FTP. En voici un : ProFTPD
> apt-get install proftpd
On vous demandera si vous voulez le lancer sous inetd ou indépendamment, choisissez la deuxième option.
Après installation, le serveur est déjà prêt à l’utilisation. Si vous voulez changer la configuration, vous pouvez le faire en modifiant le fichier /etc/proftpd/proftpd.conf, mais on peut déjà exploiter le serveur tel quel.
Il n’y a juste qu’une chose à modifier dans la configuration du serveur. Il faut rajouter les lignes suivantes:
DefaultRoot ~ IdentLookups off UseReverseDNS off
La première instruction permet de bloquer chaque utilisateur dans son répertoire et évite qu’il se balade sur tout le serveur. Les deuxièmes et troisièmes instructions désactivent des traitements DNS de proftpd et permettent une connexion rapide au serveur (essayez les deux et voyez la différence).
Note : Si en redémarrant le demon, vous avez un message d’erreur du style:
mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache support not enabled
Editez le fichier /etc/proftpd/modules.conf et commentez la ligne:
LoadModule mod_tls_memcache.c
Maintenant, il ne nous reste plus que 2 choses à faire: créer un utilisateur FTP avec son espace, et configurer le domaine associé sous Apache pour qu’il pointe à cet endroit.
Pour créer un utilisateur FTP, rien de plus simple, on va créer un utilisateur système:
> addgroup nom_user > adduser --ingroup nom_user nom_user
Cela va créer le répertoire personnel de l’utilisateur dans le répertoire /home
Lors de la création de cet utilisateur, vous devrez saisir des renseignements. Le plus important est bien sûr le mot de passe, le reste n’est pas important.
On peut désormais configurer notre client FTP pour se connecter:
host: IP_serveur
login: nom_user
mot de passe : pass_user
Une fois connecté, on crée un répertoire www qui contiendra le site et on peu mettre une page d’accueil quelconque pour faire nos tests.
Tester avec le module userdir
Le module userdir permet de se connecter à l’espace web d’un utilisateur du système sans le nom de domaine. L’url sera de la forme:
http://ip_serveur/~nom_utilisateur/
Pour pouvoir faire cela, il faut dans un premier temps activer le module userdir dans Apache (voir plus haut). Puis dans le répertoire /etc/apache2/conf.d créer un fichier userdir contenant les commandes suivantes:
<IfModule mod_userdir.c> UserDir www UserDir disabled root <Directory /home/*/www> AllowOverride FileInfo AuthConfig Limit Options Indexes SymLinksIfOwnerMatch IncludesNoExec </Directory> </IfModule>
On relance Apache et normalement si vous faites l’adresse indiquée plus haut, vous devriez voir votre page uploadée tout à l’heure.
Note: Si vous utilisez le module rewrite, je vous déconseille fortement d’utiliser l’option MultiViews de la commande Options car personnellement j’ai eu des interférences entre les deux.
Configuration d’un domaine:
Maintenant, on va configurer Apache pour que mondomaine.com pointe sur /home/nom_user/www.
Dans le répertoire /etc/apache2/sites-available créer le fichier mondomaine.com. Y mettre les instructions suivantes:
<VirtualHost *> ServerName www.mondomaine.com ServerAlias mondomaine.com www.mondomaine.com ServerAdmin webmaster@mondomaine.com DocumentRoot /home/nom_utilisateur/www ScriptAlias /cgi/ "/home/nom_utilisateur/cgi-bin/" <Directory /home/nom_utilisateur/www> Options -Indexes </Directory> php_admin_value open_basedir "/tmp:/var/lib/php5:/home/nom_utilisateur/www" </VirtualHost>
Vous devez bien sûr encore une fois remplacer les paramètres mondomaine.com et nom_utilisateur par vos valeurs.
Enregistrez, rechargez Apache et le tour est joué.
Note: il est important de ne pas oublier le paramètre open_basedir de PHP, cela empêche les scripts PHP de pouvoir lire n’importe quel fichier du serveur en le cloisonnant dans le répertoire www/
Installation de phpMyAdmin
Forcément, si vous avez installé MySQL, il vous faut phpMyAdmin. Il y a deux écoles:
- Rester à la sauce Debian et installer le package phpMyAdmin
- L’installer à la main
Les deux solutions ont leurs avantages et inconvénients:
Installer le package est simple et la maintenance aussi puisqu’un simple apt-get permet une mise à jour. Par contre les versions ne sont pas à jour. Au moment de la rédaction de ce billet, la version actuelle est en 2.11.9 alors que le package est en 2.9.1. Pour cette raison je préfère une installation manuelle. Par contre cela m’oblige à me tenir au courant des mises à jour et à les faire manuellement.
Généralement j’installe phpMyAdmin dans le répertoire /var/www. Ainsi on peut accéder à phpMyAdmin par l’adresse: http://ip_serveur/phpMyAdmin
L’avantage de cette méthode est qu’il est facile de créer des alias ou des redirections de tous les noms de domaine qui seront installés sur le serveur afin qu’ils aient une url de phpMyAdmin simple. Par exemple une directive:
Alias /phpMyAdmin /var/www/phpMyAdmin/
permet une redirection transparente.
une fois phpMyAdmin installé, la première chose à faire est de s’y logguer afin de paramétrer le mot de passe root de MySQL. Si vous ne l’avez pas fait lors de l’installation c’est le moment où jamais !!
Envoyer des mails avec PHP
C’est la dernière chose qui nous manque avant d’avoir un serveur de production minimal potable. Pour cela on va installer exim4:
> apt-get install exim4
puis pour la configuration:
> dpkg-reconfigure exim4-config
les options:
- séparer la configuration dans plusieurs fichiers -> Non
- Type de configuration -> Distribution directe par SMTP
- Nom de courriel du système -> Mettez le nom de domaine principal du serveur ou laissez par défaut
- Liste d’adresses IP -> laissez 127.0.0.1 pour le moment
- Autres destinations -> Vide
- Domaines à relayer -> Vide
- Machines à relayer -> Vide
- Faut-il minimiser les requêtes DNS -> Non
- Méthode de distribution du courrier local -> laissez « mbox »
Théoriquement, les emails envoyés de PHP fonctionnent désormais.
[Dernière modification le 06/07/2012]
Mots-clefs : apache, configuration, Exim4, mysql, ovh, php, phpMyAdmin, ProFTPD, serveur dédié
Merci beaucoup pour cet article, très instructif ! 🙂