ubuntu-fr

Communauté francophone des utilisateurs d'Ubuntu

Planet Ubuntu-fr - Dedibox

Fil des billets

dimanche, août 17 2008

Gravatar de tigrouOptimiser son site (sous Ubuntu et ailleurs...) : Compresser avec gzip via tigrou

Notes aux grincheux de service : la manipulation exposée dans ce billet fonctionne évidemment ailleurs que sous Ubuntu (en fait partout où Apache2 est installable), néanmoins elle a été testée et mise en place sous Ubuntu et fonctionne telle quelle avec l'installation d'Apache2 par défaut sur cette distribution.

Après avoir appliqué la règle 3 en ajoutant et configurant l'entête Expires , passons à la règle 4 du Livre High Performances Web Sites (ou des recommandations de performances Yahoo! ) en compressant avec gzip les données transmises par le serveur web, ici Apache2 . Comme son nom le suggère, cette règle vise à limiter au maximum le poids des contenus distribués en réduisant de près de 70% la taille des fichiers textes. Cela permet d'accélérer le premier chargement du site avant la mise en cache par le navigateur. Pour cela, on peut configurer Apache2 pour utiliser le mod_deflate qui va se charger de compresser ce qui peut l'être pour un sur coût CPU faible.

La première étape consiste à activer ce module ainsi que le module headers avec a2enmod et à recharger Apache pour prendre en compte ce nouveau module :

$ sudo a2enmod deflate
$ sudo a2enmod headers
$ sudo /etc/init.d/apache2 reload

Le module headers est nécessaire pour envoyer des entêtes spécifiques aux proxy caches de manière à ne pas envoyer de documents compressés à certains navigateurs buggés mais populaires...

La configuration par défaut, stockée dans le fichier /etc/apache2/mods-available/deflate.conf, fait en sorte de compresser les fichiers texte brut, HTML et XML ce qui est déjà bien, mais on peut aller plus loin en traitant tout ce qui est texte. Il est en effet inutile de compresser les images (JPG, PNG, GIF, ...), les PDF et bien d'autres types de fichier qui sont déjà compressés par nature. J'utilise la configuration suivante dans /etc/apache2/conf.d/deflate pour compresser en plus les feuilles de style et les scripts Javascript tout évitant certains bugs connus de quelques navigateurs.

 AddOutputFilterByType DEFLATE text/plain text/css application/x-javascript text/xml text/html
 
# gestion des navigateurs buggés
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
 
# gestion des proxy caches
Header  append Vary User-Agent

Pour faire prendre en compte cette configuration, il ne reste plus qu'à recharger Apache et le tour est joué.

lundi, août 11 2008

Gravatar de tigrouOptimiser son site sous Ubuntu : Configurer l'en-tête Expires via tigrou

Lire un livre sur comment optimiser son site web c'est bien, appliquer les conseils qui s'y trouvent c'est encore mieux. Parmi les 14 bonnes pratiques, 3 peuvent être appliquées très rapidement au niveau système en quelques lignes de commande et de configuration du serveur web pour un résultat quasi immédiat :

Dans un premier temps, je vais m'intéresser à la règle 3, je suppose que vous avez déjà un serveur web Apache2 actif servant des fichiers (peu importe la technologie autour). La configuration suivante est utilisée sur ma Dedibox sous Ubuntu avec Apache2 mais doit pouvoir s'appliquer à peu près partout.

Ajoutez et configurez l'en-tête Expires

L'en-tête Expires indique quand un élément devra expirer du cache du navigateur; mettre une date d'expiration dans un futur lointain permet de maximiser l'utilisation du cache navigateur et donc d'éviter les téléchargements inutiles, ce qui est particulièrement utile pour les éléments statiques (images, feuilles de style, ...) qui ont tendances à changer ... peu fréquemment mais à ralentir l'affichage de la page si ils ne sont pas en cache. Pour ces éléments, il est possible de configurer l'expiration dans Apache avec le module expires . Pour les pages dynamiques ou éléments générés dynamiquement, c'est au script d'envoyer l'en-tête et sa valeur adéquate par exemple avec la fonction header() en PHP .

