设置 Firefox CentOS 6 上的同步服务器

Firefox 同步 是一种浏览器同步功能,可让您在所有设备上共享数据和首选项(例如书签、历史记录、密码、打开的选项卡和已安装的加载项)。 Mozilla 还提供了一个“同步服务器”应用程序供 Firefox 为喜欢托管自己的同步数据的用户和企业同步。 本文向您展示了怎样设置 Mozilla Sync Server。

先决条件

  • 一个新部署的 Vultr CentOS 6
  • 一种 sudo 用户。

安装必要的包

更新系统:

sudo yum check-update

要构建和运行 Sync Server,您需要安装以下软件包:

  • Mecurial
  • sqlite3
  • git
  • Python 2.6.6
  • Python 2.6.6 virtualenv
  • Python 2.6.6 SetupTools
  • Python 2.6.6 Developer Tools

安装最新版本的 Mercurial:

sudo yum install mercurial

安装所需的开发工具和库:

yum groupinstall 'Development Tools' 'Development Libraries'
yum install tk-devel libjpeg-devel mysql-devel python-devel httpd-devel zlib-devel bzip2-devel

安装 SQLite3:

sudo yum install sqlite

安装和构建 Python 2.6.6:

cd $home
sudo wget https://python.org/ftp/python/2.6.6/Python-2.6.6.tgz
sudo tar xzvf Python-2.6.6.tgz
cd $home/Python-2.6.6
sudo ./configure --prefix=/opt/python2.6 --enable-thread --enable-shared --enable-unicode=ucs4
sudo make
sudo make install

构建服务器

我们将克隆同步服务器的Git仓库,然后进入文件夹:

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

运行 build 命令,它将下载依赖项并编译代码:

make build

启动 Sync Server 并验证它是否正常工作:

bin/paster serve development.ini

你会看到这样的事情:

Starting server in PID 5952.
serving on 0.0.0.0:5000 view at https://127.0.0.1:5000

同步服务器配置

同步服务器的配置很简单,只需要在配置文件中更改几个参数即可(./syncserver.ini)。

使用您喜欢的文本编辑器打开配置文件(对于 example nano ./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 = https://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

[browserid]
# 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.
#backend = tokenserver.verifiers.LocalVerifier
#audiences = https://localhost:5000

# By default, syncserver will accept identity assertions issues by
# any server. You can restrict this by setting the below to a list
# of allowed issuer domains.
#allowed_issuers = www.mysite.com myfriendsdomain.org

您的服务器地址必须通过参数指定 public_url

public_url = https://fsync.example.com

笔记: 默认值 public_url, https://localhost:5000/, 将在您的本地机器上用于测试目的。

我们将取消注释 sqluri 选项并放置位置,或 URI,这将允许服务器连接数据库并存储其信息:

sqluri = sqlite:////path/to/database/file.db

如果要使用其他类型的数据库:

sqluri = pymysql://username:[email protected]/sync

为了 secret 参数,我们必须为身份验证令牌生成一个密钥:

head -c 20 /dev/urandom | sha1sum

取消注释秘密参数的行,然后将返回的字符串复制/粘贴到秘密参数中:

secret = db8a203aed5fe3e4594d4b75990acb76242efd35

笔记: 如果这个参数不加任何东西,服务器会生成一个,但是每次重启服务器都不一样。

取消注释 allow_new_users 参数并将其设置为 true 允许我们的帐户首次连接到我们的服务器:

allow_new_users = true

然后我们将取消注释 audiences 参数并把相同的东西作为 public_uri 范围:

audiences = https://fsync.example.com

最后,只需将以下行添加到文件末尾:

forwarded_allow_ips = *

此行将帮助您避免错误消息和授权问题。

启动同步服务器

要启动同步服务器,您可以使用以下任一命令:

./path/to/syncserver/local/bin/gunicorn --threads 4 --paste /path/to/syncserver/syncserver.ini &

这允许您选择配置文件的位置; 以及提出论点 --threads 4,这允许为同步服务器分配更多的权力。

要在每次实例启动时启动服务器,您可以通过键入以下行将以下行添加到您的 crontab crontab -e 命令:

@reboot ./path/to/syncserver/local/bin/gunicorn --paste /path/to/syncserver/syncserver.ini &

网络服务器配置

您可以使用与 WSGI 协议。 为了 example:

  • Nginx 与uWSGI。
  • Apache 结合 mod_wsgi。

nginx

对于 Nginx,您必须使用 Nginx 的内置代理,如下所示:

server {
        listen  80;
        server_name fsync.example.com;

        location / {
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_redirect off;
                proxy_read_timeout 120;
                proxy_connect_timeout 10;
                proxy_pass https://127.0.0.1:5000/;
        }
}

Nginx + uWSGI

Nginx 用户可以只使用 WSGI 套接字。

安装 uWSGI 通过点子:

pip install uwsgi

安装 uWSGI 通过下载源 tarball:

wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd <dir>
make

笔记: 构建完成后,您将拥有一个 uwsgi 当前目录下的二进制文件。

安装后,使用以下选项启动它:

uwsgi --plugins python27 --manage-script-name 
--mount /<location>=/path/to/syncserver/syncserver.wsgi 
--socket /path/to/uwsgi.sock

然后使用以下 Nginx 配置:

location /<location>/ {
include uwsgi_params;
uwsgi_pass unix:/path/to/uwsgi.sock;
}

Apache

安装 mod_wsgi

apt-get install libapache2-mod-wsgi

然后使用以下虚拟主机:

<VirtualHost *:80>
  ServerName sync.example.com
  DocumentRoot /path/to/syncserver
  WSGIProcessGroup sync
  WSGIDaemonProcess sync user=sync group=sync processes=2 threads=25 python-path=/path/to/syncserver/local/lib/python2.7/site-packages/
  WSGIPassAuthorization On
  WSGIScriptAlias / /path/to/syncserver/syncserver.wsgi
  CustomLog /var/log/apache2/sync.example.com-access.log combined
  ErrorLog  /var/log/apache2/sync.example.com-error.log
</VirtualHost>

配置客户端(Firefox)

安装和配置服务器后,您可以配置桌面 Firefox 客户端与您的新同步服务器交谈。 在开始之前,如果您已经连接到 Firefox 同步服务器,您必须注销。 否则,与新服务器的连接可能无法正常工作。

首先,打开一个新选项卡并输入以下地址:

about:config

在搜索栏中,输入 identity.sync.tokenserver.uri 并将其值更改为您的服务器的 URL,路径为 token/1.0/sync/1.5

https://sync.example.com/token/1.0/sync/1.5

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com