Neuer Firefox-Syncserver (Rust) in Docker mit MariaDB-Datenbank

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
576
Punkte
134
Du scheinst meine Frage überlesen zu haben: Hast du beide Einträge in der "tokenserver_rs" angelegt?

In dem einen Screenshot sieht man nur einen der Beiden.
 

eddie irvine

Benutzer
Mitglied seit
14. Jan 2009
Beiträge
154
Punkte für Reaktionen
1
Punkte
18
Momentaner Stand:
Ich kann die Clients anmelden und auch Tabs von einem an den anderen senden, aber sie kommen wohl nicht auf meinen tokenserver_rs - obwohl die URLs funktionieren.

Könnte es an dem master secret liegen?
Ist dieses irgendwo in der DB abgespeichert?

Wie muss dieses aussehen bzw. kann ich es hier generieren?

Wäre das ok?
Code:
MYSQL_PASS=meinSQLpasswort
SYNC_MASTER_SECRET=meinMasterSyncPasswort
METRICS_HASH_SECRET=85a0d223f53279c995199ee770928f8623eb364b5895df80d5367ac39d57d532
 

eddie irvine

Benutzer
Mitglied seit
14. Jan 2009
Beiträge
154
Punkte für Reaktionen
1
Punkte
18

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
576
Punkte
134
Ja, die müssen beide identisch sein. Wobei ich bei mir den Port angegeben habe, da ich nicht 443 nutze.

Das ist jetzt mögicherweise eine unsinnige Idee, aber gib doch mal an den Port mit, also "https://fxsync.meinserver.de:443/1.0/sync/1.5".

Sollte ja in deinem Fall eigentlich unnötig sein, aber Pferde etc.
 

eddie irvine

Benutzer
Mitglied seit
14. Jan 2009
Beiträge
154
Punkte für Reaktionen
1
Punkte
18
Das habe ich jetzt leider auch erfolglos versucht...

