jeu
14
mai
2015

Installer JpegOptim sur CentOs

Afin de gagner en temps de chargement de vos pages Web et diminuer votre bande passante, optimiser les images Jpeg est l’un des moyens d’y parvenir. JpegOptim permet de réduire de manière significative le poids des jpg sans perte. (ou avec perte pour une compression encore plus grande). Voici comment l’installer sur CentOs.

Vérifier que jpegoptim est bien disponible

yum search jpegoptim

Installer le package

yum install jpegoptim*

JpegOptim est maintenant installé. Un petit

man jpegoptim

vous fournira les différentes options disponibles.

Vous pouvez maintenant optimiser vos images jpeg

jpeg -t monimage.jpg
ven
14
juin
2013

13 conseils pour les sites à forte charge

Vous voulez développer des applications qui peuvent prétendre résister à de fortes charges ? Suivez ces 13 conseils déjà …

  1. Utiliser le prefork d’apache : Chaque utilisateur est servi par une instance du serveur web, l’instanciation prend du temps par conséquent l’anticiper revient à en gagner mais surtout à éviter une saturation trop rapide de la disponibilité des instances et donc du serveur web.
  2. Utiliser apache mod_deflate: Il s’agit d’un module du serveur web apache qui sert à compresser les fichiers avant de les envoyer, des fichiers plus petits transitent plus vite.
  3. Apache mod_cache: Il s’agit d’un système de cache interne à Apache, qu’est ce qu’un cache ? 
  4. Utiliser un proxy comme squid
  5. Utiliser la réplication Mysql, qu’est ce que la réplication ?
  6. Optimiser votre code, on ne le répétera jamais assez !
  7. Utiliser PHP APC, le cache d’opcode de php
  8. Utiliser des solutions de cache de données comme memcached
  9. Mettre en place du monitoring avec cacti ou nagios pour ne citer qu’eux
  10. Utiliser des solutions de load balancing comme HeartBeat
  11. Ajouter de la RAM
  12. Utiliser des disques durs SSD
  13. Booster les processeurs
ven
3
mai
2013

Configurer un serveur WebDav

Il est assez rare d’avoir besoin d’installer un serveur WebDav, en tout cas moi c’est la première fois que ça m’est arrivé en 10 ans de carrière pour les besoins d’un opérateur téléphonique très connu dont je ne citerai pas le nom ici.

Mais lorsque ça vous tombe dessus c’est d’autant plus ennuyeux et la documentation pour y parvenir n’est pas des plus synthétique.

C’est pour cela que j’ai décidé d’écrire cet article afin de faciliter la tache à d’autres qui n’ont pas de temps à perdre avec ça.

Passez root sur votre serveur, choisissez votre éditeur de texte favoris, nous allons modifier quelques fichiers Apache …

D’abord activer les fonctionnalités WebDav dans apache en créant des liens symbolique /etc/apache2/mods-enabled/dav_* vers /etc/apache2/mods-available

C’est bien beau d’avoir un serveur encore faut-il tester qu’il fonctionne correctement. Vous avez donc besoin d’un client WebDav, sous linux, Cadaver fera très bien l’affaire.

Editez votre virtual host, supposons que vous vouliez rendre votre serveur webdav disponible à l’adresse http://webdav.mondomaine.org, votre fichier /etc/apache2/sites-enabled/webdav.mondomaine.conf ressemblera à ceci :

<VirtualHost *:80>
 ServerName webdav.mondomaine.0pb.org
 DocumentRoot /srv/www/webdav.mondomaine.0pb.org
 <Directory /srv/www/webdav.mondomaine.0pb.org>
   Order deny,allow
   Allow from all
 </Directory>
 <Location />
   Dav On
   AuthType Basic
   AuthName "webdav"
   AuthUserFile /etc/apache2/htpasswd-webdav
   Require valid-user
 </Location>
</VirtualHost>

Si il n’existe pas déjà, créer le fichier de mots de passe et un user avec la commande suivant:

htpasswd -c  /etc/apache2/htpasswd-webdav monuser 

Puis créer le fichier de lock referencé par la directive DavLockDB comme ceci:

touch /var/lock/apache2/DavLock
chown www-data:www-data /var/lock/apache2/DAVLock

Il ne vous reste plus qu’à redémarrer Apache

/etc/init.d/apache restart

Et enfin tester que le serveur fonctionne bien avec Cadaver à l’aide des commandes : open, ls, edit …