L'activation du module pour Apache2, il faut utiliser a2enmod avec la ligne suivante et ensuite recharger apache :

$ sudo a2enmod expires
$ sudo /etc/init.d/apache2 reload

Il reste alors à configurer ce module. Je stocke la configuration de ce module dans le fichier /etc/apache2/conf.d/expires dont voici le détail :

ExpiresActive On
ExpiresByType image/gif "access plus 30 days"
ExpiresByType image/jpg "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType image/x-icon "access plus 30 days"
ExpiresByType text/css "access plus 30 days"
ExpiresByType application/x-javascript "access plus 30 days"

Tous les éléments statiques des types listés expirent 30 jours après leur premier téléchargement. Après un nouveau reload d'Apache, vous devriez voir apparaître l'en-tête Expires par exemple avec l'extension Firebug de Firefox au premier chargement des éléments de la page. Ensuite le navigateur utilisera son cache ce qui devrait accélérer l'affichage des pages suivantes utilisant les mêmes éléments.

lundi, juillet 7 2008

Gravatar de mumblyUbuntu, Dedibox, ISPConfig et IPV6 via mumbly

J’ai passé depuis hier mon serveur en “ipv6 ready !”.
Voila ma démarche pour un serveur dédié de type Dedibox avec un panel d’administration web ISPConfig et une distribution Ubuntu Hardy Heron 8.04 server.

1- Le cas Dedibox :

Il semble qu’il y ait une petit soucis avec les dedibox (bug kernel ?) et l’ipv6.
Les différentes manip proposées ne semblent pas efficaces dans mon cas. Heureusement, j’ai pu quand même m’en sortir en “fabricant” mon IPv6.

2- ISPConfig et Apache2 :

ISPConfig n’est pas “compatible” IPV6 à la base il faut donc ruser un peu et faire un peu de config “à la débrouille”.
L’astuce consiste à inclure un fichier Vhosts_ipv6.conf suuplémentaire dans le répertoire /vhosts. Il s’agit en fait d’une copie de Vhosts_ispconfig.conf mais en changeant toutes les occurrences d’adresses ipv4 en adresse ipv6 entre brackets (Exemple : [2a01:e0b:1:24:240:63ff:fee8:b6b]). Il ne faut biensur pas oublier de rajouter un Include dans le fichier apache2.conf, en fin de fichier. (Include /etc/apache2/vhosts/Vhosts_ipv6.conf)

Début du fichier Vhosts_ipv6.conf :
###################################
#
# ISPConfig vHost Configuration File
#         Version 1.0
#
###################################
#
NameVirtualHost [2a01:e0b:1:24:240:63ff:fee8:b6b]:80
<VirtualHost [2a01:e0b:1:24:240:63ff:fee8:b6b]:80>
ServerName localhost
ServerAdmin root@localhost
DocumentRoot /var/www/sharedip
</VirtualHost>
#
#
######################################
# Vhost: www.monsiteamoi.net:80
######################################
#
#
<VirtualHost [2a01:e0b:1:24:240:63ff:fee8:b6b]:80>
<Directory “/var/www/web85/web”>
Options Indexes Includes FollowSymLinks MultiViews
IndexOptions FancyIndexing
</Directory>
ServerName www.monsiteamoi.net:80
ServerAdmin webmaster@monsiteamoi.net
DocumentRoot /var/www/web85/web
ServerAlias monsiteamoi.net monsiteamoi.fr.nf
DirectoryIndex index.html index.php index.php3 index.cgi
Alias  /cgi-bin/ /var/www/web85/cgi-bin/
AddHandler cgi-script .cgi
AddHandler cgi-script .pl
ErrorLog /var/www/web85/log/error.log
AddType application/x-httpd-php .php .php3 .php4 .php5
php_admin_flag safe_mode Off
Alias /error/ “/var/www/web85/web/error/”
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
AliasMatch ^/~([^/]+)(/(.*))? /var/www/web85/user/$1/web/$3
AliasMatch ^/users/([^/]+)(/(.*))? /var/www/web85/user/$1/web/$3
</VirtualHost>
#
#

