Eigener Firefox Syncserver 1.5 auf Ubuntu 16.04 LTS

17.06.2016 at 21:16

23.06.2016

Firefox Syncserver 1.5 und Accountserver - Neue, noch nicht komplette Installationsanleitung

Mein "alter" Syncserver auf Ubuntu 14.04 LTS ist weiterhin im Betrieb und arbeitet noch immer ohne Probleme. Eine Neuinstallation funktioniert so nicht mehr, da sich einiges in dieser Zeit geändert hat. Dazu gekommen ist ein OAuth Server und ein Profile Server. Ohne diese scheint der Contentserver nicht mehr richtig zu funktionieren. Der OAuth und der Profile Server fehlen noch in dieser Installationsanleitung. Das Problem dabei ist die Konfiguration, da es dazu keine richtige Dokumentation gibt. Wer möchte kann gerne mitmachen, um die Anleitung zu vervollständigen.

Es ist mir nicht möglich, Support zu leisten. Möchte man sich gegenseitig helfen, kann dies über das Forum geschehen. Wenn es die Zeit zulässt, werde ich mich daran beteiligen.

Hier geht es zum Forum.

Der Syncserver ist noch nicht komplett und besteht aus folgenden Komponenten:

• Accounts Authentication Server (fxa-auth-db-server)
• Accounts Server (fxa-auth-server)
• Accounts Contentserver (fxa-content-server)
• OAuth Server (fxa-oauth-server) ist noch nicht vorhanden!
• Profile Server (fxa-profile-server) ist noch nicht vorhanden!
• Syncserver
• Nginx Reverse Proxy

Die Beschreibung zu den jeweiligen Schritten ist wieder auf das Notwendigste beschränkt. Empfehlenswert ist die Installation in einer VM z.B. Virtualbox. Damit lässt sich das System ohne Neuinstallation leicht zurücksetzen.

Die Basis für die Installation ist ein Ubuntu Server 16.04 LTS mit aktuellem Stand. Daher nochmal das System aktualisieren.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo reboot

Für den Syncserver wird weiterhin Python 2.7 benötigt.

Paketquelle für Python 2.7 hinzufügen.

sudo add-apt-repository 'deb http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial main'

Um die Paketquelle zu verwenden, sollte man den Signatur-Schlüssel einspielen.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5BB92C09DB82666C

sudo apt-get update

Anschließend werden alle notwendigen Pakete installiert. Postfix ist stellvertretend und muss abschließen konfiguriert werden. Dazu gibt es im Wiki von Ubuntu eine Beschreibung Link. Bei der Installation von MySQL wird man aufgefordert, ein root Passwort zu vergeben. Dieses wird dann später für das Anlegen der Datenbanken benötigt.

Wichtig! Ubuntu Server 16.04 LTS verwendet für den Systemstart systemd statt Upstart. Durch die Installation der Pakete upstart und upstart-sysv wird wieder das "alte" Upstart aktiviert.

sudo apt-get install make gcc g++ upstart upstart-sysv curl python python-dev python-virtualenv mysql-server nginx postfix

Zusätzlich ist noch das aktuelle nodesjs notwendig, npm wird automatisch mit installiert. Das ist eigentlich mit der wichtigste Punkt bei der Installation. Diese Komponenten müssen so aktuell wie möglich sein.

curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
sudo apt-get install nodejs

Erstellen eines Systembenutzer fxcloud.

sudo adduser --disabled-password --disabled-login fxcloud

Die Angaben zum User kann man mit der Entertaste überspringen.

Lege Benutzer »fxcloud« an ...
Lege neue Gruppe »fxcloud« (1001) an ...
Lege neuen Benutzer »fxcloud« (1001) mit Gruppe »fxcloud« an ...
Erstelle Home-Verzeichnis »/home/fxcloud« ...
Kopiere Dateien aus »/etc/skel« ...
Changing the user information for fxcloud
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Sind diese Informationen korrekt? [J/n] J


Auth-DB Server

Installation
Konfiguration MySQL

Mit dem, bei der Installation von MySQL vergebenen root Passwort anmelden.

mysql -u root -p

Die Datenbank fxacc für den Auth-DB Server anlegen und ein Passwort für diese Datenbank vergeben.

CREATE DATABASE fxacc;
CREATE USER 'fxacc'@'localhost' IDENTIFIED BY 'dein-passwort';
GRANT ALL PRIVILEGES ON fxacc.* TO 'fxacc'@'localhost';
FLUSH PRIVILEGES;
quit

Als Systembenutzer fxcloud einloggen.

sudo -i -u fxcloud

Installation des Auth-DB Server.

git clone https://github.com/mozilla/fxa-auth-db-mysql.git
cd fxa-auth-db-mysql
npm install

es dauert...

Konfiguration

fxcloud@ubuntu:~/fxa-auth-db-mysql$ vi config/prod.json

Die Konfigurationsdatei prod.json wird mit folgenden Inhalt neu angelegt:

{
"master": {
"user": "fxacc",
"password": "dein-passwort",
"database": "fxacc"
},
"slave": {
"user": "fxacc",
"password": "dein-passwort",
"database": "fxacc"
}
}

Anschließend das für die Datenbank fxacc vergebene Passwort eintragen und speichern.


Auth-Server

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Anschließend den Auth-Server installieren.

