Difference between revisions of "Firefox Sync Server"

From ArchWiki
Jump to: navigation, search
(Move to sub category.)
(Client configuration: clean up client config section)
 
(48 intermediate revisions by 17 users not shown)
Line 1: Line 1:
[[Category:Web Server]]
+
[[Category:Synchronization]]
[[Category:Daemons and system services]]
+
[[ja:‎Firefox Sync Server]]
This page is about special operations required in order to install Mozilla Sync Server.
+
[https://www.mozilla.org/en-US/firefox/features/sync/ Firefox Sync] is a protocol developed by Mozilla to synchronize a browser configuration and profile between different Firefox instances which could run on different platforms (e.g. mobile and desktop). In a default configuration, the user data is encrypted and stored on Mozilla servers.
  
Newer versions of Mozilla Firefox feature bookmarks, passwords, settings and browsing history synchronization between all your computers and devices. Mozilla Foundation provides a public Sync server, but you can host your own one if you want.
+
This page details on how to setup an own Firefox Sync Server and how to configure the client software to use it.
==Prerequisites==
+
== Server setup ==
===Dependencies===
 
Before proceeding, you need to [[pacman|install]] {{pkg|python2}}, {{pkg|python2-virtualenv}}, {{pkg|sqlite3}}, {{pkg|mercurial}} and {{pkg|make}}, all available in the [[official repositories]].
 
===Accessibility===
 
If you intend to use your server with itinerant clients, you should install it on an Internet reachable computer.
 
===Administration Rights===
 
All installation instructions are commands relying on the superuser privileges, so open a terminal and type:
 
{{bc|
 
$ su -
 
Password:
 
#
 
}}
 
 
 
==Installation==
 
Mozilla Sync Server depends on Python 2 during installation. Arch Linux provides Python 3 as default Python version so there are special tweaks needed before running Mozilla Sync Server setup.
 
Setup process creates an isolated Python environment in which all necessary dependencies are downloaded and installed. Afterwards, running the server only relies on the isolated Python environment, independently of the system-wide Python.
 
===Python preparation===
 
Mozilla Sync Server setup needs Python 2.6 or newer. In default configuration, {{ic|/usr/bin/python}} is a symbolic link to {{ic|/usr/bin/python3}} whereas Python 2 is {{ic|/usr/bin/python2}}.
 
 
 
Before running setup, we must check the link and change it if necessary:
 
{{bc|
 
# cd /usr/bin
 
# ls -l python
 
  
    lrwxrwxrwx 1 root root 7  5 sept. 07:04 python -> python3
+
=== Installation ===
  
# ln -sf python2 python
+
{{AUR|mozilla-firefox-sync-server}} is available in the [[AUR]].
}}
 
===Setup===
 
Installation instructions:
 
{{bc|
 
# mkdir -p /opt/weave
 
# cd /opt/weave
 
# hg clone https://hg.mozilla.org/services/server-full
 
  
      ... source repository cloning messages ...
+
=== Configuration ===
  
# cd server-full
+
One file is available to configure a firefox sync server: {{ic|/etc/webapps/mozilla-firefox-sync-server/syncserver.ini}}. Most options are explained clearly in the [http://docs.services.mozilla.com/howtos/run-sync-1.5.html official documentation]. You might want to change to variables, the accepted domain name ({{ic|public_url}}) and the database backend ({{ic|sqluri}}):
# make build
 
  
      ... many build messages, including harmless warnings ...
+
{{hc|/etc/webapps/mozilla-firefox-sync-server/syncserver.ini|<nowiki>
 +
public_url = https://sync.example.com
 +
sqluri = sqlite:////var/lib/mozilla-firefox-sync-server/syncserver.db
 +
</nowiki>}}
  
      ... end of the successful build messages:
+
=== Example nginx and uwsgi setup ===
  
Building the app
+
It is recommended to serve the firefox sync server with uwsgi in a production environement. In this case you have to install {{Pkg|uwsgi-plugin-python2}}. Create following uwsgi config file:
  Checking the environ  [ok]
 
  Updating the repo  [ok]
 
  Building Services dependencies
 
    Getting server-core    [ok]
 
    Getting server-reg    [ok]
 
    Getting server-storage    [ok]  [ok]
 
  Building External dependencies  [ok]
 
  Now building the app itself  [ok]
 
[done]
 
  
}}
+
{{hc|/etc/uwsgi/mozilla-firefox-sync-server.ini|<nowiki>
 +
[uwsgi]
 +
socket = /run/uwsgi/%n.sock
 +
uid = ffsync
 +
gid = ffsync
 +
chdir = /usr/share/webapps/mozilla-firefox-sync-server
 +
master = true
 +
plugins = python2
 +
file = syncserver.wsgi
 +
</nowiki>}}
  
Check the end of the build messages, they should state "[done]". Otherwise, look at the first error messages, they give you hints on the problem and how to solve it.
+
[[Enable]] and [[start]] the {{ic|uwsgi@mozilla\\x2dfirefox\\x2dsync\\x2dserver }} service.
  
===Python initial state restoration===
+
An example [[Nginx]] configuration looks something like this:
{{bc|
 
# cd /usr/bin
 
# ln -sf python3 python
 
}}
 
  
==Configuration==
+
{{hc|/etc/nginx/sites-enabled/sync.example.com|<nowiki>
===Server-side configuration files===
+
server {
Configuration files are used to define where databases and logs will be created.
+
  server_name sync.example.com;
We will place databases in {{ic|/opt/weave/data}} and log files in {{ic|/var/log/weave}}, so we must create the directories.
+
  access_log /var/log/nginx/sync.example.com.access.log;
# mkdir /opt/weave/data /var/log/weave
+
  error_log /var/log/nginx/sync.example.com.error.log info;
 +
  server_tokens off;
  
At least two configuration files must be changed in {{ic|/opt/weave/server-full}} in order to reflect these choices: {{ic|development.ini}} and {{ic|etc/sync.conf}}.
+
  client_max_body_size 15M;
  
In {{ic|development.ini}}, locate the line:
+
  location / {
{{bc|1=
+
    include uwsgi_params;
args = ('/tmp/sync-error.log',)
+
    uwsgi_pass unix:/run/uwsgi/mozilla-firefox-sync-server.sock;
}}
+
  }
and change it to:
+
}
{{bc|1=
+
</nowiki>}}
args = ('/var/log/weave/sync-error.log',)
 
}}
 
  
In {{ic|etc/sync.conf}}, locate the line:
+
== Client configuration ==
{{bc|1=
 
sqluri = sqlite:////tmp/test.db
 
}}
 
and change it to:
 
{{bc|1=
 
sqluri = sqlite:////opt/weave/data/sync.db
 
}}
 
This statement appears twice in the file, both should be modified.
 
  
Bump the disk quota from 5 to 25 MB:
+
{{Note|Since version 1.5 of the protocol, a [https://www.mozilla.org/en-US/firefox/accounts/ Firefox Account] is required in order to use the synchronization service.}}
{{bc|1=
+
To configure desktop Firefox to talk to your new Sync server, go to {{ic|about:config}}, search for {{ic|identity.sync.tokenserver.uri}} and change its value to the URL of your server with a path of {{ic|token/1.0/sync/1.5}}:
quota_size = 25600
 
}}
 
The fallback node URL must reflect the server's hostname (here {{ic|server-name.domain-name}}).
 
Change:
 
{{bc|1=
 
fallback_node = <nowiki>http://localhost:5000/</nowiki>
 
}}
 
to:
 
 
{{bc|1=
 
{{bc|1=
fallback_node = <nowiki>http://server-name.domain-name:5000/</nowiki>
+
identity.sync.tokenserver.uri: <nowiki>http://example.com/ffsync/token/1.0/sync/1.5</nowiki>
}}
 
 
 
===Unprivileged User===
 
It is a good practice to run daemons as an unprivileged user. Create the group {{ic|weave}} and the user {{ic|sync}} for that purpose:
 
{{bc|
 
# groupadd weave
 
# useradd -d /opt/weave -g weave -r -s /bin/bash sync
 
 
}}
 
}}
This new user must have read and write access on every file in {{ic|/opt/weave}} and {{ic|/var/log/weave}}
+
{{Tip| Enter {{ic|about:sync-log}} in the Firefox URL bar to get a list of logs related to Firefox Sync.}}
# chown -R sync:weave /opt/weave/*
 
# chown -R sync:weave /var/log/weave
 
 
 
===Automatic Startup of the Server===
 
In order to make the Sync Server start automatically at boot-time, create a startup script:
 
{{hc|
 
/etc/rc.d/mozillaweave|<nowiki>
 
#!/bin/bash
 
 
 
RUNDIR=/var/run/weave
 
DAEMON=/opt/weave/bin/python
 
PIDFILE=/var/run/weave.pid
 
MESSAGELOG=/var/log/weave/sync-messages.log
 
  
. /etc/rc.conf
+
== See also ==
. /etc/rc.d/functions
 
 
 
PID=`pidof -x -o %PPID paster`
 
case "$1" in
 
  start)
 
    stat_busy "Starting Mozilla Sync Server"
 
    [ -d $RUNDIR ] || mkdir $RUNDIR
 
    [ -z "$PID" ] && su sync -c "cd /opt/weave/server-full && bin/paster serve development.ini &>$MESSAGELOG &"
 
    if [ $? -gt 0 ]; then
 
      stat_fail
 
    else
 
      PID=`pidof -x -o %PPID paster`
 
      echo $PID >$PIDFILE
 
      add_daemon weave
 
      stat_done
 
    fi
 
    ;;
 
  stop)
 
    stat_busy "Stopping Mozilla Sync Server"
 
    [ ! -z "$PID" ]  && kill $PID &>/dev/null
 
    if [ $? -gt 0 ]; then
 
      stat_fail
 
    else
 
      rm_daemon weave
 
      stat_done
 
    fi
 
    ;;
 
  restart)
 
    $0 stop
 
    $0 start
 
    ;;
 
  *)
 
    echo "usage: $0 {start|stop|restart}" 
 
esac
 
exit 0
 
</nowiki>
 
}}
 
The script must have execution rights:
 
# chmod 755 /etc/rc.d/mozillaweave
 
Start the Sync Server at boot by including {{ic|mozillaweave}} in the [[Daemon]] list. It depends on the network so it should be placed accordingly.
 
===Client-side configuration===
 
Use the Sync Configuration Wizard in Firefox' Settings to create a new account on the server. Don't forget to choose "Custom server..." in the list, and input the server address: {{ic|<nowiki>http://server-name.domain-name:5000/</nowiki>}}
 
  
The "Advanced Settings" button allows fine tuning of the synchronized elements list, and the definition of the client hostname.
+
* [http://docs.services.mozilla.com/howtos/run-sync.html Official Mozilla Firefox Sync Server Howto]
==See also==
+
* [http://alien.slackbook.org/blog/setting-up-your-own-mozilla-sync-server/ Howto with Apache support by Eric Hameleers]
* [http://docs.services.mozilla.com/howtos/run-sync.html Mozilla Sync Server Howto]
+
* [https://tim.siosm.fr/blog/2012/12/11/firefox-sync-nginx-systemd/ Howto with nginx and systemd support by Timothée Ravier]
* [http://alien.slackbook.org/blog/setting-up-your-own-mozilla-sync-server/ Great tutorial, by Eric Hameleers]
+
* [http://amnesiak.org/blog/mozilla-sync-server-with-nginx.html Howto with nginx support]
 +
* [http://terminal28.com/how-to-install-and-configure-own-firefox-sync-server-weave-debian/ Howto using MySQL]
 +
* [[OwnCloud]] has mozilla sync server application

Latest revision as of 11:09, 14 March 2018

Firefox Sync is a protocol developed by Mozilla to synchronize a browser configuration and profile between different Firefox instances which could run on different platforms (e.g. mobile and desktop). In a default configuration, the user data is encrypted and stored on Mozilla servers.

This page details on how to setup an own Firefox Sync Server and how to configure the client software to use it.

Server setup

Installation

mozilla-firefox-sync-serverAUR is available in the AUR.

Configuration

One file is available to configure a firefox sync server: /etc/webapps/mozilla-firefox-sync-server/syncserver.ini. Most options are explained clearly in the official documentation. You might want to change to variables, the accepted domain name (public_url) and the database backend (sqluri):

/etc/webapps/mozilla-firefox-sync-server/syncserver.ini
public_url = https://sync.example.com
sqluri = sqlite:////var/lib/mozilla-firefox-sync-server/syncserver.db

Example nginx and uwsgi setup

It is recommended to serve the firefox sync server with uwsgi in a production environement. In this case you have to install uwsgi-plugin-python2. Create following uwsgi config file:

/etc/uwsgi/mozilla-firefox-sync-server.ini
[uwsgi]
socket = /run/uwsgi/%n.sock
uid = ffsync
gid = ffsync
chdir = /usr/share/webapps/mozilla-firefox-sync-server
master = true
plugins = python2
file = syncserver.wsgi

Enable and start the uwsgi@mozilla\\x2dfirefox\\x2dsync\\x2dserver service.

An example Nginx configuration looks something like this:

/etc/nginx/sites-enabled/sync.example.com
server {
  server_name sync.example.com;
  access_log /var/log/nginx/sync.example.com.access.log;
  error_log /var/log/nginx/sync.example.com.error.log info;
  server_tokens off;

  client_max_body_size 15M;

  location / {
    include uwsgi_params;
    uwsgi_pass unix:/run/uwsgi/mozilla-firefox-sync-server.sock;
  }
}

Client configuration

Note: Since version 1.5 of the protocol, a Firefox Account is required in order to use the synchronization service.

To configure desktop Firefox to talk to your new Sync server, go to about:config, search for identity.sync.tokenserver.uri and change its value to the URL of your server with a path of token/1.0/sync/1.5:

identity.sync.tokenserver.uri: http://example.com/ffsync/token/1.0/sync/1.5
Tip: Enter about:sync-log in the Firefox URL bar to get a list of logs related to Firefox Sync.

See also