… et pareil pour chaque site.

3- Le serveur DNS Bind
Il vous faudra, à la main, compléter chaque fichier du répertoire /var/lib/named/etc/bind. Tout du moins, il vous faudra comléter tous les fichiers des domaines que vous souhaitez passer en ipv6.

Exemple du fichier /var/lib/named/etc/bind/pri.monsiteamoi.net :
$TTL        86400
@       IN      SOA     ns1.monserveurdns.org. hostmaster.monisteamoi.net. (
2008050902       ; serial, todays date + todays serial #
28800              ; refresh, seconds
7200              ; retry, seconds
604800              ; expire, seconds
86400 )            ; minimum, seconds
;
NS      ns1.monserveurdns.org.              ; Inet Address of name server 1
NS      ns1.monserveurdns2.net.              ; Inet Address of name server 2
;

MX      10 mail.monsiteamoi.net.

monsiteamoi.net.      A        88.191.24.9
mail       A       88.191.24.9
www       A       88.191.24.9
ftp       A       88.191.24.9

monsiteamoi.net.       TXT  “v=spf1 a mx ptr ~all”

;;;; MAKE MANUAL ENTRIES BELOW THIS LINE! ;;;;

monsiteamoi.net.      AAAA        2a01:e0b:1:24:240:63ff:fee8:b6b
www       AAAA      2a01:e0b:1:24:240:63ff:fee8:b6b
mail    AAAA      2a01:e0b:1:24:240:63ff:fee8:b6b
ftp     AAAA      2a01:e0b:1:24:240:63ff:fee8:b6b

Si votre domaine est géré intégralement par Gandi.net ou un registrar, il ne vous reste plus qu’à configurer l’ipv6.
Exemple sur gandi.net :
Paramètres techniques/Serveurs de nom/Gérer les zones
Interface “Normale” et Ajouter un enregistrement.
Type : AAAA
Nom : www
Valeur : 2a01:e0b:1:24:240:63ff:fee8:b6b

N’oubliez pas de mettre une ligne :
@ AAAA 2a01:e0b:1:24:240:63ff:fee8:b6b

Il ne reste plus qu’à redémarrer ISPConfig :
$ sudo /etc/init.d/ispconfig_server restart
D’ici une heure ou deux, si vous faites :
$ host monsiteamoi.net
… vous devriez voir apparaitre une ligne ipv6 :
monsiteamoi.net has address 88.191.24.9
monsiteamoi.net has IPv6 address 2a01:e0b:1:24:240:63ff:fee8:b6b
monsiteamoi.net mail is handled by 10 mail.monsiteamoi.net.

ET VOILA !

Pour aller plus loin …

mercredi, février 13 2008

Gravatar de mumblyFaille de sécurité du kernel Linux : le cas Dedibox + Ubuntu via mumbly

Rappel des faits :
Une importante faille de sécurité a été mise en évidence le week-end dernier sur l’ensemble des noyaux Linux 2.6 récents (2.6.17 à 2.6.24.1). Elle permet à un utilisateur local d’obtenir les privilèges root. Il est fortement conseillé de mettre à jour votre noyau sur votre Dédibox.
Suivez le guide !


Téléchargez le nouveau kernel sur le ftp de dedibox sur ftp://ftp.dedibox.fr/pub/dedibox/kernel/r8-1/C7-X86-32bits/kernel-image-2.6.24.2-c7-r8-1.deb

Puis installez-le :
sudo dpkg -i kernel-image-2.6.24.2-c7-r8-1.deb

