Présentation

Plutôt qu’utiliser l’hébergement personnel sur Free, j’ai décidé d’héberger mes sites sur mon propre serveur Web. Pour cela, j’ai créé une nouvelle VM sur mon serveur de virtualisation.

Je détaille ici l’ensemble des opérations et manipulations effectuées à partir d’une fresh install de Debian Wheezy.

S’agissant d’un serveur Web ne disposant pas d’une adresse IP publique, la configuration de celui-ci restera assez sommaire, pour la gestion des différents sites. Le serveur sera accessible via un simple PAT (Port Address Translation) sur le port 80.


Prérequis d’installation

A terme, les arborescences des différents sites seront sur un partage du NAS. Il faudra bien veillez à gérer les droits des utilisateurs, notamment en créant un groupe spécifique. Cette section sera mise à jour lorsque le partage sera effectif et fonctionnel.

L’installation se fait sur un debian Wheezy fraîchement installée et à jour.

J’installe ensuite un certain nombre de paquets nécessaires


aptitude update
aptitude upgrade
aptitude install mysql-server apache2 apache2-mpm-prefork php5 php5-mysql memcached php5-memcached libcache-memcached-perl memcached php5-fpm php-pear sendmail-bin sendmail unzip proftpd
 

A noter que :
- l’installation du paquet apache2-mpm-prefork supprime le paquet apache2-mpm-worker installé par défaut par apache.
- L’installation de mysql-server demande un mot de passe pour le compter superutilisateur
- Memcached est un système pour augmenter la vitesse de réponse des sites web créés à partir de bases de données en stockant les informations en RAM.

Je vérifie que le serveur est maintenant bien en écoute sur le port 80.


tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          28886891    4989/apache2
 


Quelques tests

Lors que je lance un test de connexion au serveur en HTTP, j’arrive bien sur la page par défaut du serveur.


It works!

This is the default web page for this server.

The web server software is running but no content has been added, yet.
 

La configuration du site par défaut est déclarée dans le fichier /etc/apache2/sites-enabled/000-default.
Il y est notamment défini un fichier index.html qui est présent dans le dossier /var/www/index.html

Je créé le fichier /var/www/test.php avec le contenu suivant :


		 ?php
		phpinfo();
		?
 

J’ouvre une nouvelle page HTML avec l’URL suivante http://Adresse_IP_Serveur/test.php.
J’accède à une nouvelle page m’affichant le détail de la configuration PHP du serveur.

A priori, à ce niveau tout est fonctionnel. je peux donc continuer.


Configuration de Apache

Un peu coup de tunning sur apache :


a2enmod rewrite
a2enmod deflate
 

La commande a2enmod permet d’activer des modules.

- Le module mod_rewrite permet la réécriture des URLs. Cela permet de faire croire à l’internaute qu’il se trouve sur une page X.php alors que la page réelle est par exemple Z.php?param=X. Cela améliore le référencement dans les moteurs de recherche et augmente légèrement la sécurité des sites Web.

- Le module mod_deflate fournit les filtres DEFLATE permettant à la sortie du serveur d’être compressée avant d’être envoyée au navigateur sur le réseau. Ce qui apporte une économie de bande passante pouvant aller parfois jusqu’à 80%, une légère consommation en plus du processeur ainsi que de la mémoire est à prévoir.


root@web3:/# a2enmod deflate
Module deflate already enabled
root@web3:~# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  service apache2 restart
root@web3:~#
root@web3:~#   service apache2 restart
[ ok ] Restarting web server: apache2 ... waiting .
 

Un petit restart d’apache pour finaliser.

On va maintenant loguer les logs PHP.


mkdir /var/log/php
chown www-data /var/log/php
 

Ne pas oublier de changer les droits pour rendre le fichier de logs inscriptible par Apache (user www-data).

Puis éditer le fichier de configuration de PHP « etc/php5/apache2/php.ini »
pour ajouter l’instruction suivante :


error_log = /var/log/php/php_errors.log
 

Il faut gérer la rotation de ce fichier de logs, en créant le fichier « /etc/logrotate.d/php »


/var/log/php/php_errors.log {
 weekly
 missingok
 rotate 4
 notifempty
 create
 }
 

Et un petit restart de apache.


/etc/init.d/apache2 restart
 

Normalement chacun des sites devrait avoir sa propre arborescence dans le répertoire /var/www. Par défaut, c’est ce répertoire qui est racine du site par défaut. On va modifier cette configuration.

Création d’un nouveau dossier qui sera le répertoire du site par défaut


root@web3:/var/www# mkdir default-site
 

On déplace les fichiers index.html et /test.php. dans ce nouveau dossier.


root@web3:/var/www# mv index.html default-site/
root@web3:/var/www# mv test.php default-site/
 

Il faut maintenant mettre à jour le fichier de configuration du site par défaut pour changer les directives documentRoot et Directory avec le nouveau chemin.


root@web3:/var/www# vi /etc/apache2/sites-enabled/000-default
 

Un petit restart de apache pour finaliser la configuration


root@web3:~#   service apache2 restart
[ ok ] Restarting web server: apache2 ... waiting .
 

Des nouveaux tests vers les URL précédemment testées sont toujours OK. Les modifications ont donc bien été prise en compte.


Gestion des vHost

Ou plutôt non-gestion des vHosts… Comme indiqué en préalable, le serveur WEB ne dispose pas d’une interface publique et se trouve derrière une FreeBoite. J’utilise du PAT pour rediriger les flux http vers le serveur. En conséquence, il semble que je peux pas utiliser les vHost pour héberger différents sites.

