Mozilla sync avec mysql

Sync server est un outil mis à disposition de la fondation mozilla qui permet de synchroniser différent objet entre différentes plate-forme.

  • marque-pages
  • historique
  • préférences
  • mots de passe enregistrés
  • formulaires pré-remplis
  • modules

C’est très pratique également pour sauvegarder ces paramètres en cas de crash.
Mozilla offre la possibilité d’utiliser ses serveurs pour faire cela, mais il est préférable (pour des raisons étiques) de monter un serveur en interne.

Installation

Sur une Debian :

aptitude install python-dev git-core python-virtualenv build-essential mysql-server libmysqlclient-dev libapache2-mod-wsgi

On lance l’installation de mysql :

Je vous passe l’installation de base, je ferais un autre article pour cela.
Créer la base de données MySQL, un nouvel utilisateur et attribuer les droits à cet utilisateur.

Il est possible d’utiliser sqlite, postgresql ou même LDAP mais j’aime bien MySQL.

C’est une installation de type standalone, donc il faut que l’on crée un répertoire pour y placer l’application et ensuite on la compile. Dans mon cas, je vais l’installer dans /opt mais si vous choisissez de l’installer ailleurs il faudra adapter les chemins.

cd /opt

Ensuite on récupère les sources avec git

git clone https://github.com/mozilla-services/syncserver

Enfin on lance la compilation :

make build

Et lancer un test histoire d’être sûr que tout c’est bien passé

make test

Vous deviez avoir un message du style : OK (skipped=4)
Il nous faut installer Mysql-python

/opt/syncserver/local/bin/easy_install Mysql-Python

On active wsgi pour apache2 (wsgi permet un interfaçage entre Python et les applications web)

a2enmod wsgi && service apache2 restart

Paramétrage DE Syncserver

Le fichier de configuration de syncserver est /opt/syncserver/syncserver.ini

[server:main]
use = egg:gunicorn
host = 0.0.0.0
port = 5000
workers = 1
timeout = 30

[app:main]
use = egg:syncserver

[syncserver]
# This must be edited to point to the public URL of your server,
# i.e. the URL as seen by Firefox.
public_url = http://localhost:5000/

# This defines the database in which to store all server data.
#sqluri = sqlite:////tmp/syncserver.db

# This is a secret key used for signing authentication tokens.
# It should be long and randomly-generated.
# The following command will give a suitable value on *nix systems:
#
#    head -c 20 /dev/urandom | sha1sum
#
# If not specified then the server will generate a temporary one at startup.
#secret = INSERT_SECRET_KEY_HERE

# Set this to "false" to disable new-user signups on the server.
# Only request by existing accounts will be honoured.
# allow_new_users = false

# Set this to "true" to work around a mismatch between public_url and
# the application URL as seen by python, which can happen in certain reverse-
# proxy hosting setups.  It will overwrite the WSGI environ dict with the
# details from public_url.  This could have security implications if e.g.
# you tell the app that it's on HTTPS but it's really on HTTP, so it should
# only be used as a last resort and after careful checking of server config.
force_wsgi_environ = false

# Uncomment and edit the following to use a local BrowserID verifier
# rather than posting assertions to the mozilla-hosted verifier.
# Audiences should be set to your public_url without a trailing slash.
#[browserid]
#backend = tokenserver.verifiers.LocalVerifier
#audiences = https://localhost:5000 

Dans public_url mettre l’adresse de votre serveur, ou son IP.
ATTENTION : si vous voulez utilisez le port 443 supprimer le :5000 à la fin.

Comme nous utilisons MySQL il faut modifier l’accès à la base de données.

#sqluri = sqlite:////tmp/syncserver.db
sqluri = pymymsql://utilisateurSQL:passSQL@localhost/sync

La ligne
# allow_new_users = false
Décommenter et passer à true mais il faut penser à le décommenter une fois que tout vos utilisateurs aient crées leur compte.

Nous allons créer un utilisateur pour le lancement du serveur

useradd -d /opt/syncserver/ -l -r -U syncserver
chown -R syncserver /opt/syncserver/

 

Il n’y a plus qu’a lancer le serveur

make serve

Paramétrage d’apache

Créer un virtualhost

<VirtualHost *:80>
ServerName debian.xxxxxxxxxx.com
Redirect / https://debian.xxxxxxxxx.com
</VirtualHost>
<VirtualHost *:443>
ServerName debian.courbeil.com
DocumentRoot /opt/syncserver

WSGIProcessGroup sync
WSGIDaemonProcess sync user=www-data group=www-data processes=2 threads=25 python-path=/opt/syncserver/local/lib/python2.7/site-packages/
WSGIPassAuthorization On
WSGIScriptAlias / /opt/syncserver/syncserver.wsgi

SSLEngine On
SSLCertificateFile    /etc/apache2/ssl/sync.crt
SSLCertificateKeyFile /etc/apache2/ssl/sync.key

CustomLog /var/log/apache2/access_sync.log combined
ErrorLog /var/log/apache2/error_sync.log
LogLevel warn
</VirtualHost>
<Directory /opt/syncserver>
Require all granted
</Directory> 

Penser à créer les certificats et à modifier les chemins si vous en avez choisis d’autres.
Et modifier le groupe du dossier /opt/syncserver en www-data
Si nécessaire modifié également les droits

chown :www-data -R /opt/syncserver
chmod 750 -R /opt/syncserver

Créer le script de lancement

Créer un ficher /etc/init.d/syncserver

#!/bin/bash

### BEGIN INIT INFO
# Provides:          Mozilla Sync HomeServer
# Required-Start:    $syslog $network
# Required-Stop:     $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Mozilla Sync HomeServer initscript
# Description:       Mozilla Sync HomeServer
### END INIT INFO
MESSAGELOG=/var/log/syncserver-messages.log
PID=`pidof -x -o %PPID paster`
case "$1" in
  start)
    echo "Starting Mozilla Sync HomeServer"
    [ ! -d $MESSAGEDIR ] && mkdir -p $MESSAGEDIR
    su syncserver -c "cd /opt/syncserver/ && local/bin/gunicorn serve development.ini &>$MESSAGELOG &"
    ;;
  stop)
    echo "Stopping Mozilla Sync HomeServer"
    kill $PID &>/dev/null
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
    echo "usage: $0 {start|stop|restart}"
esac
exit 0

Créer le fichier de log :

touch /var/log/syncserver-messages.log

Changer les droits et lancer placer le scripte dans les différentes étapes d’init

chmod +x /etc/init.d/syncserver
insserv /etc/init.d/syncserver

Configuration de Firefox

Maintenant que notre serveur est en fonction, il nous reste à paramétrer Firefox, car par défaut il va aller chercher sur le serveur de mozilla.

Dans la barre d’adresse taper : about:config
Un message d’avertissement vous prévient que vous allez modifier les paramètres particuliers qui peuvent bloquer Firefox.

Dans la barre de recherche taper : tokenServer
Comme vous le voyez l’adresse actuel est : https://token.services.mozilla.com/1.0/sync/1.5

Il suffit de mettre : https://adresseVotreServeur.com/1.0/sync/1.5