PHP 5.6 à PHP 7 pour mongodb

Juste un pense bête car ce n’est pas toujours évident quand il faut migrer.
Il faut déjà commencer par installer le nouveau driver via pecl

$ sudo pecl install mongodb

Une fois fait, il faut bien vérifier que le drivers est bien chargé avec par exemple phpinfo().
Si il n’est pas présent il faut vérifier le fichier de configuration (php.ini ou autre) si l’extension est bien chargé.

Pour faire coller au mieux son code existant, il faudra installer 2 librairies.

$ composer install mongodb/mongodb

et pour la rétro-compatibilité qui ré-implémente mongoclient et toute les méthodes devenues obsolètes.

$ composer require alcaeus/mongo-php-adapter
Publié dans Non classé | Laisser un commentaire

Nginx reverse proxy

Cette article fait suite au précédent.

Nous sommes dans un cas particulier.
Nous avons des IPs (sites) qui sont forward sur un autre serveur ou sont réellement hébergés les site.
L’ip forwarding fonctionne à merveille si on reste juste sur ce principe.

Hors notre pool d’ip sert aussi pour notre proxy cache et la c’est la catastrophe car au lieu d’avoir du round robin sur notre squid, le serveur forward sa propre IP.
Ce qui tue complètement l’utilité du round robin.

J’ai donc préféré passer par nginx en reverse proxy plutôt que passer par des règles IP table.
L’idée étant de catch sur nginx toute les requêtes du port 80 et de les forward à l’autre serveur, tout en gardant mon proxy avec sa configuration initiale.

server {
listen 80 default_server;
server_name _;

location / {
resolver XXX.XXX.XXX.XXX ipv6=off;
proxy_set_header Host $host;
proxy_pass http://YYY.YYY.YYY.YYY;
proxy_redirect off;
}
}

XXX.XXX.XXX.XXX = le serveur DNS qui doit résoudre le domaine
YYY.YYY.YYY.YYY = le serveur qui héberge réellement les sites

Il ne faut pas oublier de changer la conf de bind pour accepter toute les IP pour la résolution ou les fixer.

Dans le /etc/bind/named.conf.options

listen-on { any; };

 

Publié dans linux, Nginx, Server, squid | Laisser un commentaire

Forwarding d’ip via iptables

J’ai rencontré un problématique qui parait triviale, qui m’a posé quelques problèmes pour une broutille de configuration.

J’ai un serveur qui a un gros pool d’ip (94), dont certaines géolocalisés.
Dans une première mouture on avait un serveur NGINX qui hébergeait tous les sites sur la machine.

Hors suite à un migration d’infrastructure on a du faire autrement (passage en cloud sur une plus petite machine).
La solution pour laquelle ont a opté est l’ip forwarding sur le nouveau serveur qui héberge tous nos sites.

Pour les règles IPtables rien de bien sorcier :

iptables -t nat -A PREROUTING -p tcp -i eth0 –dport 80 -j DNAT –to IP_destination:80
iptables -A FORWARD -p tcp -i eth0 -d IP_destination –dport 80 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Mais la impossible de forward, à force de chercher on s’est rendu compte que l’ip_forward n’est pas activé de base

echo « 1 » > /proc/sys/net/ipv4/ip_forward

Ne pas oublier de faire ce qu’il faut pour que tout soit correctement prit en compte

modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_ftp

Publié dans linux, Server | Laisser un commentaire

Tesseract OCR

Actuellement dans le cadre de mon emploi je suis en train de mettre en place un scraper plus ou moins générique.

Sur un des sites que je scrape, j’ai rencontré un problème.

Certaines données textuelles sont embarquées dans des images et du coup impossible de pouvoir les récupérer directement.

Du coup il ne reste que l’ocr pour pouvoir les extraire.

Mais voilà manque de bol, la police en question colle pas avec les réglages de base de tesseract du coup on est obligé de le passer en mode apprentissage.

Quand on voit la documentation, c’est pas très clair, après avoir bouffer une 1/2 journée de test / recherche, j’ai enfin trouvé la procédure qui fonctionne.

Attention ce qui suit est pour la version 3 de tesseract.


tesseract -psm 7 fra.mafont.exp0.tif fra.mafont.exp0 batch.nochop makebox
tesseract -psm 7 fra.mafont.exp0.tif fra.mafont.exp0 nobatch box.train
unicharset_extractor fra.mafont.exp0.box
echo "mafont 1 0 0 0 0" > font_properties
mftraining -F font_properties -U unicharset -O fra.unicharset fra.mafont.exp0.tr
cntraining fra.mafont.exp0.tr
mv normproto fra.normproto
mv pffmtable fra.pffmtable
mv inttemp fra.inttemp
mv shappable fra.shappable
combine_tessdata fra.

Dans mon cas l’image passait pas,  j’ai été obligé de la passer en tif pour éviter les problèmes (attention certains cas les tif avec un canal alpha pose problème).

