O Firefox Sync é um recurso de sincronização do navegador que permite compartilhar seus dados e preferências (como favoritos, histórico, senhas, guias abertas e complementos instalados) em todos os seus dispositivos. A Mozilla também oferece um aplicativo “servidor de sincronização” para uso com o Firefox Sync para usuários e empresas que preferem hospedar seus próprios dados de sincronização. Este artigo mostra como configurar o Mozilla Sync Server.
Pré-requisitos
- Uma instância do servidor Site & Site Debian 8, Debian 9 ou Ubuntu 16.04 recém-implementada.
- Um usuário sudo .
Instale os pacotes necessários
Atualize o sistema:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
Para construir e executar o Sync Server, você precisará instalar estes pacotes:
python-dev
git
build-essential
(Compilador C ++, compilador GCC, make e outras ferramentas necessárias).sqlite3
(Se você quiser usar um banco de dados MySQL em vez deSQLite
, você pode substituir osqlite3
pacote commariadb-server
oumysql-server
).nginx
(servidor web. Cabe a você escolher de qual servidor web você quer usarapache2
ounginx
).
Instale os pacotes:
sudo apt-get install -y git git-core python-dev python-virtualenv build-essential sqlite3 nginx
Construindo o servidor
Vamos clonar o repositório Git do servidor de sincronização, digitando o seguinte comando e, em seguida, digite a pasta:
git clone https://github.com/mozilla-services/syncserver
cd syncserver
Execute o comando build que baixará as dependências e compilará o código.
make build
Configuração do servidor de sincronização
A configuração do servidor de sincronização é muito simples, existem apenas alguns parâmetros para alterar no arquivo de configuração ( ./syncserver.ini
).
Abra o arquivo de configuração com seu editor de texto favorito (por exemplo 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 = http://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
O endereço do seu servidor deve ser especificado através do parâmetro public_url
:
public_url = http://fsync.example.com
Nota : o valor padrão de public_url
“http: // localhost: 5000 /” funcionará para fins de teste em sua máquina local.
Na sqluri
opção, descomentaremos e colocaremos a localização ou URI
isso permitirá que o servidor conecte o banco de dados e armazene as informações:
sqluri = sqlite:////path/to/database/file.db
Se você quiser usar outro tipo de DB:
sqluri = pymysql://username:[email protected]/sync
Para o secret
parâmetro ” “, teremos que gerar uma chave secreta para os tokens de autenticação:
head -c 20 /dev/urandom | sha1sum
Descomente a linha do parâmetro secreto e copie / cole a string retornada no parâmetro secreto:
secret = db8a203aed5fe3e4594d4b75990acb76242efd35
Nota : Se você não colocar nada neste parâmetro, o servidor irá gerar um, mas será diferente cada vez que o servidor for reiniciado.
Para o allow\_new\_users
parâmetro ” “, remova o comentário e configure-o true
para permitir que a nossa conta se conecte ao nosso servidor pela primeira vez:
allow_new_users = true
Nós modificaremos o audiences
parâmetro ” ” e colocaremos a mesma coisa que o public_uri
parâmetro ” ” sem esquecer de descomentar a linha:
audiences = http://fsync.example.com
Por fim, basta adicionar a seguinte linha ao final do seu arquivo:
forwarded_allow_ips = *
Esta linha ajudará você a evitar mensagens de erro e problemas de autorização.
Iniciando o Sync Server
Para iniciar o servidor de sincronização, você pode iniciar o seguinte comando:
./path/to/syncserver/local/bin/gunicorn --threads 4 --paste /path/to/syncserver/syncserver.ini &
… ou este aqui:
make serve &
A primeira opção permite escolher o local do arquivo de configuração; e também para colocar o argumento --threads 4
, que permite atribuir mais poder ao servidor de sincronização.
Para iniciar o servidor toda vez que sua instância for inicializada, você pode adicionar a seguinte linha ao seu crontab, digitando o crontab -e
comando:
@reboot ./path/to/syncserver/local/bin/gunicorn --paste /path/to/syncserver/syncserver.ini &
Configuração do servidor web
Você pode usar diferentes servidores da Web compatíveis com o WSGI
protocolo. Por exemplo:
Nginx
com o uWSGI.Apache
combinado com mod_wsgi.
Nginx
Para o Nginx, você tem que usar o proxy embutido do Nginx como mostrado abaixo:
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 http://127.0.0.1:5000/;
}
}
Nginx + uWSGI
É possível que os usuários do Nginx usem apenas o soquete WSGI.
Instalar uWSGI
via Pip:
pip install uwsgi
Instale uWSGI
via download de um tarball de origem:
wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd <dir>
make
Nota : Após a construção, você terá um uwsgi
binário no diretório atual.
Uma vez instalado, inicie-o com as seguintes opções:
uwsgi --plugins python27 --manage-script-name \
--mount /<location>=/path/to/syncserver/syncserver.wsgi \
--socket /path/to/uwsgi.sock
Em seguida, use a seguinte configuração do Nginx:
location /<location>/ {
include uwsgi_params;
uwsgi_pass unix:/path/to/uwsgi.sock;
}
Apache
Instalar mod_wsgi
:
apt-get install libapache2-mod-wsgi
Em seguida, use o seguinte vhost:
<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>
Configurar o cliente (Firefox)
Depois que o servidor tiver sido instalado e configurado, você deverá configurar o cliente Firefox da área de trabalho para conversar com o novo Sync Server. Antes de começar, se você já estiver conectado ao Firefox Sync Servers, será necessário efetuar logout. Caso contrário, a conexão com o novo servidor pode não funcionar.
Primeiro, abra uma nova aba e digite o seguinte endereço:
about:config
Na barra de pesquisa, insira identity.sync.tokenserver.uri
e altere seu valor para o URL do seu servidor com um caminho de token/1.0/sync/1.5
:
http://sync.example.com/token/1.0/sync/1.5