Tag

apache

Browsing

Aujourd'hui, je vous donne les quelques news techniques du site.

Serveur Kimsufi 500G

Cela fait presque un an que SkyMinds.Net tourne sur un serveur dédié hébergé chez OVH. Le serveur était un Kimsufi avec 500 Go de disque dur. Quelques jours seulement après le transfert du site, OVH annonce le Kimsufi avec 250 Go mais... à moitié prix ! Et on ne peut rendre un serveur Kimsufi pour un autre, il s'agit de deux achats séparés.

Au niveau des performances, je dirai que mon Kimsufi 500G n'était pas terrible : il était constamment surchargé et j'avais l'impression de devoir relancer les services régulièrement pour assurer la disponibilité du service. Pas cool du tout.

Tiens, Debian Squeeze est sorti ce week-end ! Du coup, j'en ai profité pour mettre à jour le serveur du site : nous sommes donc passés de Debian Lenny (5.0.8) à Debian Squeeze (6.0).

Lenny prend donc sa retraite au bout de 2 ans. Cela nous permet également de mettre à jour environ 400 paquets dont les différents serveurs.

La mise à jour prend quelques minutes sur la Kimsufi mais comme j'ai eu quelques erreurs (avec MySQL), je vous donne la marche à suivre.

Mise à jour des sources

On sauvegarde le fichier des sources :

cp /etc/apt/sources.list /etc/apt/sources.list-lenny

On remplace toutes les occurences de "lenny" en "squeeze" dans un nouveau fichier :

sed 's/lenny/squeeze/' /etc/apt/sources.list > /etc/apt/sources.list-squeeze

Ce nouveau fichier devient notre fichier source :

cp /etc/apt/sources.list-squeeze /etc/apt/sources.list

On met à jour les paquets apt et dpkg :

apt-get install apt dpkg

Voilà, il ne reste plus qu'à lancer l'installation.

Toujours à la recherche de ce qui peut optimiser le chargement du site et soulager le serveur, je vous donne ma configuration du fichier htaccess en ce qui concerne les permalinks (ou permaliens en français correct) de WordPress.

Code de base WordPress 3.x

Voici le code htaccess standard de WordPress 3.x :

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Il y a eu pas mal de changements sur le site ce mois-ci :

  1. Changement de serveur : au revoir l'hébergement mutualisé, bonjour le serveur dédié !
  2. Dans la mesure du possible, j'ai mis tous les javascripts dans les pieds de pages. Il a fallu que je change la manière d'appeler mes scripts : pour la petite histoire, il faut d'abord appeler JQuery et ensuite seulement appeler les scripts qui en dépendent. Seuls 2 plugins du site, indépendants de JQuery sont encore appelés dans le header. Il faudrait réécrire quelques parties du code, je le ferais peut-être un jour (procrastination quand tu nous tiens !).
  3. Correction du code javascript de la page Thunderstruck.
  4. J'ai beaucoup corrigé ma feuille de style en m'aidant de Google Page Speed : certaines déclarations étaient beaucoup trop gourmandes et pas optimisées. En ajoutant des classes précises aux éléments, on améliore le temps du rendu de la page.
  5. Les liens en bas d'articles pour partager vers Facebook et Twitter ont été retirés, vu que personne ne les a utilisés depuis 6 mois.
  6. Une semaine après la migration, je me suis rendu compte au détour d'un fichier log que le fichier de backup du site dont je me suis servi pour la migration n'était pas complet... il manquait 15% des images ! J'avais fait ce backup juste avant de changer les DNS et visiblement l'ancien serveur était surchargé et a zappé la fin du répertoire. C'est corrigé. Cela rappelle l'importance d'avoir des backups réguliers. De temps en temps, il est bon de vérifier leur intégrité.
  7. Mise en place de mod_headers et mod_expires sous Apache. C'est la première fois que cela fonctionne correctement, j'en parlerai dans un prochain tuto.
  8. Correction d'un bug d'affichage sur les pages tags où certains liens apparaissaient en clair.

Vous ne l'avez peut-être pas remarqué mais le site a été transféré sur un nouveau serveur : changement d'hébergeur donc. Le site quitte l'Angleterre pour venir s'installer en France, chez OVH. D'ailleurs, si vous pouvez lire cet article, cela veut dire que la propagation DNS est terminée et que je n'ai pas fait trop de bêtises.