Relancez grub :
sudo update-grub

ATTENTION : NE REBOOTEZ SURTOUT PAS ! Sous peine de voir votre dedibox inutilisable !

Si toutefois vous aviez rebooté et que vous êtes bloqué (La dedibox ne redémarre pas), suivez les étapes du point 1 pour “réparer” votre Grub.
Sinon, passez directement au point 2.

1 - Connectez-vous à votre console dedibox : https://console.dedibox.fr
Passez votre dedibox en “mode rescue”
Récupérez votre mot de passe et votre adresse de connexion ssh
Attendez 1 bonne minute et connectez vous en ssh : mon_pseudo@ip_de_la_dedibox

Puis faites :
$ sudo -s
(+ mot de passe donné par console dedibox our le mode rescue)
# cd /mnt/
# mkdir mon_systeme
# mount -t auto /dev/sda2 mon_systeme/
# cd mon_systeme/
# chroot .
# mount -t auto /dev/sda1 /boot/
# cd /boot/grub/
# vim menu.lst

2/ Remplacez tous les root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx par root=/dev/sda2
Sauvegardez : avec Vim c’est :wq

… et maintenant vous pouvez rebooter !
#reboot

Vérifiez que vous êtes bien passé sur le nouveau kernel avec la commande :
uname -r

Vous devriez voir : 2.6.24.2dedibox-r8-1-c7

mardi, janvier 22 2008

Gravatar de mumblyDétails du matériel via mumbly

Toute petite astuce sous forme de note. Pour connaitre plus précisément le matériel de votre ordinateur, et pour voir comment il est reconnu sous votre Ubuntu préféré : $lspci -n

Puis, copiez la sortie complète de la commande précédente à cette adresse : http://kmuto.jp/debian/hcl/ Cliquez sur CHECK. Très intéressant, notamment au niveau des drivers. Je m’en suis servi pour mieux configurer mon lm-sensors…

vendredi, janvier 4 2008

Gravatar de mumblyMise à jour Ubuntu 7.04 vers 7.10 : le cas Dedibox via mumbly

Plusieurs de mes sites tournent sur un serveur dédié Dedibox avec Ubuntu server. J’en suis parfaitement content depuis plus d’un an maintenant. (Ce n’est pas de la pub : c’est une évaluation ! :o) ) Bref : j’avais à l’origine installé la Dedibox en Ubuntu 6.06 LTS mais le passage à la 7.04 s’est mal passé. Réinstallation en 7.04 toute fraîche. J’ai entrepris ce matin de passer la Dedibox de 7.04 server vers 7.10 server…

Et, si la manipulation s’avère finalement assez simple, il est FORTEMENT recommandé de suivre la procédure qui va suivre pour éviter une grosse déconvenue : le non redémarrage pur et simple du serveur après l’upgrade.