git clone git://github.com/mozilla/fxa-auth-server.git
cd fxa-auth-server
npm install

es dauert...

Test des Auth-Server:

npm test

Bei einem abschließenden Done, without errors. war die Installation erfolgreich.

Konfiguration

Die Konfigurationsdatei .env.dev mit folgenden Inhalt anlegen:

fxcloud@ubuntu:~/fxa-auth-server$ vi .env.dev

PUBLIC_URL=https://fxaccount-api.domain.tld
CONTENT_SERVER_URL=https://fxaccount.domain.tld
SMTP_HOST=smtp.domain.tld
SMTP_PORT=25
SMTP_SECURE=false
SMTP_SENDER=Firefox Accounts Server <fxacc@domain.tld>
SMTP_USER=fxacc@domain.tld
LOG_LEVEL=warn
VERIFIER_VERSION=0
CUSTOMS_SERVER_URL=none
RESEND_BLACKOUT_PERIOD=0
LOCKOUT_ENABLED=true
SNS_TOPIC_ARN=disabled
TRUSTED_JKUS=http://127.0.0.1:8080/.well-known/public-keys,http://127.0.0.1:10139/.well-known/public-keys

Die rot markierten Stellen entsprechend anpassen / hinzufügen.


Contentserver

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Anschließend den Contentserver installieren.

git clone https://github.com/mozilla/fxa-content-server.git

Mit Strg + D kurzzeitig für die grunt-cli Installation als User fxcloud ausloggen.

sudo npm install -g grunt-cli

Als Systembenutzer fxcloud einloggen.

sudo -i -u fxcloud

Installation des Contentserver.

cd fxa-content-server
npm install

es dauert...

Konfiguration

Unter server/config/local.json-dist befindet sich eine Konfigurationsdatei als Vorlage für den Contentserver. Diese wird für die weiteren Anpassungen kopieren und als local.json abgespeichert.

fxcloud@ubuntu:~/fxa-content-server$
cp server/config/local.json-dist server/config/local.json

fxcloud@ubuntu:~/fxa-content-server$ vi server/config/local.json

{
"public_url": "https://fxaccount.domain.tld",
"fxaccount_url": "https://fxaccount-api.domain.tld",

"oauth_client_id": "98e6508e88680e1a",
"oauth_url": "http://127.0.0.1:9010",
"profile_url": "http://127.0.0.1:1111",
"profile_images_url": "http://127.0.0.1:1112",
"client_sessions": {
"cookie_name": "session",
"secret": "selbst-gewähltes-secret",
"duration": 86400000
},
"env": "production",
"use_https": false,
"static_max_age" : 0,
"i18n": {
"supportedLanguages": ["af", "an", "ar", "as", "ast", "az", "be", "bg", "bn-BD", "bn-IN", "br", "bs", "ca", "cs", "cy", "da", "de", "dsb", "el", "en", "en-GB", "en-ZA", "eo", "es", "es-AR", "es-CL", "es-MX", "et", "eu", "fa", "ff", "fi", "fr", "fy", "fy-NL", "ga", "ga-IE", "gd", "gl", "gu", "gu-IN", "he", "hi-IN", "hr", "hsb", "ht", "hu", "hy-AM", "id", "is", "it", "it-CH", "ja", "kk", "km", "kn", "ko", "ku", "lij", "lt", "lv", "mai", "mk", "ml", "mr", "ms", "nb-NO", "ne-NP", "nl", "nn-NO", "or", "pa", "pa-IN", "pl", "pt", "pt-BR", "pt-PT", "rm", "ro", "ru", "si", "sk", "sl", "son", "sq", "sr", "sr-LATN", "sv", "sv-SE", "ta", "te", "th", "tr", "uk", "ur", "vi", "xh", "zh-CN", "zh-TW", "zu"]
},
"route_log_format": "dev_fxa",
"logging": {
"fmt": "pretty",
"level": "warn"
},
"static_directory": "app",
"allowed_parent_origins": ["http://127.0.0.1:8080"],
"csp": {
"enabled": true,
"reportUri": "/_/csp-violation"
}
}

Die rot markierten Stellen müssen entsprechend angepasst werden.


OAuth Server

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Installation des OAuth Server.

git clone https://github.com/mozilla/fxa-oauth-server.git
cd fxa-oauth-server
npm install

es dauert...

Konfiguration

...


Profile Server

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Installation des Profile Server.

git clone https://github.com/mozilla/fxa-profile-server.git
cd fxa-profile-server
npm install

es dauert...

Konfiguration

...


Syncserver

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Konfiguration MySQL

Mit dem, bei der Installation von MySQL vergebenen root Passwort anmelden.

mysql -u root -p

Die Datenbank fxsync für den Syncserver anlegen und ein Passwort für diese Datenbank vergeben.

CREATE DATABASE fxsync;
CREATE USER 'fxsync'@'localhost' IDENTIFIED BY 'dein-passwort';
GRANT ALL PRIVILEGES ON fxsync.* TO 'fxsync'@'localhost';
FLUSH PRIVILEGES;
quit

Danach erfolgt die Installation des Syncservers.

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

es dauert...

Für eine bessere Performance des Syncservers noch den Gunicorn Python WSGI Server installieren.

fxcloud@ubuntu:~/syncserver$ ./local/bin/easy_install gunicorn