Du coup, je vais donc créer différents sites dans l’arborescence par défaut. Ainsi sur le Web, chaque site sera accessible par une URL du type « http://Adresse_IP_Serveur/DOSSIER ». Ce n’est pas très sexy…

Sur mon hébergeur DNS (GANDI), je vais mettre en place une redirection web dite transparente.


 test 	transparent 	http://IP_PUBLIQUE/toto
 

Concrètement en tapant dans la barre d’adresse l’URL suivante : http://test.mondomaine.com, c’est comme si je tapais http://IP_PUBLIQUE/toto. Cela me fait arriver sur le dossier toto positionné dans le répertoire « /var/www/default-site/toto » et le fichier index sera lu. Sur la barre adresse du navigateur, il sera affiché http://test.mondomaine.com et non l’IP publique du serveur.

Dans la continuité de ces remarques, il faudra veiller à modifier le fichier index par défaut renvoyé par le serveur pour toutes les connexions arrivant sur le serveur qui seront automatiquement renvoyées sur le vHost par défaut…


Configuration mysql

Il faut maintenant créer la database sur MySQL qui sera utilisée par les différentes instances de WordPress. J’utilise les paramètres suivants :
Username: wordpress
Password: wordpress
Database name: wordpress


# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'wordpress';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wordpress.* to wordpress@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
 


Tunning PHP

C’est un peu exagéré de parler de tuning PHP alors qu’un seul paramétre va être changé. :)

Dans le fichier /etc/php5/apache2/php.ini il faut changer la valeur du paramètre « upload_max_filesize » de 2 à 8.


upload_max_filesize = 8M
 


Configuration FTP

J’utilise proftp comme serveur FTP qui est assez simple à configurer. Pour la gestion des ssites et des contenus, il faudra déclarer un user par site et définir le dossier par défaut de cet utilisateur comme étant la racine du dossier web.

La configuration fonctionnelle des utilisateurs est la suivante :


alice:x:20010:10001:,,,:/var/www/default-site/toto:/bin/sh
bob:x:20011:10001:ftp users,,,:/var/www/default-site/titi:/bin/sh
 

A noter les ID élevés de ces comptes pour être sur de pouvoir identifier rapidement ces comptes. Ils sont associés à un groupe nouvellement créé avec un indice élevé lui aussi. Pour pouvoir utiliser ces compte via un client FTP il faut que le shell soit activé. Pas très sécurisé, mais je n’ai pas encore regardé pourquoi cela est nécessaire.

Évidemment il faut aussi ajouter ces user dans le groupe www-data pour qu’ils bénéficient des même droits que l’user www-data.

Incidemment , il ne faut pas oublier de donner la propriété de l’arborescence Web au groupe www-data.


Installation et configuration de WordPress

Le serveur Web étant maintenant fonctionnel, on peut installer WordPress. Il existe la possibilité de gérer du multisite à partir d’une seule interface. Lors de mes précédents tests, ce n’était pas trop concluant, peut-être à cause des problématiques réseau… Du coup, j’installe un WordPress par site et je les gérerai de façon unitaire ; je n’ai pas non plus 36 000 sites. :)

Pour chaque site wordpress que je veux avoir, je créé donc un dossier dans le répertorie par défaut « /var/www/default-site/ » et je crée un utilisateur spécifique.

Je me positionne dans le dossier cible.


cd /var/www/default-site/WP01
wget http://wordpress.org/latest.zip
unzip latest.zip

Un nouveau dossier wordpress est créé et tous les fichiers s’y trouvent. Je déplace tout le contenu à la racine et supprime ensuite le dossier wordpress.

Pour finaliser l’installation il suffit de se loguer sur l’interface Web et de suivre les instructions.

Avec cette méthode, le WordPress est en anglais. Pour le franciser, il faut récupérer la derneire version de WP francisé sur le site http://fr.wordpress.org/

Dans le fichier de configruation « wp-config.php », il faut modifier le paramètre langue.


		define ('WPLANG', '');

Il faut remplacer le contenu par ceci pour passer en français :


		define ('WPLANG', 'fr_FR');

Il reste à copier le dossier « ~/wordpress/wp-content/languages » récupéré dans l’archive dans le dossier « ~/wp-content » du site.

Pour installer un second wordpress, il faut créer un second répertoire dans votre dossier web qui contiendra ce nouveau blog. Ensuite, on copie dans ce second répertoire les fichiers d’une nouvelle installation de WordPress. On récupérer le fichier « wp-config.php » dans le répertoire qui contient le premier blog et on le copie dans le répertoire du second blog.

Il reste à éditer ce fichier pour modifier le préfixe qui sera utilisé dans la base de données pour distinguer les différentes installations WordPress.


/**
* WordPress Database Table prefix.
*
* You can have multiple installations in one database if you give each a unique
* prefix. Only numbers, letters, and underscores please!
*/
$table_prefix  = 'wp_';

Ici, le préfixe de la première installation « wp_ » est remplacé par le préfixe « xp_ ».


/**
* WordPress Database Table prefix.
*
* You can have multiple installations in one database if you give each a unique
* prefix. Only numbers, letters, and underscores please!
*/
$table_prefix  = xp_';

Sources :

http://linuxconfig.org/wordpress-installation-ubuntu-linux-apache-mysql

http://www.dvda.fr/2013/11/04/installer-serveur-web-sous-debian-7-wheezy-lamp/

http://installer-wordpress.blogspot.fr/2012/04/installer-plusieurs-blogs-wordpress-sur.html

http://www.vulgarisation-informatique.com/installer-serveur-lamp-debian.php

http://olange.developpez.com/articles/debian/installation-serveur-dedie/

http://doc.ubuntu-fr.org/installer_un_serveur_debian

Trackback

no comment until now

Add your comment now