dedicated-server

Le serveur

Le serveur est un serveur dédié à base de Celeron 1.2 Ghz avec 2 Go de RAM donc cela devrait changer d'un hébergement mutualisé avec des centaines de sites hébergés sur le même serveur. Là, je suis tout seul : il y a le site bien sûr mais aussi tous les services connexes tels que le serveur FTP, le serveur de mail, le serveur DNS etc. Tout cela tourne sur la même machine donc finalement, ce qui sur le papier a l'air très bien l'est un peu moins une fois que tout est configuré.

A la demande de Bashogun, voici un petit guide qui dévoile les étapes de la création et l'hébergement d'un site Internet. Ce guide est plutôt général et ne se veut pas exhaustif, c'est plus une suite d'étapes pour gagner du temps pour monter et mettre rapidement un site en ligne.

you are here

Sachez que la première chose à faire est définir vos besoins : quel type de site allez-vous créer, à quel public s'adresse-t-il, quel langage (code du site) allez-vous utiliser, quelles sont les fonctionnalités à mettre en oeuvre, combien de pages pensez-vous créer dès le départ, nom du site, design (couleurs, logo)... Tout doit commencer avec un papier et un crayon : couchez par écrit ce que voulez puis commencez à dessiner à main levée votre design. Faîtes un plan. Je vous promets que vous ne le regretterez pas, c'est du temps gagné pour la suite.

lampQui dit changement de système d'exploitation dit réinstallation au propre des programmes !

Voici comment installer Apache, PHP et MySQL sous Ubuntu, c'est à dire un véritable système LAMP. L'installation et la configuration prennent environ 10 minutes, c'est très simple, beaucoup moins alambiqué que sous Windows.

Ce tutoriel est un peu mon carnet de bord, c'est comme cela que j'ai configuré ma machine, étapes par étapes.

J'ai effectué plusieurs corrections et mises à jour sur le site ce mois-ci :

  1. tout d'abord, le menu a été remanié : il n'utilise plus de code javascript pour corriger les offsets selon le navigateur et a été réécrit en CSS (pur). Les gens qui n'ont pas javascript activé pourront donc l'utiliser et cela fait un fichier .js de moins à charger sur chacune des pages du site.
  2. la page archives a disparu pour des raisons pratiques. Au départ, cela permettait de rendre compte de l'activité du site. Aujourd'hui, une telle page nécessite plus de 11 000 requêtes SQL, ce qui a légèrement tendance à tuer MySQL. Je l'ai donc remplacée par un champs de recherche. Normalement, avec le menu, les catégories et la zone de recherche, le contenu devrait être suffisamment accessible. Nous avons eu le même problème avec la sitemap, il y a quelques mois.
  3. toutes les images et script venant de top-sites tiers ont été enlevées. Cela n'apporte pas vraiment de visiteurs réguliers et lorsque cela rame chez eux, cela rame ici aussi. Maintenant je préfère externaliser au minimum.
  4. j'ai commencé à remplacer certaines images par des sprites, c'est à dire une grande image qui en contient plusieurs. Cela permet de charger une seule image au lieu de plusieurs et accélère le site. Je reviendrai là-dessus dans un futur tutoriel.
  5. la feuille de style a encore été optimisée...
  6. j'ai réussi à convaincre mon hébergeur qu'il serait vraiment excellent d'activer mod_deflate sur le serveur. J'y reviendrai ultérieurement, ce module Apache est vraiment excellent.
  7. des liens pour afficher les articles sur Facebook et Twitter ont été rajoutés au bas de chaque article, afin de diffuser l'information plus facilement. Si vous connaissez d'autres services utiles, je vous écoute :)

Il y a quelques jours, mon hébergeur a mis à jour son serveur Apache qui est passé de la version 1.3.37 à la version 2.2.6. Gros changement donc mais dont je ne me suis réellement rendu compte que lorsque j'ai voulu poster un nouvel article sur le site. Je me suis trouvé nez à nez avec cette erreur :

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 139816 bytes) in /home/cpanel/public_html/wp-includes/cache.php on line 51

Petit mail au support qui, une fois n'est pas coutume, ne sait pas comment résoudre le problème. Etrange. On voit bien que c'est un problème de mémoire pourtant : Apache 2 serait-il plus gourmand qu'Apache 1 ? 8 Mo seraient-ils insuffisants ?