Konfiguration

fxcloud@ubuntu:~/syncserver$ vi syncserver.ini

[server:main]
use = egg:gunicorn
host = 127.0.0.1
port = 5000
workers = 2
timeout = 60

[app:main]
use = egg:syncserver

[syncserver]
public_url = https://fxsync.domain.tld/
sqluri = pymysql://fxsync:dein-passwort@127.0.0.1/fxsync
secret = aaa588f154f12f90a3457e7d5180dfd07cdeedca

[browserid]
backend = tokenserver.verifiers.LocalVerifier
audiences = https://fxsync.domain.tld

• Der Schrägstrich am Ende von public_url = https://fxsync.domain.tld/ muss vorhanden sein!
• Das für die Datenbank fxsync vergebene Passwort eintragen.
• Das secret kann mit folgendem Befehl erzeugt werden.

head -c 20 /dev/urandom | sha1sum

Zertifikat

Wichtig: Bei eigener CA das Root-Zertifikat in Python hinzufügen!

Das Root-Zertifikat im pem Format mit z.B. Notepad++ oder vi öffnen und den gesamten Inhalt kopieren.
Beispiel:

-----BEGIN CERTIFICATE-----
MIIE5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQ0FADAWMRQwEgYDVQQDEwtSb290
LVdlYi1DQTAeFw0xNDExMDgwMDAwMDBaFw00OTExMDcyMzU5NTlaMBYxFDASBgNV
...
CJU2N2c/uTkuQrtE0gO5yc+LO6OytSXkQ7QkymF1aNeHy0gMqaCGkPozeQW/i0Tb
CwXECxbROBN/IWXw7xvYL1tGOcW6uBI6pE70Cznz2Y5HJxNqrobtXGTS95rfaTqx
diUdy7y04KVyyw==
-----END CERTIFICATE-----

Anschließend folgende Datei editieren:

fxcloud@ubuntu:~/syncserver$
vi local/lib/python2.7/site-packages/requests/cacert.pem

Den Inhalt der Zwischenablage einfach am Anfang der Datei einfügen und speichern.

Mit Strg + D als User fxcloud ausloggen.


Nginx Reverse Proxy

Zertifikat
Wichtig: Das Serverzertifikat muss ein SAN (Multidomain-Zertifikat) sein und alle drei Adressen beinhalten!

Für einen Test würde auch ein normales Wildcard Zertifikat mit cn=*.domain.tld gehen.

DNS-Name: fxaccount.domain.tld
DNS-Name: fxaccount-api.domain.tld
DNS-Name: fxsync.domain.tld

Konfiguration

Die Konfigurationsdatei für https://fxaccount-api.domain.tld

sudo vi /etc/nginx/sites-available/fxaccount-api

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxaccount-api.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:9000/;
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;
}
}

Die Konfigurationsdatei für https://fxaccount.domain.tld

sudo vi /etc/nginx/sites-available/fxaccount

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxaccount.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:3030/;
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;
}
}

Die Konfigurationsdatei für https://fxsync.domain.tld

sudo vi /etc/nginx/sites-available/fxsync

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxsync.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:5000/;
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;
}
}

Notwendig ist das Anpassen der rot markierten Stellen. Das Serverzertifikat muss im angegebenen Pfad vorhanden sein. Der Nginx Server unterstützt nur einen Pfad zum Serverzertifikat. Dadurch müssen in /etc/ssl/certs/server-cert.crt Root-CA und Serverzertifikat vorhanden sein.

Anschließend noch die jeweilige Konfiguration aktivieren.

cd /etc/nginx/sites-enabled/

sudo ln -s ../sites-available/fxaccount-api fxaccount-api
sudo ln -s ../sites-available/fxaccount fxaccount
sudo ln -s ../sites-available/fxsync fxsync


Upstart Scripte

fxa-auth-db-mysql.conf:

sudo vi /etc/init/fxa-auth-db-mysql.conf

# description "Start the fxa-auth-db-mysql"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-auth-db-mysql
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
#respawn
#respawn limit 20 5

exec npm start

fxa-auth-server.conf:

sudo vi /etc/init/fxa-auth-server.conf

# description "Start the fxa-auth-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-auth-server
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec npm start

fxa-content-server.conf:

sudo vi /etc/init/fxa-content-server.conf

# description "Start the fxa-content-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-content-server
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec npm start

fx-sync-server.conf:

sudo vi /etc/init/fx-sync-server.conf

# description "Start the fx-sync-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/syncserver
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec make serve

Serverstart

sudo start fxa-auth-db-mysql
sudo start fxa-auth-server
sudo start fxa-content-server
sudo start fx-sync-server

Das war es wieder mit dem Schnelldurchlauf, nun müssen noch die Adressen im Firefox angepasst werden. Dazu in der Adressleiste vom Firefox about:config eingeben. Nach den folgenden Einträgen suchen und den Wert entsprechend anpassen. Bei einer eigenen CA muss das Root-Zertifikat im Firefox importiert werden.

identity.fxaccounts.auth.uri
https://fxaccount-api.domain.tld/v1

identity.fxaccounts.remote.force_auth.uri
https://fxaccount.domain.tld/force_auth?service=sync&context=fx_desktop_v1

