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
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
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é.
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
docker pull mozilla/fxa-auth-server:v1.192.0 docker pull mozilla/fxa-content-server:v1.192.0
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.