---
comments_url: https://com.richard-dern.fr/post/547
date: '2016-02-22 22:22:28'
entreprises:
- Mozilla
links:
- lang: fr
name: Page d'origine sur LinuxFr
url: https://linuxfr.org/users/richarddern/journaux/installer-un-serveur-firefox-accounts-et-firefox-sync
tags:
- Firefox Sync
- Auto-hébergement
- Firefox
- Cloud
- Navigateur
- Plus
- Certificats
- Serveur
- Sources
- Chiffrement
- Web
title: Installer un serveur Firefox Accounts et Firefox Sync
weather:
humidity: 78
illuminance: 0.0
precipitations: false
pressure: 1010.1
source:
- open-meteo
temperature: 8.4
wind_direction: 238
wind_speed: 22.5
---
> Depuis longtemps Firefox, comme d'autres navigateurs, permet de stocker ses données dans le Cloud pour pouvoir les sauvegarder et facilement les partager entre plusieurs instances du navigateur.
> Et en plus, on peut l'auto-héberger !
> Suivez le guide.
## Pré-requis globaux
On va partir du principe qu'on veut un backend sous MySQL.
- git
- [node](https://nodejs.org/en/download/)
- [bower](http://bower.io/)
- mysql ou équivalent
Je recommande de tout mettre dans _/opt_, mais vous êtes libres de faire comme bon vous semble.
L'ensemble préfère naturellement les connexions chiffrées.
Équipez-vous donc de certificats (personnellement, j'opte pour un par serveur accessible de l'extérieur), faut de quoi votre serveur de synchronisation ne fonctionnera pas correctement.
## Backend MySQL
On récupère les sources:
```
git clone https://github.com/mozilla/fxa-auth-db-mysql.git
cd fxa-auth-db-mysql
npm install
```
On créé le fichier de configuration:
```
nano config/prod.json
```
```
{
"master": {
"host": "127.0.0.1",
"user": "root",
"password": "",
"database": "fxaccounts"
},
"slave": {
"host": "127.0.0.1",
"user": "root",
"password": "",
"database": "fxaccounts"
}
}
```
Notez que comme _fxa-auth-server_ et _fxa-content-server_ que nous verrons plus loin, _fxa-auth-db-mysql_ fait appel à [convict](https://github.com/mozilla/node-convict) pour la gestion de la configuration.
Si vous avez besoin d'autres paramètres de configuration que ceux que nous venons de créer, regardez le fichier _config/config.js_, et modifiez le fichier _config/prod.json_ en conséquence.
Notez également que la base de données n'a pas besoin d'être créée à l'avance.
Vous pouvez ensuite démarrer le serveur et vous assurer que tout va bien:
```
npm start
```
## fxa-auth-server
```
cd /opt
git clone https://github.com/mozilla/fxa-auth-server.git
cd fxa-auth-server
npm install
```
Lancez une première fois le serveur pour générer les clés de chiffrement:
```
npm start
```
Vous devriez voir la sortie suivante:
```
> npm start
> fxa-auth-server@1.56.0 start /opt/fxa-auth-server
> NODE_ENV=dev scripts/start-local.sh 2>&1
Generating keypair
Secret Key saved: /opt/fxa-auth-server/config/secret-key.json
Public Key saved: /opt/fxa-auth-server/config/public-key.json
fxa-auth-server.INFO: [...]
```
Arrêtez ensuite le serveur en faisant Control + C
Modifiez le fichier de configuration:
```
nano .env.dev
```
```
PUBLIC_URL=https://ffaccounts.example.org
IP_ADDRESS=0.0.0.0
CONTENT_SERVER_URL=https://ffcontent.example.org
[...]
USE_TLS=true
TLS_KEY_PATH=/etc/ssl/private/ffaccounts.key
TLS_CERT_PATH=/etc/ssl/private/ffaccounts.crt
```
Dans le cas présent, remplacez les domaines par les vôtres.
Notez que l'on va [reverse-proxyfier](https://fr.wikipedia.org/wiki/Proxy_inverse) tout ça, donc dans votre serveur web préféré, il faudra configurer un reverse proxy pour _ffaccounts.example.org_ pointant sur l'adresse de votre serveur (127.0.0.1 si le serveur web et le serveur de comptes firefox sont sur la même machine) et sur le port 9000.
De même, le reverse proxy de _ffcontent.example.org_ pointera sur le serveur de contenu (voir plus bas) sur le port 3030.
Démarrez le serveur afin de vous assurer que tout va bien:
```
npm start
```
Vous devriez voir un bloc JSON avec votre configuration.
## fxa-content-server
```
cd /opt
git clone https://github.com/mozilla/fxa-content-server.git
cd fxa-content-server
npm install
```
Si vous installez _fxa-content-server_ en tant que root, entrez la commande suivante:
```
bower --allow-root update --config.interactive=false -s
```
Si vous ne l'installez pas en tant que root:
```
npm postinstall
```
Lancez le serveur:
```
npm start
```
Ce qui aura pour effet de créer le fichier _server/config/local.json_.
Il se peut que cette commande s'arrête brusquement:
```
fxa-content-server.CRITICAL: uncaughtException Error: ENOENT: no such file or directory, open '/opt/fxa-content-server/node_modules/express-able/node_modules/able/bundle.js'
```
Lancez la commande suivante pour corriger le problème:
```
cd /opt/fxa-content-server/node_modules/express-able/node_modules/able/
npm run bundle
```
Puis, relancez le serveur:
```
cd /opt/fxa-content-server
npm start
```
Cette fois, il ne devrait plus y avoir d'erreur.
Arrêtez le serveur avec Control + C, il faut maintenant le configurer.
```
nano server/config/local.json
```
```
{
"public_url": "https://ffcontent.example.org",
"fxaccount_url": "https://ffaccounts.example.org",
"oauth_client_id": "98e6508e88680e1a",
"oauth_url": "http://127.0.0.1:9010",
"profile_url": "http://127.0.0.1:1111",
"profile_images_url": "http://127.0.0.1:1112",
"client_sessions": {
"cookie_name": "session",
"secret": "YOU MUST CHANGE ME",
"duration": 86400000
},
"env": "development",
"use_https": false,
"static_max_age" : 0,
"i18n": {
"supportedLanguages": ["af", "an", "ar", "as", "ast", "az", "be", "bg", "bn-BD", "bn-IN", "br", "bs", "ca", "cs", "cy", "da", "de", "dsb", "el", "en", "en-GB", "en-ZA", "eo", "es", "es-AR", "es-CL", "es-MX", "et", "eu", "fa", "ff", $
},
"route_log_format": "dev_fxa",
"logging": {
"fmt": "pretty",
"level": "debug"
},
"static_directory": "app",
"allowed_parent_origins": ["http://127.0.0.1:8080"],
"csp": {
"enabled": true,
"reportUri": "/_/csp-violation"
}
}
```
Le plus important est de changer l'URL public pour qu'il corresponde à la variable _CONTENT_SERVER_URL_, que l'on a spécifié dans la configuration de _fxa-auth-accounts_.
Assurez-vous aussi de rajouter _fxaccount_url_ puisque ce paramètre n'existe pas dans la configuration générée automatiquement.
Une fois la configuration faite, on relance le serveur:
```
npm start
```
On devrait maintenant pouvoir se connecter, créer son compte et le valider par mail.
Accédez à votre serveur avec l'adresse `_https://ffcontent.example.org_` (en remplaçant bien sûr par votre propre domaine), et créez le compte.
Une fois la validation par mail effectuée, une "erreur inattendue" apparaitra.
Je ne sais pas à quoi elle est dûe, mais ne semble pas affecter négativement la suite.
On ne s'en soucie donc pas pour l'instant, mais si quelqu'un a une explication/solution, je suis preneur !
## Serveur de synchronisation
Enfin, dernière pièce de notre puzzle, le serveur de synchronisation.
La [page dédiée](http://docs.services.mozilla.com/howtos/run-sync-1.5.html) de la documentation fournie par Mozilla est plus accessible et plus à jour que celles concernant le serveur Firefox Accounts.
Voici tout de même mon guide, par soucis de centralisation et d'exhaustivité.
Les paquets suivants sont requis:
```
python-dev git-core python-virtualenv g++
```
On récupère les sources et on compile:
```
cd /opt
git clone https://github.com/mozilla-services/syncserver
cd syncserver
make build
```
On configure:
```
nano syncserver.ini
```
```
[syncserver]
public_url = https://ffsync.example.org/
sqluri = pymysql://root:motdepasse@127.0.0.1/fxsync
force_wsgi_environ = true
[browserid]
backend = tokenserver.verifiers.LocalVerifier
audiences = https://ffsync.example.org
```
Contrairement à _fxa-auth-db-mysql_, ici la base de données doit être créée avant de lancer le serveur.
Dans mon cas, je l'ai nommée _fxsync_.
Là aussi, on va créer un reverse proxy dans son serveur web préféré, pour _ffsync.example.org_ vers l'adresse du serveur de synchronisation, sur le port 5000.
On place la variable _force_wsgi_environ_ à _true_ pour éviter que le scheme ne pose problème avec le reverse proxy (qui est en HTTPs) et ce serveur (qui est en HTTP).
Mettez à jour la valeur de _secret_, comme indiqué en commentaire dans le fichier.
On peut lancer le serveur:
```
make serve
```
## Configuration de firefox
Maintenant que tout est installé, reste à configurer firefox pour prendre en compte notre propre serveur de synchronisation.
Fiez-vous à la capture d'écran suivante pour ajuster vos paramètres (dans _about:config_):

Remplacez les domaines par les vôtres, bien entendu.
Remarquez qu'une option _identity.fxaccounts.allowHttp_ a été créée.
Si vous voulez vous aventurer à créer un serveur de synchronisation sans chiffrement, positionnez cette valeur à _true_.
Enfin, rendez-vous dans les options, onglet "Sync", et connectez-vous avec le compte précédemment créé.
Firefox devrait pouvoir se synchroniser sans problème.
À noter que si vous cliquez sur le lien "Gérer le compte" une fois configuré, vous aurez la même erreur inattendue que précédemment, ce qui m'incite à croire qu'elle est liée à l'absence d'un serveur d'identité.
Mais je laisse ça à un hypothétique futur article.