identity.fxaccounts.remote.signin.uri
https://fxaccount.domain.tld/signin?service=sync&context=fx_desktop_v1

identity.fxaccounts.remote.signup.uri
https://fxaccount.domain.tld/signup?service=sync&context=fx_desktop_v1

identity.fxaccounts.settings.uri
https://fxaccount.domain.tld/settings

identity.sync.tokenserver.uri
https://fxsync.domain.tld/token/1.0/sync/1.5


Ergänzung

Einrichten des Sync unter Firefox für Android

Das Ändern der Einstellungen für die eigenen Adressen funktioniert unter Firefox für Android nicht wie bei der Desktop Version.

Notwendig dazu ist das Fxa Custom Server Addon. In diesem werden die Adressen für den Auth-Server (https://fxaccount-api.domain.tld/v1) und den Sync-Server (https://fxsync.domain.tld/token/1.0/sync/1.5) hinterlegt.

Leider ist auch dieses Addon nicht mehr verfügbar. Der Entwickler hat es gelöscht, da man nun die eigenen Adressen so ähnlich wie bei der Desktop Variante unter about:config einrichten kann. Dieser Weg hat aber bei mir nicht funktioniert. Das könnte an dem Custom Port liegen, da ich nicht den Standard Port 443 für HTTPS verwende. Auf GitHub habe ich die letzte Entwickler Version gefunden und zu einem xpi Paket gewandelt.

Rechtsklick auf den Link und "Ziel speichern unter ..."

Fxa Custom Server Addon
sha256-Prüfsumme: 6c8006ba3f1b0090a5c794562c0df0cf79b60de6b6e065e9363090bdb03fe510

Firefox 40.0.3 Download (externer Link zur Dropbox)
sha256-Prüfsumme: 656a8f34f6cada407c8dd0de1e7a3e8d015b6814c6517d0f80fbc65ce2b7bf8b

Die Installation des Fxa Custom Server Addon funktioniert nur direkt über die Adresszeile vom Firefox. Das zuvor auf der Speicherkarte des Smartphone abgelegte Addon im Firefox aufrufen, z.B. file:///storage/emulated/0/fxa-custom-server-addon.xpi und installieren. Bei einer eigenen CA muss auch das Root-Zertifikat auf diesen Weg importiert werden. Danach die Adressen für den Auth-Server (https://fxaccount-api.domain.tld/v1) und den Sync-Server (https://fxsync.domain.tld/token/1.0/sync/1.5) im Addon eintragen.

Zu beachten ist, dass dieses Paket nicht von Mozilla signiert wurde. Trotzdem funktioniert es bei mir problemlos mit der aktuellen Firefox Version zusammen. Es ist aber zwingend erforderlich, erst die Firefox Version 40.0.3 zu installieren und anschließend nach Einrichten des Sync auf die aktuelle Version zu Updaten.

Eigener Firefox Syncserver 1.5 auf Ubuntu 14.04 LTS

27.06.2015 at 14:45

27.06.2015

Firefox Syncserver 1.5 und Accountserver - Komplette Installationsanleitung


Ich habe wegen zunehmenden Zeitmangel und Unübersichtlichkeit die Kommentarfunktion auf dieser Seite deaktiviert. Möchte man sich gegenseitig helfen, kann dies über das eigens dafür eingerichtete Forum geschehen.

Hier geht es zum Forum.

Natürlich werde ich selbst hin und wieder rein schauen. Sollten Änderungen bzw. Anpassungen der Konfiguration bekannt sein, dann bitte dort posten. Ich werde diese dann hier auf der Seite einpflegen, um sie weiterhin so aktuell wie möglich zu halten.


Mozilla hat mit dem Firefox 29 ein neues Sync eingeführt. Bisher betrieb ich die Synchronisation der Lesezeichen über einen eigenen ownCloud Server mit dem Mozilla Sync 1.4 Plugin. Die Einrichtung war recht simpel und funktionierte auch weiterhin mit den neuen Versionen vom Firefox. Mozilla hat für 2016 das Entfernen des alten Sync aus dem Firefox angekündigt. Da ich auch weiterhin meine Daten auf einem eigenen Server synchronisieren wollte, wurde es langsam Zeit sich mit dem neuen Mozilla Sync 1.5 zu beschäftigen.

Dazu fand ich unter https://thomas-leister.de eine sehr gute Beschreibung und Installationsanleitung. Wie ich feststellen musste, ist der Beitrag auf dieser Seite nicht mehr abrufbar. Aufbauend auf seiner Anleitung habe ich meine eigene Konfiguration dokumentiert. Sie ist komplett und bestehend aus:

• Accounts Authentication Server (fxa-auth-db-server)
• Accounts Server (fxa-auth-server)
• Accounts Contentserver (fxa-content-server)
• Syncserver
• Nginx Reverse Proxy

Die Beschreibung zu den jeweiligen Schritten wurde auf das Notwendigste beschränkt. Entsprechendes Grundwissen wird vorausgesetzt.

Die Basis für die Installation ist ein Ubuntu Server 14.04 LTS mit aktuellem Stand. Daher nochmal das System aktualisieren.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo reboot

Unter Ubuntu 14.04 LTS ist noch Python 2.7.6 installiert, aus Sicherheitsgründen ist Python 2.7.9 notwendig.

Paketquelle für Python 2.7.9 hinzufügen.

sudo vi /etc/apt/sources.list

Am Ende folgende Zeilen einfügen.

deb http://ppa.launchpad.net/fkrull/deadsnakes-python2.7/ubuntu trusty main
deb-src http://ppa.launchpad.net/fkrull/deadsnakes-python2.7/ubuntu trusty main

Um die Paketquelle zu verwenden, sollte man den Signatur-Schlüssel einspielen.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5BB92C09DB82666C

sudo apt-get update

Benötigte Pakete installieren, Nginx und Postfix sind stellvertretend. Bei der Installation von MySQL wird man aufgefordert, ein root Passwort zu vergeben. Dieses wird dann später für das Anlegen der Datenbanken benötigt.

sudo apt-get install curl python python-dev python-virtualenv libgmp10 libgmp-dev git-core mysql-server nginx postfix

Zusätzlich ist noch das aktuelle nodesjs notwendig, npm wird automatisch mit installiert.

sudo curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install nodejs

Erstellen eines Systembenutzer fxcloud.

sudo adduser --disabled-password --disabled-login fxcloud

Die Angaben zum User kann man mit der Entertaste überspringen.

Lege Benutzer »fxcloud« an ...
Lege neue Gruppe »fxcloud« (1001) an ...
Lege neuen Benutzer »fxcloud« (1001) mit Gruppe »fxcloud« an ...
Erstelle Home-Verzeichnis »/home/fxcloud« ...
Kopiere Dateien aus »/etc/skel« ...
Changing the user information for fxcloud
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Sind diese Informationen korrekt? [J/n] J


Auth-DB Server

Installation
Konfiguration MySQL

Mit dem, bei der Installation von MySQL vergebenen root Passwort anmelden.

mysql -u root -p

Die Datenbank fxacc für den Auth-DB Server anlegen und ein Passwort für diese Datenbank vergeben.

create database fxacc;
create user fxacc@localhost;
set password for fxacc@localhost = password('dein-passwort');
grant all on fxacc.* to fxacc@localhost;
exit;

Als Systembenutzer fxcloud einloggen.

sudo -i -u fxcloud

Installation des Auth-DB Server.

git clone https://github.com/mozilla/fxa-auth-db-mysql.git
cd fxa-auth-db-mysql
npm install

es dauert...

Konfiguration

fxcloud@ubuntu:~/fxa-auth-db-mysql$ vi config/prod.json

Das für die Datenbank fxacc vergebene Passwort eintragen.

{
"master": {
"user": "fxacc",
"password": "dein-passwort",
"database": "fxacc"
},
"slave": {
"user": "fxacc",
"password": "dein-passwort",
"database": "fxacc"
}
}


Auth-Server

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Anschließend den Auth-Server installieren.

git clone git://github.com/mozilla/fxa-auth-server.git
cd fxa-auth-server
npm install

es dauert...

Test des Auth-Server:

npm test

Bei einem abschließenden Done, without errors. war die Installation erfolgreich.

Konfiguration

Bei der Konfiguration gab es die erste Abweichung. Es war unter ~/fxa-auth-server/config/ keine bestehende Konfigurationsdatei dev.json vorhanden. Ein manuelles Anlegen dieser Datei mit ensprechender Konfiguration wurde vom Server ignoriert.
Direkt unter ~/fxa-auth-server/ fand ich aber eine .env.dev. Nachdem ich diese konfiguriert habe, funktionierte der Auth-Server korrekt.

fxcloud@ubuntu:~/fxa-auth-server$ vi .env.dev

PUBLIC_URL=https://fxaccount-api.domain.tld
CONTENT_SERVER_URL=https://fxaccount.domain.tld
SMTP_HOST=smtp.domain.tld
SMTP_PORT=25
SMTP_SECURE=false
SMTP_SENDER=Firefox Accounts Server <fxacc@domain.tld>
SMTP_USER=fxacc@domain.tld
LOG_LEVEL=warn
VERIFIER_VERSION=0
CUSTOMS_SERVER_URL=none
RESEND_BLACKOUT_PERIOD=0
LOCKOUT_ENABLED=true
SNS_TOPIC_ARN=disabled
TRUSTED_JKUS=http://127.0.0.1:8080/.well-known/public-keys,http://127.0.0.1:10139/.well-known/public-keys

Ich verwende eine Mail Konfiguration ohne SMTP Authentifizierung. Deswegen fehlt dieser Punkt in der Konfiguration. Wird eine Anmeldung am SMTP Host benötigt, ist eigenes experimentieren angesagt. 


Contentserver

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Anschließend den Contentserver installieren.

git clone https://github.com/mozilla/fxa-content-server.git

Mit Strg + D kurzzeitig für die grunt-cli und bower Installation als User fxcloud ausloggen.

sudo npm install -g grunt-cli
sudo npm install -g bower

Als Systembenutzer fxcloud einloggen.

sudo -i -u fxcloud

Installation des Contentserver.

cd fxa-content-server
npm install

es dauert...

Generell gilt, sollte eine Installation mit Error enden, dann nochmal "npm install" ausführen. Meist funktioniert es dann. Die Warnungen kann man ignorieren, der Contenserver sollte trotzdem funktionieren.

Konfiguration

fxcloud@ubuntu:~/fxa-content-server$
cp server/config/local.json-dist server/config/local.json

fxcloud@ubuntu:~/fxa-content-server$ vi server/config/local.json

{
"public_url": "https://fxaccount.domain.tld",
"fxaccount_url": "https://fxaccount-api.domain.tld",

"oauth_client_id": "98e6508e88680e1a",
"oauth_url": "http://127.0.0.1:9010",
"profile_url": "http://127.0.0.1:1111",
"profile_images_url": "http://127.0.0.1:1112",
"client_sessions": {
"cookie_name": "session",
"secret": "selbst-gewähltes-secret",
"duration": 86400000
},
"env": "production",
"use_https": false,
"static_max_age" : 0,
"i18n": {
"supportedLanguages": ["af", "an", "ar", "as", "ast", "az", "be", "bg", "bn-BD", "bn-IN", "br", "bs", "ca", "cs", "cy", "da", "de", "dsb", "el", "en", "en-GB", "en-ZA", "eo", "es", "es-AR", "es-CL", "es-MX", "et", "eu", "fa", "ff", "fi", "fr", "fy", "fy-NL", "ga", "ga-IE", "gd", "gl", "gu", "gu-IN", "he", "hi-IN", "hr", "hsb", "ht", "hu", "hy-AM", "id", "is", "it", "it-CH", "ja", "kk", "km", "kn", "ko", "ku", "lij", "lt", "lv", "mai", "mk", "ml", "mr", "ms", "nb-NO", "ne-NP", "nl", "nn-NO", "or", "pa", "pa-IN", "pl", "pt", "pt-BR", "pt-PT", "rm", "ro", "ru", "si", "sk", "sl", "son", "sq", "sr", "sr-LATN", "sv", "sv-SE", "ta", "te", "th", "tr", "uk", "ur", "vi", "xh", "zh-CN", "zh-TW", "zu"]
},
"route_log_format": "dev_fxa",
"logging": {
"fmt": "pretty",
"level": "warn"
},
"static_directory": "app",
"allowed_parent_origins": ["http://127.0.0.1:8080"],
"csp": {
"enabled": true,
"reportUri": "/_/csp-violation"
}
}


Syncserver

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Konfiguration MySQL

Mit dem, bei der Installation von MySQL vergebenen root Passwort anmelden.

mysql -u root -p

Die Datenbank fxsync für den Syncserver anlegen und ein Passwort für diese Datenbank vergeben.

create database fxsync;
create user fxsync@localhost;
set password for fxsync@localhost = password('dein-passwort');
grant all on fxsync.* to fxsync@localhost;
exit;

Danach erfolgt die Installation des Syncservers.

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

es dauert...

Für eine bessere Performance des Syncservers noch den Gunicorn Python WSGI Server installieren.

fxcloud@ubuntu:~/syncserver$ ./local/bin/easy_install gunicorn

Konfiguration

fxcloud@ubuntu:~/syncserver$ vi syncserver.ini

[server:main]
use = egg:gunicorn
host = 127.0.0.1
port = 5000
workers = 2
timeout = 60

[app:main]
use = egg:syncserver

[syncserver]
public_url = https://fxsync.domain.tld/
sqluri = pymysql://fxsync:dein-passwort@127.0.0.1/fxsync
secret = aaa588f154f12f90a3457e7d5180dfd07cdeedca

[browserid]
backend = tokenserver.verifiers.LocalVerifier
audiences = https://fxsync.domain.tld

• Der Schrägstrich am Ende von public_url = https://fxsync.domain.tld/ muss vorhanden sein!
• Das für die Datenbank fxsync vergebene Passwort eintragen.
• Das secret kann mit folgendem Befehl erzeugt werden.

head -c 20 /dev/urandom | sha1sum

• Die unteren 3 Zeilen, browserid, backend und audiences sind notwendig!

Zertifikat
Wichtig: Bei eigener CA das Root-Zertifikat in Python hinzufügen!

Das Root-Zertifikat im pem Format mit z.B. Notepad++ oder vi öffnen und den gesamten Inhalt kopieren.
Beispiel:

-----BEGIN CERTIFICATE-----
MIIE5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQ0FADAWMRQwEgYDVQQDEwtSb290
LVdlYi1DQTAeFw0xNDExMDgwMDAwMDBaFw00OTExMDcyMzU5NTlaMBYxFDASBgNV
...
CJU2N2c/uTkuQrtE0gO5yc+LO6OytSXkQ7QkymF1aNeHy0gMqaCGkPozeQW/i0Tb
CwXECxbROBN/IWXw7xvYL1tGOcW6uBI6pE70Cznz2Y5HJxNqrobtXGTS95rfaTqx
diUdy7y04KVyyw==
-----END CERTIFICATE-----

Anschließend folgende Datei editieren:

fxcloud@ubuntu:~/syncserver$
vi local/lib/python2.7/site-packages/requests/cacert.pem

Den Inhalt der Zwischenablage einfach am Anfang der Datei einfügen und speichern.
(Ein Root-Zertifikat zum Testen befindet sich am Ende des Artikels)

Mit Strg + D als User fxcloud ausloggen.


Nginx Reverse Proxy

Zertifikat
Wichtig: Das Serverzertifikat muss ein SAN (Multidomain-Zertifikat) sein und alle drei Adressen beinhalten!

Für einen Test würde auch ein normales Wildcard Zertifikat mit cn=*.domain.tld gehen.

(Ein Server SAN Wildcard Zertifikat zum Testen befindet sich am Ende des Artikels)

DNS-Name: fxaccount.domain.tld
DNS-Name: fxaccount-api.domain.tld
DNS-Name: fxsync.domain.tld

Konfiguration

Die Konfigurationsdatei für https://fxaccount-api.domain.tld

sudo vi /etc/nginx/sites-available/fxaccount-api

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxaccount-api.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:9000/;
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;
}
}