Ressources :

http://www.pervasive-network.org/SPIP/Installation-de-WebDAV-pour
http://httpd.apache.org/docs/2.0/mod/mod_dav.html
http://forum.ubuntu-fr.org/viewtopic.php?id=395368
http://www.lenorcy.info/docs/webdav.php

ven
12
avr
2013

AGL Atelier de Génie Logiciel

Le sens qui est donné ici à l’Atelier de Génie Logiciel ou AGL est l’ensemble des outils qui concours à la production de projets informatiques.

Il s’agit d’un retour d’expérience personnelle par conséquent toute contribution à l’enrichissement de ce sujet est la bienvenue.

Rentrons tout de suite dans le vif du sujet, les outils nécessaires sont les suivants :

EDI Environnement de développement intégré

C’est votre éditeur de code source, son choix est très important.
Des choix intéressants seraient Eclipse et Netbeans pour les gratuits, il existe aussi des solutions payantes comme « PHP Storm » et là pas de secret, quand on paye c’est mieux.
En plus de gérer votre code source, un EDI vous rend pas mal de services par des options telles que :

  • la complétion automatique d’instructions
  • le formatage du code
  • la détection d’erreur dans tout le projet
  • la recherche de mots clés, de fonctions, de méthodes, d’appels de méthodes, de fichiers
  • L’exploration hiérarchique de classes
  • la gestion du contrôle de version ou VCS (version control system comme svn, git)

Intégration continue CIS (Continous Integration System)

L’intégration continue regroupe un VCS, un outil de tests unitaires tel que phpUnit ou Junit, et enfin un outil d’intégration continue tel que Jenkins.
C’est un genre de monitoring qui vous permet de vérifier la qualité du code de vos projets le plus fréquemment possible et en particulier avant une mise en production.
Aujourd’hui, dans les cycles de production modernes, un code passe par trois serveurs avant d’être exploitable, le serveur de développement où le code est construit au départ, le serveur d’intégration où se trouve Jenkins, le serveur de staging qui sert à la fois au tests fonctionnels et au déploiement c’est une sorte de serveur de production caché et enfin le serveur de production à proprement parler.
Une fois votre VCS configuré, vos tests unitaires en place, vous pouvez configurer votre CIS.
L’indicateur qui vous renseigne sur la qualité de votre code et que fourni un tel système s’appele le code coverage

Outils de modélisation

Afin de concevoir un système le plus sain possible, il convient dans la phase préliminaire de le schématiser.
Pour pouvoir l’optimiser par la suite, il faut mettre à jour ce modèle.
Que ce soit pour le code ou pour la base de données des outils existent pour cela, en voici quelques uns : Argo UML, Bouml, Visual Paradigmes, MysqlWorkbench, PowerAmc.
Si vous vous posez encore des questions sur l’intérêt d’utiliser de tels outils, un article précédent peut vous y aider.

Tracking

Dans un milieux de développement collaboratif, pour que les projets soient bien menés, il convient d’avoir un suivi efficace des taches réalisées, suspendues, interrompues.
Des solutions de tracking comme Trac, Redmine et Mantis pour les gratuites, Jira pour les payantes existent pour vous permettre de mener à bien ce travail.
Grâce à ces gestionnaires de taches, vous pouvez savoir à tout moment où vous en êtes de la réalisation de vos projets, quelles sont les taches accomplies, celles restantes à faire, vous pouvez recueillir des feedback d’utilisateurs par le biais des commentaires et faire des statistiques sur la qualité de traitement des projets.

Tests unitaires

Afin de se protéger des régressions applicatives introduites dans les cycles de production logiciel il faut mettre en place des tests unitaires.
Je ne vais pas faire un cours sur les tests unitaires car la documentation sur le sujet est très fournies et que l’internet regorge de tutoriaux.
La qualité de votre logicielle dépend directement de la qualité de vos tests unitaires.

VCS, contrôle de version

Dans un cycle de production de qualité il est impensable de travailler sans un outil de contrôle de version.
A l’origine existait RCS (pour revision contrôle system) qui permettait de gérer les différentes versions d’un logiciel tout au long de son cycle de vie.
Puis une dimension réseau fut introduite avec CVS.
Enfin aujourd’hui les deux outils qui se sont imposés sont SVN (subversion) et GIT.
Sans rentrer dans le détail, la principale différence entre ces deux systèmes réside dans le fait que GIT exploite un dépôt dit décentralisé au contraire de SVN. Vous pouvez vous référer à l’abondante documentation présente sur le net.
Le choix de l’un ou l’autre de ces deux outils dépend essentiellement de la politique de l’entreprise et du confort d’utilisation qu’y trouvent directement les différents groupes de développeurs.
Un VCS vous permettra aussi de faire un rollback en cas de bug en production

