Mise à jour 06/12/2011 : Suite à la mise en ligne d’une version modifiée de ce tutoriel n’utilisant pas le serveur Apache, je précise que si le tutoriel suivant est parfaitement fonctionnel, je préfère pour ma part ne pas l’utiliser pour les raisons décrites dans l’article sus-nommé. C’est vous qui voyez, y’en a qui ont essayé…
Suite au précédent article qui décrivait l’installation du serveur Sync minimal (et au fait qu’il n’était plus maintenu au profit de la version complète qui a été réécrite en Python), j’aborde ici l’installation du serveur Sync complet derrière un serveur Apache avec utilisation d’une base données MySQL.
Pré-requis :
- Un serveur GNU/Linux (ici Debian Squeeze i386)
- Serveur Web (ici Apache 2) avec support HTTPS
- Base de données MySQL
- Un navigateur Mozilla Firefox/IceWeasel PC/Mobile
Conventions :
- prompt : # commande : exécuter la commande sous le compte root ou précédée de la commande « sudo »
- prompt : $ commande : exécuter la commande sous le compte utilisateur
1. Installation
– Installer les dépendances :
# apt-get install python-dev mercurial python-virtualenv mysql-server build-essential libmysqlclient-dev libapache2-mod-wsgi
– Créer la base de données sync :
# mysql -u root -p
mysql> create database sync;
mysql> grant all on sync.* to sync identified by 'my_password';
mysql> flush privileges;
mysql> exit;
– Aller dans /var/www et télécharger la dernière version du serveur :
# cd /var/www
# hg clone https://hg.mozilla.org/services/server-full
– Renommer le dossier /var/www/server-full en /var/www/sync :
# mv /var/www/server-full /var/www/sync
– Se placer dans le dossier /var/www/sync et compiler le serveur :
# cd sync
# make build
– Installer Mysql-Python
# bin/easy_install Mysql-Python
Dans sa version actuelle, le serveur Sync embarque son propre serveur Web mais celui-ci n’est pas conçu pour supporter une forte charge (ce qui n’est pas très pénalisant dans notre cas) mais surtout ne semble pas posséder de mode chiffré. Nous allons donc faire fonctionner le serveur Sync derrière un serveur Apache en mode SSL via le mode WSGI. A noter que NGINX et Lighttpd sont aussi supportés (voir la doc Mozilla).
– Le mode WSGI ayant été installé avec les dépendances, il ne reste plus qu’à l’activer si nécessaire :
# a2enmod wsgi
– Créer un group sync et ajouter l’utilisateur sync à ce groupe :
# groupadd sync
# usermod -G sync sync
– Configurer le fichier /var/www/sync/etc/sync.conf pour Apache et MySQL (directives [storage] sqluri et [auth] sqluri), Apache 2 (directive [auth] fallback_node) et SMTP (directive [smtp] sender) :
# nano /var/www/sync/etc/sync.conf
[global]
clean_shutdown = false
[captcha]
use = false
public_key = 6Le8OLwSAAAAAK-wkjNPBtHD41v5OmoNFANIa1JL
private_key = 6Le8OLwSAAAAAEKoqfc-DmoF4HNswD7RNdGwxRij
use_ssl = false
[storage]
backend = syncstorage.storage.sql.SQLStorage
sqluri = mysql://sync:my_password@localhost/sync
standard_collections = false
use_quota = true
quota_size = 5120
pool_size = 100
pool_recycle = 3600
reset_on_return = true
display_config = true
create_tables = true
[auth]
backend = services.auth.sql.SQLAuth
sqluri = mysql://sync:my_password@localhost/sync
pool_size = 100
pool_recycle = 3600
create_tables = true
fallback_node = https://my_server.net/
[smtp]
host = localhost
port = 25
sender = my_account@email.net
[cef]
use = true
file = syslog
vendor = mozilla
version = 0
device_version = 1.3
product = weave
– Configurer le Virtualhost Apache :
# nano /etc/apache2/sites-available/sync
ServerAdmin my_account@email.net
ServerName my_server.net
DocumentRoot /var/www/sync
Order deny,allow
Allow from all
Options -Indexes
WSGIProcessGroup sync
WSGIDaemonProcess sync user=sync group=sync processes=2 threads=25
WSGIPassAuthorization On
WSGIScriptAlias / /var/www/sync/sync.wsgi
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
– Activer le Virtualhost et recharger la configuration d’Apache :
# a2ensite sync
# service apache2 reload
2. Ajout d’un Firefox PC / Mobile
2.1. Firefox PC
– Ouvrir les Options/Paramètres de Firefox, allez dans l’onglet Sync et cliquer sur le bouton Configurer Firefox Sync
– Choisir Créer un nouveau compte
– Configurer les options de synchronisation (bouton en bas à gauche) et valider (Attention à ne pas écraser vos marque-pages par mégarde !) :
– Renseigner les champs suivants :
Compte : my_account@email.net
Mot de passe : my_password
serveur (Utiliser un serveur personnalisé…) : https://my_server.net/
Pensez à noter la clé de synchronisation après avoir validé les paramètres de connexion, elle sera demandée pour se connecter au compte depuis un autre Firefox.
2.2. Firefox Mobile
Une fois le compte créer et les données stockées sur le serveur, la configuration de Firefox Mobile se fait la manière suivante.
– Aller dans les paramètres, activer Sync et appuyer sur le bouton Connecter :
– Appuyer sur le lien Je n’ai pas accès à mon ordinateur pour l’instant… :
– Renseigner les champs suivants :
Compte : my_account@email.net
Mot de passe : my_password
Serveur (Utiliser un serveur personnalisé…) : https://my_server.net/
Clé de synchronisation : bd54sb5e1fd64gv76vs5gv16qse1vsd5
– La synchronisation est maintenant activée :
Sources :
- Documentation Mozilla installation Sync server : http://docs.services.mozilla.com/howtos/run-sync.html
- Documentation Mozilla Sync server : http://docs.services.mozilla.com/index.html
- Fixing the python config file if you’re getting server errors : https://tobyelliott.wordpress.com/2011/06/22/fixing-the-python-config-file-if-youre-getting-server-errors/
- http://www.verboom.net/blog/index.html?single=20110714.0
Pour info, le SGBDR utilisé par défaut est SQLite qui suffira amplement pour une utilisation personnelle de Mozilla Sync, et évitant ainsi l’installation de mysql et la partie création de la base et des tables.
Tout à fait et je pense que la doc de Mozilla est assez précise sur cette méthode qui est d’ailleurs la plus simple à installer. Pour ma part, j’ai souhaité utiliser une base MySQL car je préfère avoir si possible toutes mes bases de données au même endroit, c’est mon côté « Monk ». Qui plus est, ça offre un tuto supplémentaire pour ceux qui couvent la même névrose. :p
Quel est l’intérêt d’installer python-virtualenv ? Est-il utilisé par Sync, car dans les commandes que tu donnes, virtualenv n’est absolument pas mentionné.
Je ne suis pas familier de Python, j’ai suivi les indications de Mozilla.
Je pense que cette page répond en partie à ta question, à savoir pouvoir compiler le serveur sans accès root (bien que dans mon tuto, j’utilise les droits root…).
Merci pour ce tutorail ! Je n’ai pas eu de difficultés à part au niveau de la config Apache aux lignes SSLCertificateFile et SSLCertificateKeyFile. Les chemins n’existant pas sur une Squeeze x64.
Cette difficulté palliée, le serveur est fonctionnel. Malheureusement mon log d’erreur d’apache se fait sacrément polluer.
http://pastebin.com/RLqdLPxy
La partie conf a l’air correcte chez moi, le seul soucis, c’est coté client firefox. Quant je saisir l’URL de mon serveur (que ca soit l’IP, ou le nom public)
ou alors l’email qui est incorrecte (pourtant au bon format)
Vérifie que l’adresse du serveur contient bien un « / » à la fin, il me semble que c’est obligatoire.
Si tu veux que je jette un oeil à tes fichiers de configuration, n’hésites pas…
Je suis en train d’essayer d’installer le serveur sync sur nginx + gunicorn sans succee
toute les procédure que j’ai trouve sont pour apache, la procédure de la doc explique pour httpd et apache mais pas nginx.
Donc si quelqu’un a réussi a faire fonctionner sync avec nginx + gunicorn ou a une procédure je suis preneur ^^
Salut, merci pour ce super tuto ! J’ai suivi en (partie) cette méthode pour installer mon Sync Server, mais il me reste quelques doutes, tu pourra sûrement m’éclairer :
– Qui est-ce qui créer le contenue de la base MySQL dédiée à Sync ? Faut-il lancer un script, ou Sync se débrouille lorsqu’il se connecte à la base de données ?
Autre question :
-As-tu le moindre contrôle sur les utilisateurs qui peuvent créer un compte et stocker des données sur ton instance de Sync ?
J’ai tout de même réussi à configurer Sync avec Apache et sa propre base de données interne, mais ce couple me pompe plus de 500 Mo de mémoire vive ! Tu as des résultats plus optimistes ?
Merci !
Salut Exca,
« – Qui est-ce qui créer le contenue de la base MySQL dédiée à Sync ? Faut-il lancer un script, ou Sync se débrouille lorsqu’il se connecte à la base de données ? »
La base de données doit être créée manuelle puis Sync crée les tables
« -As-tu le moindre contrôle sur les utilisateurs qui peuvent créer un compte et stocker des données sur ton instance de Sync ? »
Pas à ma connaissance, le risque de sécurité est cependant faible, les autres comptes n’ayant pas accès aux autres données de la base, sans compter le chiffrement de celles-ci. Le risque serait une attaque forgée spécifiquement contre une faille du serveur Sync (encore faut-il savoir qu’il y en a un sur le serveur) de manière à obtenir une élévation de privilèges afin de prendre possession du serveur entier. Ce risque n’est pas nul mais compte-tenu du fait que l’architecture Mozilla est identique, je suppose qu’un attaquant serait bien plus intéressé par les serveurs Mozilla que par les nôtres, qui plus est Mozilla est très réactif sur la sécurité, je ne m’en fait donc pas plus que pour les autres services. Pour finir, l’intérêt d’avoir une serveur privé est de contrôler ses propres données, je ne vois pas l’intérêt d’utiliser un serveur Sync « privé » (outre pour son propriétaire) plutôt que de celui de Mozilla.
« -As-tu le moindre contrôle sur les utilisateurs qui peuvent créer un compte et stocker des données sur ton instance de Sync ? »
Je n’ai pas les chiffres sous la main mais ça ne m’avait pas alarmé sur le coup.
Merci de ton commentaire !
Merci beaucoup pour le tuto.
J’étais sur Ubuntu avec un server SSL existant. Plutôt que d’ajouter /etc/apache/site-enabled/sync, j’ai fait les modofications à la main dans /etc/apache/site-enabled/default-ssl
Bonjour,
à l’étape de compilation du serveur j’ai cette erreur :
virtualenv –no-site-packages .
New python executable in ./bin/python
Installing setuptools…………done.
bin/pip install -U -i http://pypi.python.org/simple MoPyTools
make: bin/pip : commande introuvable
make: *** [build] Erreur 127
Effectivement, la commande pip n’est pas présente dans le répertoire /var/www/sync/bin
Je ne sais pas si c’est important, mais en tout cas la configuration d’un nouveau compte ne fonctionne pas c’est pourquoi je cherchais une explication et comme c’est la seule erreur que j’ai eu au cours dans l’installation…
Merci d’avance.
D’après ce que je vois ici http://pypi.python.org/pypi/pip#downloads « pip is a replacement for easy_install ».
Donc a priori si on utilise easy_install c’est a priori pas grave de ne pas avoir pip vu qu’on utilise easy_install à la place.
Ca se tient comme raisonnement ?
Bonjour,
est-ce que la commande pip est nécessaire pour la compilation du serveur ?
Merci d’avance.
Salut,
pip est nécessaire pour installer le paquet Mysql-Python mais on peut très bien utiliser easy_install à la place.
Si cela te pose vraiment un problème, tu peux te rabattre sur une base de données SQLite comme décrit dans le tuto Mozilla : http://docs.services.mozilla.com/howtos/run-sync.html
pour ceux qui ont l’erreur :
NameError: name ‘install’ is not defined
taper la commande :
export VIRTUALENV_DISTRIBUTE=true
Merci pour la précision !