Die Konfigurationsdatei für https://fxaccount.domain.tld

sudo vi /etc/nginx/sites-available/fxaccount

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxaccount.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:3030/;
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;
}
}

Die Konfigurationsdatei für https://fxsync.domain.tld

sudo vi /etc/nginx/sites-available/fxsync

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxsync.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:5000/;
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;
}
}

Die jeweilige Konfiguration muss noch aktiviert werden.

cd /etc/nginx/sites-enabled/

sudo ln -s ../sites-available/fxaccount-api fxaccount-api
sudo ln -s ../sites-available/fxaccount fxaccount
sudo ln -s ../sites-available/fxsync fxsync


Upstart Scripte

fxa-auth-db-mysql.conf:

sudo vi /etc/init/fxa-auth-db-mysql.conf

# description "Start the fxa-auth-db-mysql"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-auth-db-mysql
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
#respawn
#respawn limit 20 5

exec npm start

fxa-auth-server.conf:

sudo vi /etc/init/fxa-auth-server.conf

# description "Start the fxa-auth-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-auth-server
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec npm start

fxa-content-server.conf:

sudo vi /etc/init/fxa-content-server.conf

# description "Start the fxa-content-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-content-server
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec npm start

fx-sync-server.conf:

sudo vi /etc/init/fx-sync-server.conf