Méthodologie

Enfin, dernier point important : la méthodologie.
Malgré la présence de pléthore de méthodologies de développement logiciel telle que Crystal ou Lean, deux seulement ont retenu mon attention par leur coté complémentaire et efficace :
Scrum et Extrem Programming (XP).
Ces méthodes fournissent un cadre de travail, elles incluent des pratiques collaboratives, de programmation et de gestion de projet tel que : La responsabilité collective du code, les tests unitaires, le travail en binôme, le refactoring, la vélocité, les Burn Down Chart, le Poker planning, le daily stand up meeting.
Bien que leur efficacité soit sujet à controverse, je laisse à chacun le soin de les expérimenter et de les adapter au besoin pour n’en conserver que ce qui fonctionne réellement dans son contexte de travail.

Le mot de la fin

Voilà, j’espère que cet article vous aura donné les clés qui aideront à l’aboutissement de vos projets.

ven
5
avr
2013

Optimisations Mysql

La première étape dans une optimisation logicielle est certainement l’optimisation de votre base de données SQL.

Que vous vouliez optimiser votre application pour résister à la charge ou aux failles de sécurité, que ce soit un site internet ou une application de bureau, le principe reste le même.

Dans ce domaine il faut s’assurer de la qualité d’un certain nombre d’aspects.

Modèle de données

D’abord il faut que le modèle de votre base de données soit basé sur des méthodologies qui ont fait leurs preuves comme Merise.

L’application des principes d’une telle méthodologie apportera un modèle sain et rapide, elle évitera des effets de bords imprévisibles qui ne manqueront pas de planter votre application et/ou de corrompre vos données à moyen-long terme engendrant des coûts en maintenance, en termes d’effort, et donc de budget.

Par exemple l’ajout de contraintes empêche la corruption des données. Des relations 1.1, 1.n ou n.n pertinentes diminuent le volume de données, des indexes bien placés augmentent la vitesse de recherche. Ainsi sont traités ici trois concepts important s: La sécurité, le volume et la vitesse que nous traiteront plus en détail dans ce qui suit.

Sécurité

En terme de sécurité, il faut protéger votre application contre les injections sql.
Vous devez ensuite indiquer précisément le typage des champs de votre table, un champ qui ne doit jamais être NULL doit être flagué « NOT NULL », un champ qui n’est jamais sensé être négatif devrait être « unsigned ».

Tout laxisme à ce niveau entraîne des failles difficiles à détecter, on peut y avoir une analogie avec le typage dans les langages de programmation, il vaut mieux qu’un programme plante à la compilation qu’à l’exécution.

Un de mes clients dont le site internet proposait un système de crédits à ces utilisateurs a pâti d’un manquement à ce niveau. Un utilisateur malin arrivait à passer des valeurs négatives lors des opérations de dé-crédit et par conséquent son solde grossissait perpétuellement au lieu de diminuer, il réussi ainsi à avoir des crédits illimités.

Volume de données

Pensez à automatiser l’archivage des données qui sont importantes mais inutiles au fonctionnement de votre système, par exemple les transactions ou les facturations qui ont plus de 6 mois.

Quant aux données temporaires il convient d’automatiser leur suppression.

Utilisez également du round-robin sur des types de données qui s’y prêtent comme les données de monitoring.

Vitesse

J’ai volontairement abordé ce sujet en dernier, car bien qu’important, c’est celui auquel on pense immédiatement.

Tous d’abord avoir un modèle de données cohérent accéléra vos opérations d’archivage réduisant plus vite votre volume de données.

Ensuite il y a quelque règles de base à respecter si vous voulez accélérer vos requêtes :

  • N’utilisez pas « SELECT  * » mais nommez spécifiquement les champs que vous recherchez
  • Effectuer autant que possible des recherches sur des champs de même type, text-text, int-int etc…
  • Mettez des indexes sur les champs les plus sollicités en recherche

Ensuite il y a deux deux raisons qui font que vos requêtes sont lentes : Le verrouillage et l’exécution

