Table des matières

, , , ,

Installation de Firefox syncserver via Docker

L'image peut être construite à partir des sources disponible sur github à l'URL https://github.com/mozilla-services/syncserver

Cependant le plus simple reste d'utiliser directement l'image mise à disposition sur le hub docker à l'URL https://hub.docker.com/r/mozilla/syncserver

Test

Récupérer l'image

docker pull mozilla/syncserver:1.9.1

Créer un volume pour la persistance des données

docker volume create ffsync_data
# générer une clé secrète
$ head -c 20 /dev/urandom | sha1sum
594b47df21329................f192d9f4726
 
# définir la variable d'environnement avec la clé précédemment construite
$ docker run --rm --name ffsync \
    -p 5000:5000 \
    -e SYNCSERVER_PUBLIC_URL=http://localhost:5000 \
    -e SYNCSERVER_SECRET=594b47df21329................f192d9f4726 \
    -e SYNCSERVER_SQLURI=sqlite:////tmp/syncserver.db \
    -e SYNCSERVER_BATCH_UPLOAD_ENABLED=true \
    -e SYNCSERVER_FORCE_WSGI_ENVIRON=false \
    -e SYNCSERVER_DEBUG_ENABLED=true \
    -e PORT=5000 \
    mozilla/syncserver:1.9.1

Si l'on souhaite maintenir masquée la clé secrète on peut utiliser un fichier plutôt que directement la variable d'environnement:

# Générer la clé dans un fichier
$ head -c 20 /dev/urandom | sha1sum > ./secret-key.txt
 
docker run --rm --name ffsync \
    -p 5000:5000 \
    -e SYNCSERVER_PUBLIC_URL=http://localhost:5000 \
    -e SYNCSERVER_SECRET_FILE=/etc/ffsync/secret-key.txt \
    -e SYNCSERVER_SQLURI=sqlite:////tmp/syncserver.db \
    -e SYNCSERVER_BATCH_UPLOAD_ENABLED=true \
    -e SYNCSERVER_FORCE_WSGI_ENVIRON=false \
    -e PORT=5000 \
    -v ./secret-key.txt:/etc/ffsync/secret-key.txt  \
    mozilla/syncserver:1.9.1
L'image docker s'exécute avec l' UID/GID 1001/1001. Cet utilisateur doit avoir le droit en lecture sur le fichier secret-key.txt

Lancer un shell bash dans le conteneur puis lancer l’exécution des tests:

$ docker container exec -it ffsync /bin/bash
 
/usr/local/bin/python -m syncstorage.tests.functional.test_storage \
    --use-token-server http://localhost:5000/token/1.0/sync/1.5

Depuis un poste client, essayer de contacter le serveur via l'URL:

curl --silent "http://server.example.tld:5000/token/1.0/sync/1.5" | jq
{
  "status": "error",
  "errors": [
    {
      "location": "body",
      "name": "",
      "description": "Unauthorized"
    }
  ]
}

Ici le serveur est bien à l'écoute, il répond que l'accès n'est pas autorisé.

docker-compose

docker-compose.yml
version: '3.7'
services:
    syncserver:
        container_name: syncserver
        image: mozilla/syncserver:latest
        volumes:
            - /syncserver:/data
        ports:
            - 5000:5000
        environment:
            SYNCSERVER_PUBLIC_URL: 'http://localhost:5000'
            SYNCSERVER_SECRET: '<PUT YOUR SECRET KEY HERE>'
            SYNCSERVER_SQLURI: 'sqlite:////data/syncserver.db'
            SYNCSERVER_BATCH_UPLOAD_ENABLED: 'true'
            SYNCSERVER_FORCE_WSGI_ENVIRON: 'false'
            PORT: '5000'
        restart: always

Configurer ffsync derrière Traefik

Serveur d'authentification

docker pull mozilla/fxa-auth-server:v1.192.0
docker pull mozilla/fxa-content-server:v1.192.0

Production

Le serveur écoutant par défaut sur le port 5000 ne devrait pas être utilisé en production. Il ne sera pas en capacité de tenir une forte charge. Pour la mise en production il est recommandé d'utiliser un serveur web Apache ou Nginx avec leurs modules respectifs permettant le support du protocole WSGI.

Références