# description "Start the fx-sync-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/syncserver
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec make serve

Serverstart

sudo start fxa-auth-db-mysql
sudo start fxa-auth-server
sudo start fxa-content-server
sudo start fx-sync-server

Das war es mit dem Schnelldurchlauf, nun müssen noch die Adressen im Firefox angepasst werden. Dazu in der Adressleiste vom Firefox about:config eingeben. Nach den folgenden Einträgen suchen und den Wert entsprechend anpassen. Bei einer eigenen CA muss das Root-Zertifikat im Firefox importiert werden.

identity.fxaccounts.auth.uri
https://fxaccount-api.domain.tld/v1

identity.fxaccounts.remote.force_auth.uri
https://fxaccount.domain.tld/force_auth?service=sync&context=fx_desktop_v1

identity.fxaccounts.remote.signin.uri
https://fxaccount.domain.tld/signin?service=sync&context=fx_desktop_v1

identity.fxaccounts.remote.signup.uri
https://fxaccount.domain.tld/signup?service=sync&context=fx_desktop_v1

identity.fxaccounts.settings.uri
https://fxaccount.domain.tld/settings

identity.sync.tokenserver.uri
https://fxsync.domain.tld/token/1.0/sync/1.5


Ergänzung

Einrichten des Sync unter Firefox für Android