Pour le déterminer vous pouvez analyser vos requêtes avec des commandes comme « show profile » ou « show status »

Verrouillage

Lorsque on accède à une ressource mysql, en lecture ou en écriture, celle ci est verrouillée le temps de l’opération pour garantir l’intégrité des informations retournées.

Si votre table sql est lente à cause des mécanismes de verrouillage plusieurs solutions peuvent être envisagées comme :

Changer de moteur : Le moteur InnoDb effectue sont verrouillage à un niveau ligne sur une table tandis que Myisam verrouille toute la table.

Sharding vertical : Plus la table est grosse plus il est difficile d’y accéder, splitter vos données verticalement en externalisant vos champs les plus sollicités dans de multiples tables externes constitue une solution de choix dans ce cas.

Cache : Utiliser une solution de cache afin que les bases de données ne soient pas sollicités sur les données qui ne changent que ponctuellement évitera à ces ressources d’être inaccessibles lors des requêtes.

Exécution

Si vos requête sont lentes à l’exécution vous pouvez :

  • Supprimer les jointures et les remplacer par des sous requêtes
  • Restructurer les champs de vos tables pour économiser l’espace, la ou un tiny int est suffisant inutile de mettre un int
  • Utiliser du Sharding horizontale : cela consiste à éclater une en plusieurs table à la manière des table assemblées merge mysql.
  • Mettre des indexes là où c’est nécessaire comme indiqué plus haut

Conclusion

Voilà un assez bref petit tour d’horizon bien que non exhaustif qui j’espère apportera à certains une vision synthétique, une sensibilisation aux optimisation Mysql ou tout simplement des débuts de pistes à explorer.

M.C

dim
13
mai
2012

Patcher son serveur OVH

Pour appliquer le patch automatique de son serveur OVH (pour un serveur sous Release 1 ou Release 2)

Connectez vous en root en SSh (ou alors allez sur le Webmin, cliquez sur « Autres » puis sur « Commandes Shell »)

Vous n’avez alors qu’à exécuter l’instruction suivante :

wget ftp://ftp.ovh.net/made-in-ovh/release/patch-all.sh -O patch-all.sh; sh patch-all.sh
jeu
29
déc
2011

Autoriser la reprise de transfert sur ProFTPD

Sur un serveur FTP, ProFTPD, où la reprise de téléchargement est souvent désactivée par défaut, il faut passer le paramètre AllowStoreRestart à on.
Exemple sur une release 2 d’OVH le fichier de paramétrage se trouve

/etc/proftpd/proftpd.conf

ou sur release 3

/etc/proftpd/proftpd.conf

Ajouter la ligne suivante

AllowStoreRestart on

Puis redemarrer le serveur ProFTPD

/etc/rc.d/init.d/proftpd restart
lun
28
nov
2011

Redémarrer son serveur Apache

Pour redémarrer son serveur Apache en ligne de commande, détectez tout d’abord l’emplacement de l’éxecutable.

locate httpd

Selon votre installation ou votre distrib vous aurez quelque chose comme

/usr/sbin/httpd

il ne vous reste plus qu’à lancer la commande

/usr/sbin/httpd restart

Vous pouvez également utiliser les options start ou stop à la place de restart.

Pour certaines distrib, remplacer httpd par apache voir apache2

jeu
30
juin
2011

Empêcher jQuery de ralentir votre chargement

Si vous utilisez le framework jQuery pour vos javascript pour associer vos fonctions utilisez l’évènement $(window) .load plutôt que $(document).ready.

En effet, le premier commence à s’exécuter alors que tous les éléments ne sont pas encore chargés (donc que le processeur travaille encore). Le second a le mérite de ne se lancer qu’une fois tous les composants de la page complètement chargés.

mar
28
juin
2011

Protéger ses repertoires

Si vous avez plusieurs répertoires, surtout des répertoires contenant des images ou des scripts sensibles, il est essentiel de les protéger afin qu’aucun utilisateur ne puisse lister leur contenu.

Il y a principalement 2 méthodes :

Placer un fichier index.html vide (ou indiquant « accès interdit ») à la racine de chacun des répertoires. La méthode est sure mais on risque d’oublier un répertoire si on en a beaucoup et qu’on ne l’a pas fait au fur et à mesure.

Ou simplement éditer le fichier .htaccess (sur un serveur apache) et ajouter la ligne suivante

Options -Indexes

Vos répertoires ne seront alors plus listables.