Depuis que mon hébergeur a mis ses serveurs en cluster et exécute PHP en CGI et non comme module Apache, certaines fonctions de WordPress ne se comportent pas correctement, notamment les éditeurs de fichiers. En effet, ces derniers semblent être devenus incapables de modifier les fichiers sans provoquer une erreur HTTP 406 :

HTTP Error 406 - Not acceptable
An appropriate representation of the requested resource /XYZ.php could not be found on this server.

Après quelques recherches, il semblerait que ce soit les filtres du mod_security d'Apache qui, trop restrictifs, empêchent les éditeurs... d'éditer !

La solution consiste donc à désactiver mod_security dans le répertoire où se trouvent les éditeurs (/wp-admin/ dans le cas de WordPress) :

  1. Créez un fichier .htaccess
  2. Editez le fichier avec ces instructions :
    
    SecFilterEngine Off
    SecFilterScanPOST Off
    
    
  3. Sauvegardez : vos éditeurs devraient maintenant fonctionner sans aucune erreur.

Notez que j'ai pris WordPress comme exemple mais cela résout les problèmes d'erreurs 406 quelle que soit l'application utilisée (blog, CMS...).

Mieux vaut créer le .htaccess dans le répertoire qui en a besoin : il est inutile voire déconseillé de désactiver mod_security sur l'ensemble d'un domaine pour des raisons évidentes de sécurité. A utiliser là où il y a besoin donc.

Apache 2.052, PHP 5.0.3 et MySQL 4.1.9 sont désormais installés. A noter : une erreur jusque là inconnue lorsque j'ai voulu me connecter à MySQL : " Unable to load dynamic library './php_mysql.dll' ". Après quelques recherches, il apparaît que PHP5 ne supporte plus les librairies MySQL par défaut : c'est désormais à l'administrateur de définir l'inclusion des librairies dans le php.ini comme ceci :

  • Ouvrir C:\php\php.ini, rechercher "extension_dir"
  • Mofifier sa valeur en : extension_dir = c:/php/ext/
  • 20 lignes plus bas environ, ajouter ou décommenter ces deux lignes :
    extension=php_mysqli.dll
    extension=php_mysql.dll
  • Copier la librairie C:\php\libmysql.dll sous C:\Windows

Notez qu'il y a deux extensions à inclure : php_mysqli.dll s'applique à MySQL > 4.1 et php_mysql.dll aux versions inférieures. J'ai loadé les deux pour être tranquille. Redémarrez tous les serveurs, il ne devrait plus y avoir de problèmes.

Aujourd'hui : opération mise à jour d'Apache et de PHP. MySQL a déjà été mis à jour. Je commence par désinstaller Apache (2.0.48) et à installer la nouvelle version (2.0.52) : à la fin de l'install, plusieurs erreurs comme "unable to listen for connections on 0.0.0.0 on port 80", "unable to access logs", "cannot find service "Apache2"". Cela commence bien... j'enchaaîne sur une suite désinstall, reboot, réinstall. Nada. Je cherche à ouvrir le fichier de configuration : accès refusé. Attends un peu : ni une ni deux je lui colle un full désinstallation dans les gencives plus l'installation d'Apache 1.3.33 dans la foulée. Pour une opération mise à jour c'est vrai que ça claque là : une belle régression pour commencer !

Installation de PHP 4.3.10RC2 sans aucun problème en 3 étapes :

  1. Edition de httpd.conf :

    ################################################
    AddType application/x-httpd-php .php
    # For PHP 4
    LoadModule php4_module "c:/php/sapi/php4apache.dll"
    ################################################

  2. Copie de la librairie php4ts.dll à la racine du serveur Apache
  3. Copie du php.ini dans le répertoire Windows

Cela m'apprendra à tout vouloir mettre à jour. N'empêche que j'aimerais bien savoir pourquoi Apache 2.0.52 (version msi windows) refuse catégoriquement d'installer le service et d'ouvrir le port 80 alors qu'il le faisait très bien auparavant. Je testerai cala dans la prochaine version. J'ai aussi un problème de javascript qui fonctionne pourtant très bien en live.

Rapport de faute d’orthographe

Le texte suivant sera envoyé à nos rédacteurs :