Das Ändern der Einstellungen für die eigenen Adressen funktioniert unter Firefox für Android nicht wie bei der Desktop Version.

Notwendig dazu ist das Fxa Custom Server Addon. In diesem werden die Adressen für den Auth-Server (https://fxaccount-api.domain.tld/v1) und den Sync-Server (https://fxsync.domain.tld/token/1.0/sync/1.5) hinterlegt.

Leider ist auch dieses Addon nicht mehr verfügbar. Der Entwickler hat es gelöscht, da man nun die eigenen Adressen so ähnlich wie bei der Desktop Variante unter about:config einrichten kann. Dieser Weg hat aber bei mir nicht funktioniert. Das könnte an dem Custom Port liegen, da ich nicht den Standard Port 443 für HTTPS verwende. Auf GitHub habe ich die letzte Entwickler Version gefunden und zu einem xpi Paket gewandelt.

Rechtsklick auf den Link und "Ziel speichern unter ..."

Fxa Custom Server Addon
sha256-Prüfsumme: 6c8006ba3f1b0090a5c794562c0df0cf79b60de6b6e065e9363090bdb03fe510

Firefox 40.0.3 Download (externer Link zur Dropbox)
sha256-Prüfsumme: 656a8f34f6cada407c8dd0de1e7a3e8d015b6814c6517d0f80fbc65ce2b7bf8b

Die Installation des Fxa Custom Server Addon funktioniert nur direkt über die Adresszeile vom Firefox. Das zuvor auf der Speicherkarte des Smartphone abgelegte Addon im Firefox aufrufen, z.B. file:///storage/emulated/0/fxa-custom-server-addon.xpi und installieren. Bei einer eigenen CA muss auch das Root-Zertifikat auf diesen Weg importiert werden. Danach die Adressen für den Auth-Server (https://fxaccount-api.domain.tld/v1) und den Sync-Server (https://fxsync.domain.tld/token/1.0/sync/1.5) im Addon eintragen.

Zu beachten ist, dass dieses Paket nicht von Mozilla signiert wurde. Trotzdem funktioniert es bei mir problemlos mit der aktuellen Firefox Version zusammen. Es ist aber zwingend erforderlich, erst die Firefox Version 40.0.3 zu installieren und anschließend nach Einrichten des Sync auf die aktuelle Version zu Updaten.

Bei einer Abweichung vom Standard Port 443 für HTTPS ist unter Umständen eine Änderung in der syncserver.ini notwendig. Das betrifft den Wert force_wsgi_environ = false. Dieser muss auf true abgeändert werden. Abschließend ist ein Neustart des Syncservers erforderlich.


Zertifikat

Achtung! Zertifikat nur für Testzwecke nutzen!!!

Da es häufig Schwierigkeiten beim Erstellen von Zertifikaten gibt, habe ich ein Server SAN Wildcard Zertifikat zum Testen angefertigt. Da es sich um ein Wildcard Zertifikat handelt, spielt der eigene Domain Name keine Rolle. Das Zertifikat wurde nicht geprüft, sollte aber funktionieren.

Die 3 DNS Namen sind:

fxaccount.*
fxaccount-api.*
fxsync.*

Rechtsklick auf den Link und "Ziel speichern unter ..."

Root Zertifikat
Test-Root-CA.pem
sha256-Prüfsumme: 4b06cfa86eab9c70fe0ac70c911923919326955238e5e939a825e7cf49e6a89a

Server SAN Wildcard Zertifikat+ Root-CA für Nginx Reverse Proxy
server-cert.crt
sha256-Prüfsumme: d0161613c9a07b84e550d0882a447c0a88627ddfc2656743c9e370df93febc9f

Private-Key zu Server SAN Zertifikat
server.key
sha256-Prüfsumme: 3f46032a7bb65f5ae0e20a2afeebe3e6285dabc4771935807505e6f1b9638279

 


 

Ich danke allen, die es bis hierher durchgehalten haben!

 

Raspberry Pi als Webserver

27.12.2014 at 11:26

Raspberry Pi Logo

 

Man mag es kaum glauben, so sieht der winzige Webserver aus. Im Bild ist der voll funktionsfähige Backup Server zu sehen.

Auf der Suche nach einem stromsparenden und lautlosen PC für meine Homepage bin ich auf den Raspberry Pi gestoßen. Es handelt sich um das Raspberry Pi B+ Modell und ist mit 92 x 62 x 25 mm nicht größer als eine Zigarettenschachtel.

Raspberry Pi als Webserver

Es ist ein Einplatinencomputer mit einer 700 MHz ARM11 CPU und 512 MB Arbeitsspeicher. Als Bootmedium kommt eine SanDisk microSDHC zum Einsatz.

Raspberry Pi als Webserver

Ja richtig, 700 MHz , da hat selbst mein Smartphone mehr Power unter der Haube. Das spielt aber keine große Rolle, da sich ein Webserver bei einer so kleinen Homepage meist langweilt. Einige Optimierungen waren aber notwendig, z.B. wurde er auf 950 MHz übertaktet und der Prozessor bekam einen Kühlkörper. Auch musste der Cache optimiert werden, damit der Seitenaufbau beschleunigt wird. Der Flaschenhals ist somit nicht mehr der Raspberry Pi, sondern der DSL Anschluss.

Ergänzung vom 14.01.2015

Nach Aktivierung des Apache Modules 'mod_security' hat sich der Seitenaufbau erheblich verlängert. Da kommt der Raspberry Pi dann doch an seine Grenzen. Aus Sicherheitsgründen lasse ich aber dieses Modul aktiv, trotz der schlechteren Performance.

ModSecurity ist eine Application-Firewall. Diese funktioniert entgegen üblichen Paketfiltern / Stateful Inspection Firewalls nicht auf Netzwerkebene, sondern auf Anwendungsebene.

Ergänzung vom 03.02.2015

Gestern wurde ein neues Raspberry Pi Model vorgestellt. Gleicher Preis und Äußeres, aber mit einer ARM Cortex-A7 CPU. Diese besitzt nun vier Kerne mit jeweils 900 MHz. Außerdem wurde der Arbeitsspeicher von 512 MB auf 1 GB erhöht.

Ich habe zwei Raspberry Pi 2 bestellt und freue mich schon darauf .

Wenn alles klappt, zieht der Webserver dann auf den neuen Raspberry. Mal schauen inwieweit sich die Performance verbessert.

Ergänzung vom 06.02.2015

Meine bestellten Raspberrys Version 2 sind nun angekommen und der Webserver ist auch schon auf einen davon umgezogen. Die Performance hat sich gegenüber der alten 1 Kern Version deutlich verbessert!

Wer einen kleinen Webserver bzw. Owncloud auf einem Raspberry betreiben möchte, der ist mit der neuen Version eindeutig besser bedient.

Leider war es nicht möglich, dass Image vom alten Server zu verwenden, da der Raspberry 2 damit nicht startet. Durch die veränderte Prozessorarchitektur war das auch zu erwarten.
Damit geschah der Umzug nicht so einfach wie gedacht, da der Server komplett neu installiert und konfiguriert werden musste. Eine aktuelle Version für den neuen Raspberry 2 kann man hier herunterladen.

Ich bin mit dem neuen Raspberry 2 sehr zufrieden, er ist bedeutend schneller und hat durch den nun größeren Arbeitspeicher von 1 GB auch mehr Reserven.

▲ nach oben