A la ligne 2 il faut vérifier le contenu du fichier fra.mafont.exp0.box si chaque ligne correspond bien à chaque caractère (si l’ocr ne marchait pas de base il y a fort à parier que ce fichier n’est pas bon).

Pour finir il faut copier le fichier fra.trainingdata dans le répertoire de tresseract pour que le tout soit prit en compte (dans ma distrib : /usr/share/tessdata/)

Avec la commande : tesseract tmp.gif test -psm 7 -l fra

On pourra vérifier la sortie directement dans le fichier test.txt

C’est tout pour le moment, je vais pouvoir finir le reste de mon scraping avec cette fois le contenu des images.

Pour ceux qui se poserait la question j’utilise casperjs (qui utilise lui même nodejs).

Publié dans linux, Logiciel | Marqué avec , , | Laisser un commentaire

chattr mon cher ami

Je m’acharnais gentiment sur mon mkdir en root, pas moyen de faire mon répertoire (permission denied).

Et la merci google.

Un petit lsattr sur le répertoire parent et paf mon répertoire a un flag « i ».

Après un petit chattr -i sur mon répertoire tout est revenu dans l’ordre.

 

Publié dans linux | Laisser un commentaire

Nginx la mise à jour fatale

Je me suis retrouvé avec une erreur au lancement de nginx après la dernière mise à jour.

[emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

Impossible de pouvoir redémarrer, de plus aucun process utilisait le port 80.

Il faut juste modifier le fichier /etc/nginx/sites-available/default
Et mettre  ipv6only=on sur la ligne qui va bien.

server {
 listen 80 default_server; ## listen for ipv4
 listen [::]:80 default_server ipv6only=on; ## listen for ipv6
...
}

On relance nginx et cette fois c’est bon.

Publié dans Nginx, Server | Laisser un commentaire

Bad gateway nginx et ispconfig

J’ai installé il y a quelques temps ISPconfig, j’ai fait l’upgrade sans trop vérifier.
Aujourd’hui je voulais me connecter à mon phpmyadmin et là, Oh surprise (c’est la saison), un bon gros message d’erreur « Bad Gateway 502 ».

Je regarde vite fait les logs

2013/02/03 14:40:55 [error] 6871#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: _, request: "GET /phpmyadmin/ HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "domain:8081"

Oups, dur, Google, mon beau google, donne moi la réponse.

Après X pages sans solution réelle.

Je tombe sur l’évidence même : »fastcgi://127.0.0.1:9000″

Ils serait peut être de bon ton de passer phpmyadmin et webmail (dans /etc/nginx/sites-available/apps.vhost) en sock

Donc la solution est de passer de :

fastcgi_pass 127.0.0.1:9000;

A :

fastcgi_pass unix:/var/lib/php5-fpm/apps.sock

Après un petit redémarrage d’Nginx, mon phpmyadmin est enfin réapparu.

J’ai pu avoir la confirmation grace à cette page : http://bugtracker.ispconfig.org/index.php?do=details&task_id=2641&project=3&type[0]=1

Publié dans ISPconfig, Logiciel, Server | Marqué avec , , | Laisser un commentaire

Nginx, Rockmongo et PHP_SELF

Je viens de laisser tomber apache pour nginx avec php sous pfm.
C’est un petit bonheur, tout tournait comme une horloge.
Ré-installation de mon nosql préféré et de son gui populaire (rockmongo).

Grosse surprise, tous les url se retrouvent en index.php/index.php……
Après une recherche il y a des combos fatals 🙂

Bref, si dans la configuration de votre Host vous avez la directive :

fastcgi_param PATH_INFO $fastcgi_script_name

Je vous conseille de la désactiver :

#fastcgi_param PATH_INFO $fastcgi_script_name

Après un redémarrage de nginx (/etc/init.d/nginx restart), tout devrait rentrer en ordre.

Publié dans PHP, Server | Marqué avec , , , , , | Laisser un commentaire

IE et les selects

Dans un projet avec des selects qui se rechargent, j’ai eut droit à une désagréable surprise sous IE7/8.
Pas moyen d’ajouter de nouvelles options sans un plantage de type UI (select bloqué sur l’option 1).

Après une perte considérable de temps j’ai enfin trouver LA solution.

Pour vider le select :

$("#monSelect").empty();

Pour ajouter une option (qui marche partout) :

$("#monSelect").get(0).options.add(new Option(monText, maValeur));

La méthode normale (qui marchait pas dans mon cas) :

$('<option value="'+maValeur+'">'+monText+'</option>').appendTo("#monSelect");

Ou

$("#monSelect").append('<option value="'+maValeur+'">'+monText+'</option>');
Publié dans jQuery, Programmation | Marqué avec , , | Laisser un commentaire

Migration de serveur

iGlobe vient de migrer d’un vieux serveur en redhat, à un tout nouveau en ubuntu ce qui va grandement me facilité la tache.

Du coup je vais en profité pour faire un petit article sur les difficultés que j’ai pu avoir, ainsi qu’un autre sur ISPconfig.

Publié dans News | Marqué avec , | Laisser un commentaire