j’ai tout simplement suivi la procédure indiqué sur HowtoForge (http://www.howtoforge.com/upgrade-ubuntu-7.04-server-to-7.10) et l’ai agrémentée d’une “astuce” trouvée sur les forums de dedibox-news.org.

Voici sommairement les étapes à suivre :

Je précise que je suis connecté à la Dedibox en SSH.

1 - sudo apt-get update 2 - sudo apt-get install update-manager-core 3 - sudo do-release-upgrade

Là, on va vous demander si vous souhaitez continuer en SSH et on vous prévient qu’il existe un “ssh de secours” sur le port 9004 … au cas où … je n’ai personnellement pas rencontrer le moindre problème !

Après la procédure est simple : vous répondez YES y à toutes les questions ou bien vous choisissez toujours les choix par défaut comme pour les question du style :

The default action is to keep your current version.

*** my.cnf (Y/I/N/O/D/Z) default=N ? <– ENTER or N

Pour Apache, j’ai choisi Apache2, apache et apache-ssl car j’ai une configuration un peu spéciale avec ISPConfig (apache + apache-ssl) et un serveur “normal” (apache2).

Services to restart for PAM library upgrade: <– saslauthd proftpd cron courier-authdaemon atd

What would you like to do about php.ini? <– keep your currently-installed version

Arrivé en fin de configuration, on me demande si je suis d’accord pour enlever 13 paquets qui “ne servent plus à rien” : je dis OUI

13 packages are going to be removed.

Continue yN Details d <– y

Puis arrive le moment fatidique du redémarrage ou vous voyez ces lignes :

System upgrade is complete.

At the end of the upgrade, a system restart is required:

Restart required

To fully ugprade, please restart

Continue yN <–

NE FAITES RIEN ICI !!! (… pour le moment !)

En effet si vous redémarrez “tel quel”, votre Dedibox ne REDEMARRERA PAS !!!

Explications :

Lors de l’upgrade votre /boot/grub/menu.lst n’a pas été touché ! Oui : car pour Dedibox, en gardant les dépôts installés par défaut, la dernière version du kernel est 2.6.21.1dedibox-r7. Vous devriez avoir un menu.lst avec deux lignes (au moins …) ou vous allez trouver ça :

root=UUID=45645653435444363533

… et c’est cette partie qui pose problème !

Il va falloir la changer comme suit :

## ## End Default Options ##

title Ubuntu 7.10, kernel 2.6.21.1dedibox-r7

root (hd0,0)

kernel /vmlinuz-2.6.21.1dedibox-r7 root=/dev/sda2 ro quiet splash

quiet

title Ubuntu 7.10, kernel 2.6.21.1dedibox-r7 (recovery mode)

root (hd0,0)

kernel /vmlinuz-2.6.21.1dedibox-r7 root=/dev/sda2 ro single

title Ubuntu 7.10, memtest86+

root (hd0,0)

kernel /memtest86+.bin

quiet

### END DEBIAN AUTOMAGIC KERNELS LIST

Enregistrez.

Puis faites :

$ sudo update-grub

Et maintenant, vous pouvez redémarrer votre serveur. Tout devrait aller pour le mieux ! Cette configuration être propre à Dedibox car, sur un ordi personnel, je n’ai pas eu ce soucis …

samedi, mars 10 2007

Gravatar de tigrouWarning au lancement de scripts PHP4 en CLI via tigrou

J'ai un warning pénible lors du lancement d'un script PHP4 en ligne de commande (CLI) sur ma Ubuntu Edgy Eft installée sur ma Dedibox . Rien de bien grave, mais à chaque lancement d'un script (au hasard un de ceux d'eZ Publish :-), j'ai le message suivant :

$ php4 update/common/scripts/cleanup.php -s plain_site_admin expired_session
PHP Warning:  mime_magic: type regex            BEGIN[[:space:]]*[{]    application/x-awk invalid in Unknown on line 0

Un moyen de supprimer ce message systématique trouvé sur Launchpad et sur l'outil de rapport de bug de Debian est d'aller commenter la ligne 273 du fichier /usr/share/file/magic.mime . Simple, un peu crade mais au moins ça marche et puis je ne pense pas que cette modification ait beaucoup d'impact sur le reste du système...

dimanche, février 4 2007

Gravatar de tigrouScript de sauvegarde de bases de données sur un FTP via tigrou

Je continue tranquillement l'installation / la configuration de ma Dedibox sous Ubuntu hébergeant ce site . Après avoir fait cohabiter PHP4 et PHP5 , migrer son site utilisant eZ publish , configurer mes statistiques web avec AWStats et m'être battu avec PDO_MySQL (rien que ça :)), j'en viens aux backups. On ne le répètera jamais assez, il est important de faire des backups réguliers et systèmatiques comme il est important de savoir restaurer ses sauvegardes...