Es steht immer wieder Folgendes im Log:
1699888686597 Sync.Service DEBUG User-Agent: Firefox/119.0.1 (Windows NT 10.0; Win64; x64) FxSync/1.121.0.20231106151204.desktop
1699888686597 Sync.Service INFO Starting sync at 2023-11-13 16:18:06 in browser session PjdnNZ4JqVkE
1699888686597 Sync.Service DEBUG In sync: should login.
1699888686597 Sync.RemoteTabs INFO Generating tab list with filter
1699888686597 Sync.Service DEBUG Exception calling WrappedLock: LockException: Could not acquire lock. Label: "service.js: login".(resource://services-sync/util.sys.mjs:43:5) JS Stack trace: LockException@util.sys.mjs:43:5
throwLockException@util.sys.mjs:127:11
WrappedLock@util.sys.mjs:141:15
WrappedCatch@util.sys.mjs:112:27
login@service.sys.mjs:1049:66
sync/<@service.sys.mjs:1327:26
WrappedCatch@util.sys.mjs:112:27
sync@service.sys.mjs:1335:7
1699888686597 Sync.Service INFO Cannot start sync: already syncing?
1699888686597 Sync.Service DEBUG Not syncing: login returned false.
1699888686606 Sync.RemoteTabs INFO Final tab list has 0 clients with 0 tabs.
1699888687778 Services.Common.RESTRequest DEBUG GET https://fxsync.meinserver.de/1.0/sync/1.5 503
1699888687779 Services.Common.TokenServerClient DEBUG Got token response: 503
1699888687779 Services.Common.TokenServerClient INFO Server-reported error: {"location":"body","name":"","description":"Resource is not available"}
1699888687779 Sync.SyncAuthManager ERROR Non-authentication error in _fetchTokenForUser: TokenServerClientServerError({"now":"2023-11-13T15:18:07.779Z","message":"Server error.","cause":"general","response_body":"{\"status\":\"error\",\"errors\":[{\"location\":\"body\",\"name\":\"\",\"description\":\"Resource is not available\"}]}","response_headers":{"server":"nginx","date":"Mon, 13 Nov 2023 15:18:07 GMT","content-type":"application/json","content-length":"101","x-weave-timestamp":"1699888677.77","x-firefox-spdy":"h2"},"response_status":503})(resource://services-common/tokenserverclient.sys.mjs:28:36) JS Stack trace: TokenServerClientServerError@tokenserverclient.sys.mjs:90:16
_processTokenResponse@tokenserverclient.sys.mjs:306:19
_tokenServerExchangeRequest@tokenserverclient.sys.mjs:239:19
1699888687780 Sync.Status DEBUG Status.login: success.status_ok => error.login.reason.network
1699888687780 Sync.Status DEBUG Status.service: success.status_ok => error.login.failed
1699888687780 Sync.SyncAuthManager INFO Failed to fetch the cluster URL: TokenServerClientServerError({"now":"2023-11-13T15:18:07.779Z","message":"Server error.","cause":"general","response_body":"{\"status\":\"error\",\"errors\":[{\"location\":\"body\",\"name\":\"\",\"description\":\"Resource is not available\"}]}","response_headers":{"server":"nginx","date":"Mon, 13 Nov 2023 15:18:07 GMT","content-type":"application/json","content-length":"101","x-weave-timestamp":"1699888677.77","x-firefox-spdy":"h2"},"response_status":503})(resource://services-common/tokenserverclient.sys.mjs:28:36) JS Stack trace: TokenServerClientServerError@tokenserverclient.sys.mjs:90:16
_processTokenResponse@tokenserverclient.sys.mjs:306:19
_tokenServerExchangeRequest@tokenserverclient.sys.mjs:239:19
1699888687781 Sync.Service DEBUG verifyLogin failed: TokenServerClientServerError({"now":"2023-11-13T15:18:07.779Z","message":"Server error.","cause":"general","response_body":"{\"status\":\"error\",\"errors\":[{\"location\":\"body\",\"name\":\"\",\"description\":\"Resource is not available\"}]}","response_headers":{"server":"nginx","date":"Mon, 13 Nov 2023 15:18:07 GMT","content-type":"application/json","content-length":"101","x-weave-timestamp":"1699888677.77","x-firefox-spdy":"h2"},"response_status":503})(resource://services-common/tokenserverclient.sys.mjs:28:36) JS Stack trace: TokenServerClientServerError@tokenserverclient.sys.mjs:90:16
_processTokenResponse@tokenserverclient.sys.mjs:306:19
_tokenServerExchangeRequest@tokenserverclient.sys.mjs:239:19
1699888687781 Sync.Status DEBUG Status.login: error.login.reason.network => error.login.reason.network
1699888687781 Sync.Status DEBUG Status.service: error.login.failed => error.login.failed
1699888687781 Sync.ErrorHandler ERROR Sync encountered a login error

Für welchen Host muss ich denn den User sync_rs erzeugen?
Mein Container hat intern eine 172.* IP, extern aber eine 192.*.
Wenn ich den User sync_rs@"%" verwende, sollte das doch ok sein, oder?

Kann es vielleicht auch sein, dass mein tokenserver_rs Container den Endpunkt https://api.accounts.firefox.com nicht erreichen kann?
Wie kann ich das testen?
 
Zuletzt bearbeitet von einem Moderator:

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
576
Punkte
134
Hast du mal das Container-Logging aktiviert, wie ich auch schon gepostet hatte? ("RUST_LOG: warn" im Environment)

Wenn ich den User sync_rs@"%" verwende, sollte das doch ok sein, oder?
Wenn du den User so eingerichtet hast, ist das ok. Aber die Verbindung des Containers zur DB geht doch nach deinen Worten. Sonst könnte er ja auch keine Tabellen anlegen.

Wie kann ich das testen?
Naja, einfach Frage: Hat deine Syno Internetverbindung?

Dabei fällt mir ein: Hast du die Firewall auf der Syno aktiv?
 

eddie irvine

Benutzer
Mitglied seit
14. Jan 2009
Beiträge
154
Punkte für Reaktionen
1
Punkte
18
Ich weiß jetzt zwar nicht genau, woran es gelegen hat, aber mein RUST Syncserver funktioniert jetzt! :p

Die Schwierigkeit bestand wohl darin, dass ich meine Container in einem MACVLAN Netz laufen lasse.
Und da muss man noch ein Script nach jedem Neustart der DS einbinden, damit die Container miteinander kommunizieren können.
Das ist in diesem Video ganz gut erklärt.
Das hat aber eigentlich schon immer funktioniert (bspw. habe ich die MariaDB über die feste IP aus dem Sync Server angesprochen.

Bislang hatten die Container wohl keinen Zugriff aufs Internet (bspw. konnte PiHole nicht die Listen aktualisieren etc.).
Das lag wohl daran, dass ich noch das alte Pihole auf dem Raspi als DNS in der Synology eingetragen hatte.
Ich beziehe den DNS Server jetzt von der Fritzbox per DHCP (ist jetzt ein Pihole Container auf der DS).

Danke nochmal für die Hilfe!

Eine Frage habe ich noch:
Wie sichere ich mir den jetzt am besten die Container, so dass ich diese immer wieder von Grund auf herstellen kann?
Gibt's da sowas wie einen Export in eine YAML/.env Datei?
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
576
Punkte
134
Na, Gott sei Dank... ;)

Ich hätte auch langsam keine Ideen mehr gehabt. Das ist ja immer das Problem, wenn bei einem selbst alles läuft und man das Problem nicht nachstellen kann.

Ich habe ein Skript laufen, was mir regelmässig über den Docker-Befehl die Netzwerk- und Container-Werte exportiert. Da ich außerdem Portainer einsetze, sichert ein weiteres Skript die Portainer-Einstellungen, wie man es aus Portainer selber machen kann.

Wenn du über Compose-Files die Container einrichtest, hast du ja praktisch auch schon alles, was nötig ist. Dann bleiben eigentlich nur eventuelle Volumes zu sichern und da kommt Hyper Backup z.B. ins Spiel.

Die Datenbanken werden regelmässig gedumped, auch über Skript.
 

eddie irvine

Benutzer
Mitglied seit
14. Jan 2009
Beiträge
154
Punkte für Reaktionen
1
Punkte
18
Ich habe ein Skript laufen, was mir regelmässig über den Docker-Befehl die Netzwerk- und Container-Werte exportiert. Da ich außerdem Portainer einsetze, sichert ein weiteres Skript die Portainer-Einstellungen, wie man es aus Portainer selber machen kann.
Ich habe dieses hier gefunden.
Es erzeugt YAML Dateien aus den laufenden Containern.
Wie kann ich die Netzwerke sichern?
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
576
Punkte
134
Stimmt, das gibt es auch noch. Hatte ich auch mal in Benutzung.

Die Netzwerke exportiere ich mit "docker network inspect <NETZWERKNAME>". Es geht mir da nur um die Werte / Einstellungen.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
So nun muss ich mich auch mal wieder zu Wort melden. Mein Syncserver hat nun einige Zeit nicht mehr funktioniert. Nach einigen Basteleien hat es mir dann heute gereicht und ich hab Stack, Container, Image und Datenbanken gelöscht und die Clients abgemeldet.
Dann alles neu aufgesetzt. Zuerst mit dem syncstorage Container in der Version 14.4 (latest). Da hatte ich zu Beginn immer das Problem, dass der Contaienr ohne Docker-Netzwerk startet, egal was im Stack steht. Das scheint aber aktuell ein Portainer Problem zu sein. Über die Console ging es einwandfrei. Aber der Container schmiss diverse Fehler und schrieb auch nix in die DB. Dann mit der Version 13.7 nochmal neu gemacht: Keine Fehler und Container schreibt auch in die DB. Dann die erforderlichen Einträge in der DB gesetzt -> sieht alles gut aus. Eintrag im Firefox gesetzt -> passt. Angemeldet mit Konto -> auch ok. Synchronisierung ausgeführt -> Augenscheinlich auch ok. Doch in der DB kommt nix an. Die ist genauso groß wie vor dem Sync. Was aber nicht sein kann, da ich massiv viele Daten im Browser habe. Also im Browser Healthcheck aufgerufen. Der sagt "Status: ok". Dann habe ich mich testweise mit einem anderen Client angemeldet. Auch da wird nix in die DB geschrieben? Was kann das noch sein?
Hier der Stack:

YAML:
version: "3.8"
services:
  firefoxsync:
    container_name: firefoxsync
    entrypoint:
      - /app/bin/syncserver
    environment:
      - SYNC_HOST=0.0.0.0
      - SYNC_HUMAN_LOGS=1
      - SYNC_MASTER_SECRET=Kt6R2xJWTJh8Y5R+xL9I7fREXcpI0aB37MrS6ubyxkYbT6B6kQ9AwBiOFDKaMSD6
      - SYNC_SYNCSTORAGE__DATABASE_URL=mysql://firefox:F1r€F0X@mariadb:3306/syncstorage_rs
      - SYNC_TOKENSERVER__ENABLED=true
      - SYNC_TOKENSERVER__RUN_MIGRATIONS=true
      - SYNC_TOKENSERVER__NODE_TYPE=mysql
      - SYNC_TOKENSERVER__DATABASE_URL=mysql://firefox:F1r€F0X@mariadb:3306/tokenserver_rs
      - SYNC_TOKENSERVER__FXA_EMAIL_DOMAIN=api.accounts.firefox.com
      - SYNC_TOKENSERVER__FXA_OAUTH_SERVER_URL=https://oauth.accounts.firefox.com/v1
      - SYNC_TOKENSERVER__FXA_METRICS_HASH_SECRET=Kt6R2xJWTJh8Y5R+xL9I7fREXcpI0aB37MrS6ubyxkYbT6B6kQ9AwBiOFDKaMSD6
      - SYNC_TOKENSERVER__ADDITIONAL_BLOCKING_THREADS_FOR_FXA_REQUESTS=2
    hostname: ffsync
    image: mozilla/syncstorage-rs:0.13.7
    networks:
      - sql
    ports:
      - 8000:8000/tcp
    restart: always

networks:
  sql:
    external: true

Die ENV:
Code:
cat .env
COMPOSE_PROJECT_NAME=firefoxsync
MYSQL_USER=firefox
MYSQL_PASS=F1r€F0X
SYNC_MASTER_SECRET=Kt6R2xJWTJh8Y5R+xL9I7fREXcpI0aB37MrS6ubyxkYbT6B6kQ9AwBiOFDKaMSD6
METRICS_HASH_SECRET=Kt6R2xJWTJh8Y5R+xL9I7fREXcpI0aB37MrS6ubyxkYbT6B6kQ9AwBiOFDKaMSD6
DATABASE_SERVER=mariadb
DATABASE_PORT=3306
EXTERNAL_PORT=8000

URL im Firefox unter "about:config" im Eintrag "identity.sync.tokenserver.uri" gesetzt: "https://domain/1.0/sync/1.5"
Das läuft über nen RP. Ist es aber davor auch schon. Ist ja nicht das erste Mal, dass ich das einrichte. Der Healtcheck über die Domain funktioniert.

SQL-Datenbanken Infos nachgetragen:
SQL:
USE tokenserver_rs;
INSERT IGNORE INTO services (id, service, pattern) VALUES ('1', 'sync-1.5', '{node}/1.5/{uid}');
INSERT INTO nodes (id, service, node, available, current_load, capacity, downed, backoff) VALUES ('1', '1', 'http(s)://ffsync.meinedomain.de:port', '1', '0', '5', '0', '0');

Ich checks irgendwie ned.
Und ja, ist mir egal, wenn hier die Passwörter / Secrets drin stehen. Die mache ich (vielleicht) einfach neu.
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
576
Punkte
134
Ich hab vorderhand keinen Fehler in deiner compose gesehen, sollte also gehen. 0.14.4 geht nicht, weil das Image nicht mysql unterstützt, sondern nur Spanner. Aber da scheint sich inzwischen etwas zu tun. 0.13.7 ist also im Moment obligatorisch.

Es sollte schon was in der DB stehen. Meine ist inzwischen grob 172 MB groß.

Hast du mal in about:config das Sync-Logging aktiviert? ("services.sync.log.appender.file.logOnError" / "services.sync.log.appender.file.logOnSuccess")
Error steht standardmässig auf True, der zweite nicht.

Dann mal schauen, was du unter about:sync-log zu sehen bekommt.

P.S. Mit Healthcheck meinst du den Heartbeat, oder?
 
  • Like
Reaktionen: plang.pl

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Meine vorherige DB war auch mehrere hundert MB groß. Deshalb war mir das ja gleich aufgefallen. Ich hab zwar nen Dump. Aber das wird nix bringen, den einzuspielen, denn da passt ja vorher schon was nicht.
Hast du mal in about:config das Sync-Logging aktiviert? ("services.sync.log.appender.file.logOnError" / "services.sync.log.appender.file.logOnSuccess")
Error steht standardmässig auf True, der zweite nicht.
Ah danke. Das werde ich mal machen.
Healthcheck meinst du den Heartbeat
Ja genau.
 
  • Like
Reaktionen: Adama

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
576
Punkte
134
Ich würd auch eher ein Gerät als "Master" nehmen und den alles synchen lassen und dann alle anderen quasi davon wieder synchen lassen...
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Ich hatte es so vor: Erstes GGerät (mit allen Daten im Browser) am Sync-Server anmelden. Dann an den anderen Clients den Firefox resetten und diese anmelden, damit sie sich die Daten ziehen. Das klappte bei der Initialeinrichtung gut. Kann man denn da Master-Instanzen festlegen?
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
576
Punkte
134
Genauso meinte ich das auch...

Deswegen ja auch die Anführungszeichen ums Master... ;)
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Ich hab nun alles noch mal neu gemacht. DBs gelöscht, User gelöscht, Container gelöscht, Image gelöscht.
Dann alles neu angelegt und nun funktioniert es. Wahrscheinlich hatte ich irgendwo nen kleinen Fehler drin.
 
  • Like
Reaktionen: Adama

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
576
Punkte
134
Ich hätte auch echt keine Idee mehr gehabt, sah ja auch alles korrekt aus.

Aber Hauptsache es geht. Jetzt bin ich gespannt, ob sich was bei der SQL/Spanner-Geschichte was tut...
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Vermutlich hatte ich nen Tippfehler bei der URL während der Eintragung in die DB...
ob sich was bei der SQL/Spanner-Geschichte was tut...
Was ist das? Sorry, falls ich was übersehen hab :D
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
576
Punkte
134
Ich dachte, du hättest das mitbekommen. Die Images nach 0.13.7 arbeiten nur noch mit der Spanner-DB (ist was von Google). Auf Github hat einer den Vorschlag gemacht, getrennte Images zu machen, also einmal MySQL und einmal Spanner. Läuft aber zäh an.

Das Grundproblem ist wohl, das der Docker-Container wohl eigentlich nur zum internen Testen gedacht war. Und das Team dahinter nicht viel Manpower hat.
 
  • Like
Reaktionen: plang.pl


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat