J’ai récemment passé mon poste de développement de Debian Testing vers Ubuntu 8.10. Comme toute installation from scratch, il faut passer par la case configuration.

J’ai déjà expliqué comment modifier l’emplacement des données d’un serveur MySQL mais cette fois-ci on va aller encore plus loin :
- on ne va pas toucher aux fichiers de configuration par défaut
- on va pouvoir conserver toute notre configuration sur une partition séparée
- on va être tranquille pour les éventuelles futures réinstallations
C’est pas très compliqué à mettre en œuvre et au final, tout le monde y gagne !
Organisation du répertoire /home
Le titre de l’article le suggère bien, cet article se consacre à la configuration des serveurs et programmes suivants :
- Apache 2
- PHP 5
- MySQL 5
- AppArmor (installé et activé par défaut depuis Ubuntu 8.04)
Pour des raisons évidentes de facilité, j’ai donc créé un répertoire qui rassemble toutes mes configurations spécifiques. En voici son arborescence :
- ~/config
- /apache2
- sites-available
- 000-default-custom
- local.monprojet.com
- etc.
- sites-available
- /apparmor
- usr.sbin.mysqld-custom
- /mysql
- my-custom.cnf
- /php5
- php-custom.ini
- /apache2
Nous écrirons dans ces fichiers uniquement les points de configuration que l’on souhaite adapter. C’est plus simple à maintenir. Qui plus est, si les fichiers de configuration sont mis à jour par leur serveur respectif, nos fichiers resteront à l’abri.
Un des moto de Debian c’est la configuration à base de fichiers. Vous trouverez régulièrement des répertoires ayant un nom suivant le motif application.d. Donc plutôt que d’avoir 1 seul fichier de configuration, on a 1 fichier initial plus des configurations additionnelles dans ces fameux répertoires « .d ».
Configuration d’Apache

Pour Apache la démarche est la suivante :
- créer les Virtual Host dans son répertoire personnel
- lier les fichiers dans sites-available
- activer les sites à l’aide de la commande a2ensite
- recharger Apache
La seule étape par rapport à d’habitude c’est qu’on ne crée par les Virtual Host directement dans /etc/apache2/sites-available et qu’on les lie depuis notre répertoire personnel.
Admettons que je souhaite créer un Virtual Host pour une instance locale de mon blog. Je vais procéder ainsi :
- gedit ~/conf/apache2/sites-available/local.case.oncle-tom.net
J’y ai placé une configuration somme toute minimaliste :<VirtualHost *:80> ServerName local.case.oncle-tom.net DocumentRoot /home/oncletom/workspace/case.oncle-tom.net ErrorLog /var/log/apache2/error.case.oncle-tom.net.log LogLevel warn CustomLog /var/log/apache2/access.case.oncle-tom.net.log combined ServerSignature On </VirtualHost> - sudo ln -s ~/conf/apache2/sites-available/local.case.oncle-tom.net /etc/apache2/sites-available/local.case.oncle-tom.net
- sudo a2ensite local.case.oncle-tom.net
- sudo service apache2 reload
On se fendra de l’ajout d’un hôte local dans le fichiers hosts pour coller au plus près à l’instance de production. Toutefois je ne connais pas d’autre moyen que de modifier le fichier d’origine :-/ Si vous avez une solution je suis preneur.
Configuration de MySQL

Pour MySQL c’est un peu plus compliqué car on va également en profiter pour déplacer l’emplacement par défaut des données. Pourquoi ? Pour les placer sur une partition qui ne craindra pas les formattages et les réinstallation système.
Si vous aviez déjà suivi ma procédure de déplacement des données MySQL : oubliez là. Celle-ci est largement plus aboutie.
Avant de se jeter à corps perdu dans les manipulations, voici la démarche entreprise :
- créer le fichier de configuration MySQL
- créer le répertoire qui accueillera les données MySQL
- lier la base mysql d’origine
- modifier la configuration d’AppArmor
- recharger la configuration des serveurs AppArmor et MySQL
C’est déjà un peu plus long mais là encore, il n’y a pas grand chose à faire en fin de compte :
- gedit ~/conf/mysql/my-custom.cnf
On y indique le nouvel emplacement de ses données MySQL :[mysqld] datadir = /home/oncletom/Apps/mysql - mkdir /home/oncletom/Apps/mysql
sudo chown mysql:mysql /home/oncletom/Apps/mysql - ln -s /var/lib/mysql/mysql /home/oncletom/Apps/mysql/mysql
- sudo gedit /etc/apparmor.d/usr.bin.mysql
J’y ai remplacé/var/lib/mysql/ r, /var/lib/mysql/** rwk,par l’ancien chemin + le nouvel emplacement des données MySQL
/var/lib/mysql/ r, /var/lib/mysql/** rwk, /home/oncletom/Apps/mysql/ r, /home/oncletom/Apps/mysql/** rwk, - sudo service apparmor reload && sudo service mysql reload
Si vous avez bien suivi toutes mes explications, vous vous demanderez pourquoi j’ai modifié le profil existant de MySQL dans AppArmor au lieu de lier un nouveau profil ?
Je me suis rendu compte qu’au démarrage de l’OS, AppArmor ne chargeait pas le profil personnalisé et bloquait le démarrage de MySQL. J’ai créé un sujet sur Ubuntu Forums après une lecture de la documentation AppArmor mais pas de nouvelles. Là aussi je suis preneur car en relançant les serveurs à la main, tout fonctionne.
Ensuite à vous de repeupler vos bases de données à partir d’un dump. Si vous procédez à un déplacement des répertoires, n’oubliez pas de tout préserver : propriétaire et permissions ! Ça se passe avec l’option -a de cp par exemple.
Configuration de PHP

Fort heureusement pour PHP c’est plus simple puisqu’il n’y a qu’un seul petit lien symbolique à faire.
À noter que la configuration modifiée sera répercutée sur toutes les configurations de PHP, que ça soit pour Apache, en CLI ou CGI.
- gedit ~/conf/php/my-custom.ini
J’ai ai mis par exemple :memory_limit = 64M - sudo ln -s ~/conf/php/my-custom.ini /etc/php5/conf.d/my-custom.ini
Et voilà c’est tout pour PHP. Il faut bien entendu recharger votre serveur Web (Apache ou Lighttpd par exemple) pour qu’ils prennent en compte la modification.
Conclusion
J’ai déjà appliqué cette méthode par 2 fois et que dire si ce n’est que tout va plus vite ainsi !
Vos fichiers de configuration restent accessibles depuis votre gestionnaire de fichiers (pas besoin de passer en sudo pour sauvegarder les changements). Ils sont préservés de toute réinstallation impromptue.
Vous ne touchez que de manière minimaliste aux fichiers de configuration d’origine :
- /etc/hosts pour ajouter un nom d’hôte (utile seulement si vous ne souhaitez pas utiliser localhost)
- /etc/apparmor.d/usr.bin.mysql pour la raison évoquée plus haut … sinon on s’en serait passé
J’ai cherché à faire pareil avec phpmyadmin mais il ne semble pas y avoir de mécanisme de ce type. Dommage.
J’imagine qu’il doit y avoir des moyens similaires avec d’autres serveurs et d’autres langages. Vous procédez à un reparamétrage systématique ou bien vous utilisez une technique de ce genre ?




















Commentaires & rétroliens
Configuration d’Apache, MySQL et PHP à base de liens symboliques http://tinyurl.com/6rugjd
pour le fichier hosts, tu as toujours les interfaces type Système=>Administration=>Réseau
C’est plutôt bon à prendre ! Surtout pour moi qui crash tout le temps mes install d’Ubuntu…
Joli billet, à bookmarquer !
Par contre, je ne comprend pas l’intérêt de renseigner le fichier hosts, accès plus rapide à partir du serveur apache en lui-même, ou y-a-t-il une autre raison que j’ignore ?
@Thi3rry chais pas comment tu te débrouilles
@didrocks merci
Je me sers du fichier hosts pour déclarer des noms de domaine locaux du genre local.oncle-tom.net, local.case.oncle-tom.net. Comme ça j’ai un format d’URL identiques entre l’instance locale d’un projet et l’instance en ligne. Pour les projets où je m’en fiche je reste avec le localhost classique.
[...] importante : j’ai publié une version améliorée du déplacement des données d’un serveur MySQL. Je la recommande par rapport à cet article : elle implique moins de manipulations et est plus [...]
@Oncle Tom: Merci, très clair
j’ai 2 reùarques :
1. par rapport aux liens symboliques : je ne comprends pas trop l’utilisation que vous en faites ici (à moins que ce soit différent sous ubuntu par rapport a debian ce qui m’etonnerais, exemple pour php vous faites :
1. gedit ~/conf/php/my-custom.ini
J’ai ai mis par exemple :
memory_limit = 64M
2. sudo ln -s /etc/php5/conf.d/my-custom.ini ~/conf/php/my-custom.ini
ce qui reviant a ecraser ~/conf/php/my-custom.ini (que vous venez de créer par un lien symb vers /etc/php5/conf.d/my-custom.ini.
perso je ferais plutot :
sudo ln -s ~/conf/php/my-custom.ini /etc/php5/conf.d/my-custom.ini
ce qui revient a créer un lien symb (dans le repertoire de conf de php) vers votre fichier de conf personnel.
2. concernant Apache :
même remarque que pour les liens symboliques
et ensuite, pour ce que vous voulez faire, je n’utiliserais pas a2ensite (Apache2ENableSITE), cette commande crée un lien symb dans sites-enabled vers sites-available (donc pas besoin de faire ln -s dest src si on l’utilise) or dans votre cas, vous n’allez tout simplement plus utiliser sites-available d’apache mais plutot un repertoire dans votre home, dans ce cas je ferais :
1. gedit ~/conf/apache2/sites-available/local.case.oncle-tom.net
...
2. sudo ln -s ~/conf/apache2/sites-available/local.case.oncle-tom.net /etc/apache2/sites-enabled/local.case.oncle-tom.net
3. sudo service apache2 reload
on crée le fichier du vhost dans le home et on le link la où apache sait chercher
Pour les liens symboliques je m’emmêle toujours les pinceaux dans l’ordre des arguments. Le deuxième argument est effectivement la destination du lien symbolique (l’emplacement où il se trouvera).
C’est exact.
Pour l’a2ensite, j’y tiens pour éviter le côté « bricolage » et respecter la philosophie de fonctionnement. Je préfère activer et désactiver un site-available que systématiquement faire et défaire des liens symboliques.
Ça en devient transparent et on peut mixer les deux systèmes comme ça.
Bon après c’est une question de goûts et de couleurs
Bonjour,
tout d’abord un grand bravo pour les conseils donné sur ce site !!
J’ai une petite question concernant la méthode décrite pour créer un host virtuel pour apache 2.
J’ai bien suivi les explications ci-dessous, mais un point me parait obscur:
« On se fendra de l’ajout d’un hôte local dans le fichiers hosts pour coller au plus près à l’instance de production »
=> Pour moi ce n’est pas très clair
. Je suppose qu’il faut ajouter une ligne dans le fichier /etc/hosts mais je ne vois pas comment déclarer l’host virtuel dans ce fichier.
J’avais alors pensé à déclarer une ip virtuelle, j’ai alors rajouté dans /etc/hosts la ligne :
192.168.0.116 monsite.fr
Ensuite j’ai rajouté une nouvelle adresse ip à mon interface:
sudo ifconfig eth0:0 192.168.0.116
et là ça marche. Mais lors d’un redémarrage du PC, il faut que je tape ce code de manière systématique pour que ça marche
Mes questions sont donc les suivantes:
- Comment faire persister une adresse ip virtuelle sur le PC ?
- que faut-il ajouter dans /etc/hosts dans le cas ou notre fichier d’host virtuel commence par
Merci pour vos réponses
La modification du fichier
/etc/hostsest là juste pour éviter de tester tous mes sites en « localhost » et du coup, pour coller au plus près à la structure d’URL finale (en général, à la racine d’un nom de domaine).Il faut juste modifier le fichiers hosts, y’a pas de bidouille à faire côté réseau.
J’ai par exemple :
Pour rendre une IP persistente, il faut modifier le fichier
/etc/network/interfaceset y déclarer des interfaces virtuelles (comme fait précédemment mais uniquement pour la session courante) :Merci pour toutes ces explications, cela marche parfaitement maintenant
Répondre