En plus, le service Dedibox propose un accès FTP avec un quota de 5Go inclu dans l'offre, il serait dommage de ne pas en profiter. Il est également possible d'augmenter ce quota, moyennant finances. Pour mon serveur, j'ai choisi d'utiliser cet espace pour sauvegarder les bases de données. C'est la partie la plus volumineuse et dans beaucoup de cas, c'est le seul élément à récupèrer. De toute manière, l'ensemble des données est aussi sauvegardé à intervalle régulier sur mon PC de bureau. Bien sûr les informations indiquées dans ce billet fonctionnent également avec n'importe quel autre accès FTP.

Configuration de MySQL

Il faut tout d'abord créer un utilisateur dans MySQL qui aura le droit en lecture sur toutes les bases pour faire un dump. Cela peut se faire via un assistant comme PHPMyAdmin ou bien avec 2 requêtes SQL exécutées en tant que root (de MySQL évidemment) :

GRANT SELECT, LOCK TABLES, SHOW DATABASES
  ON * TO 'backup'@'localhost' 
  IDENTIFIED BY 'pass_backup';
FLUSH PRIVILEGES;

L'utilisateur backup de MySQL a maintenant les droits en lecture sur toutes bases (il est conseillé de mettre un mot de passe fort...). Pour qu'un script puisse se connecter sans avoir à taper le mot de passe, il faut créer un fichier nommé .my.cnf dans le répertoire personnel de l'utilisateur qui exécutera le script. Ce fichier doit ressembler à :

[client]
 port      = 3306
 user      = backup
 password  = pass_backup 

Attention à bien restreindre les permission sur ce fichier pour que personne ne puisse le lire, sauf l'utilisateur en question avec la commande suivante :

> tigrou@dedipwet[88.191.30.29]:~$ chmod 600 .my.cnf

Configuration de l'accès FTP

Une fois l'option FTP activée dans la rubrique Sauvegarde de la console Dedibox, comme pour MySQL il faut faire en sorte que l'accès FTP se fasse sans demander de mot de passe. Il faut créer un fichier .netrc toujours à la racine du dossier personnel de l'utilisateur qui fera tourner le script :

machine dedibackup.dedibox.fr
login login_ftp_sauvegarde
password mot_de_passe_ftp_sauvegarde

Avec ce fichier, les connections FTP sur dedibackup.dedibox.fr se feront avec le login et le mot de passe indiqués avec les clients FTP suivant ce fichier (ftp , lftp , ncftp , ...) sans rien demander. De la même manière que le fichier .my.cnf, il faut faire attention aux permissions sur ce fichier.

Le script

#! /bin/bash
# Script de sauvegarde de toutes les bases sur FTP
 
FTP='dedibackup.dedibox.fr'
MYSQL_DIR='/var/lib/mysql'
TMP="/tmp/backup_site"
 
# fenêtre de backup en semaine
ROTATION_WEEK=3 
PREFIX_DATE=`date '+%U'`
PREFIX_DATE_DELETE=`date '+%U' -d "-${ROTATION_WEEK}weeks"`
 
[ ! -d "$MYSQL_DIR" ] && exit 2
[ ! -d "$TMP" ] && mkdir -p "$TMP"
 
cd "$MYSQL_DIR"
for base in `find . -maxdepth 1 -name [a-zA-Z]\* -type d` ; do
    base=`echo $base | sed 's#\./##g'`
    mysqldump --single-transaction "$base" | bzip2 -9 - > "$TMP/$PREFIX_DATE.$base.sql.bz2"
done
cd -
lftp -e "mrm $PREFIX_DATE_DELETE* ; mput $TMP/* ; exit"  "$FTP"
rm -rf "$TMP"

Ce script est prévu pour être lancé une fois par semaine avec crontab . Il va faire un dump de toutes les bases, effacer les dumps de plus $ROTATION_WEEK semaines sur le serveur distant et uploader les nouveaux ensuite. Le nombre de semaines sur lequel se fait la rotation peut être modifié via la variable ROTATION_WEEK.