English version is available here: Install you own Firefox Sync server with PHP-FPM and Nginx
Introduction
La fondation Mozilla propose depuis quelques temps une fonctionnalité de synchronisation pour Firefox. Celà permet de retrouver son environnement de navigation sur différentes instances de Firefox. S'il est possible de stocker ses sauvegardes chez Mozilla, il est également possible de le faire chez soi, en installant sa propre instance du serveur sync.
Les plus paranoïaques d'entre nous y verrons le moyen de protéger leur vie privée des vélléités inquisitrices de la fondation Mozilla. Perso, je n'y crois pas: d'une part, toutes les informations sont chiffrées, d'autre part, ce n'est vraiment pas dans l'esprit du logiciel libre que défend becs et ongles la fondation.
En revanche, déployer et maintenir une infrastructure pour accueillir les sauvegardes des millions d'utilisateurs de Firefox sync coûte de l'argent, beaucoup d'argent. En installant votre propre serveur Firefox sync, vous conservez le contrôle de vos données bien sûr, mais vous ferez potentiellement faire quelques économies à la fondation Mozilla.
Pour ma part, de la même façon, que j'opère mon propre serveur Web, mail, jabber, etc..., je trouve intéressant d'avoir mon propre serveur Sync. Une histoire d'indépendance en quelque sorte :)
Préparation
Il s'agit donc d'installer une instance Firefox Sync sur mon serveur web. En l'occurence, celui-ci utilise Nginx et PHP-FPM.
La configuration de référence est décrite là:
- Nginx: Configuration d'hôtes virtuels avec support automatique des sous-domaines, du SSL et de l'authentification sous GNU/Debian Linux version 2
- PHP-FPM, le serveur d'application par PHP
Dans cet exemple, nous allons paramétrer un pool applicatif. Cela veut dire que Firefox Sync sera potentiellement disponible pour plusieurs domaines et bien sûr plusieurs utilisateurs.
D'abord, il faut créer l'arborescence sur le disque dur:
Une fois l'environnement créé, il faut préparer la configuration de PHP-FPM:
Oui, vous avez bien lu, Firefox Sync minimal server peut être cloisonné dans un chroot. Bonheur :)
La version minimaliste du serveur nécessite le support de SQlite dans PHP:
Voilà pour PHP. Il est temps de s'atteler à Nginx. Le fichier README propose, pour apache, de créer un Alias. En fait, il s'agit de faire en sorte que toutes les requêtes soient réécrites pour pointer sur index.php avec PATH_INFO. Voilà ce que ça donne sous NGinx:
Attention à la directive fastcgi_split_path_info. Dans la documentation nginx, la regex est ^(.+\.php)(.*)$. Malheureusement pour nous, le client Sync effectue un requête du type /1.0/user/username/info/collections?v=1.6.2. Avec la regex par défaut, les paramètres de requête (QUERY_STRING) ?v=1.6.2 sont alors inclus dans la variable PATH_INFO provoquant un échec de la première synchro. Ceci n'empêche a priori pas de synchroniser les informations entre le navigateur et le serveur, mais vous empêchera, par exemple, de consulter la liste des onglets ouverts sur un autre Firefox. Génant :-/
La regex ^(.+\.php)([^?]*).*$; corrige donc ce comportement en incluant dans la variable PATH_INFO tout ce qui vient après .php et ce jusqu'à un éventuel "?".
Il ne reste plus qu'à l'inclure dans les fichiers de configuration de domaines que vous souhaitez. Par exemple:
Installation de Firefox Sync minimal server
Il est maintenant temps de télécharger le code et de l'installer dans docroot.
La dernière commande est importante: en effet, la base de données sqlite sera stockée dans ce répertoire. Il faut donc que le script PHP puisse écrire dans le répertoire. Libre à vous de restreindre les droits par la suite.
Initialisation de la base
La base de donnée sera créée lors de la première requète. Comme l'indique le fichier README, utilisez votre navigateur préféré (qui a dit Chrome O_o ?) et connectez-vous à l'adresse http://fsync.domain.tld/1.0/blah/info/collection avec l'identifiant blah et le mot de password garbage. En fait, il semble que n'importe quel login/mot de passe fasse l'affaire. La première authentification va échouer, mais ce n'est pas bien grave: l'important est de constater la présence du fichier weave_db côté serveur.
La dernière étape côté serveur consiste à créer les utilisateurs:
Simple, mais efficace.
Il est maintenant temps de configurer votre Firefox et de profiter de votre propre serveur Sync. N'oubliez de choisir l'option Custom Sync Server en indiquant l'URL de votre propre instance. La modification d'un Sync existant semble ne pas fonctionner. Je vous conseille donc de désactiver Sync pour le reconfigurer de zéro.
Have fun !
Sources et références
Firefox sync
- Firefox Sync
- http://mozillalabs.com/sync/
- https://wiki.mozilla.org/Labs/Weave/Sync/1.0/API
- Minimal server
- http://tobyelliott.wordpress.com/2009/09/11/weave-minimal-server/
- http://rabenau.org/blog/posts/creating-your-own-firefox-sync-server
- http://gege2061.homecomputing.fr/content/installation-dun-serveur-firefox-sync/
NGinx
- fastcgi_split_path_info
- http://nginx-maillist.blogspot.com/2011/01/re-fastcgisplitpathinfo-capture-group_20.html
- http://forum.nginx.org/read.php?2,168078,168097#msg-168097
