Firefox Sync Server über Docker

thk_ms

Benutzer
Mitglied seit
19. Sep 2011
Beiträge
347
Punkte für Reaktionen
9
Punkte
18
Hallo, dann versuche ich es noch mal so:
xBiZdQkc.png

LG, thk_ms
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Aber der Container startet jetzt sauber, also Du hast keine ungewöhnlichen Meldungen im Log?

Wenn der Container startet, sollte eigentlich nicht mehr als folgendes drin stehen:
Code:
[2021-11-20 16:21:05 +0000] [7] [INFO] Starting gunicorn 19.10.0
[2021-11-20 16:21:05 +0000] [7] [INFO] Listening at: http://0.0.0.0:5000 (7)
[2021-11-20 16:21:05 +0000] [7] [INFO] Using worker: sync
[2021-11-20 16:21:05 +0000] [15] [INFO] Booting worker with pid: 15

Sprichst Du den Container über die Syno-Adresse an oder nutzt Du den Reverse Proxy?
 
Zuletzt bearbeitet:

Psy87

Benutzer
Mitglied seit
09. Dez 2010
Beiträge
120
Punkte für Reaktionen
10
Punkte
18
Ich hätte eine Frage zur SQL Variante.
Welche Zugangsdaten trage ich da ein? Passwort kann ich ja vergeben, aber Name? IP vom SQL Server dann lokal oder dyndns?
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Ich vermute mal, damit sprichst Du mich an...

Die Datenbank läuft ja auch auf der Syno (MariaDB), d.h. ich spreche die Datenbank über die Adresse der Syno an.

Hier mal die Kommando-Zeile, mit der ich den Container eingerichtet habe:
Code:
docker run -d --name FirefoxSync --restart always -p 50000:5000 -e SYNCSERVER_PUBLIC_URL=<Öffentliche URL:Port> -e SYNCSERVER_SECRET=<Dein Secret> -e SYNCSERVER_SQLURI="pymysql://<DB User>:<DB Passwort>@<IP der Syno>:3307/<DB Name>" -e SYNCSERVER_BATCH_UPLOAD_ENABLED=true -e SYNCSERVER_FORCE_WSGI_ENVIRON=true -e PORT=5000 mozilla/syncserver:latest

Die Werte in den Kleiner-Größer-Zeichen musst Du natürlich auf deine Umgebung anpassen...
 
  • Like
Reaktionen: Psy87

Psy87

Benutzer
Mitglied seit
09. Dez 2010
Beiträge
120
Punkte für Reaktionen
10
Punkte
18
Wenn ich das so mache, kommt im Log:
No Connection to SQL server.
Code:
OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '192.168.178.21' (timed out)")
Port ist bei mir auf Standard mit 3306
User: root und Passwort hab ich ja selbst vergeben.
Die Datenbank wird selbst angelegt? Oder muss ich die erstellen?
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Sorry, hätte ich erwähnen sollen. Die Datenbank musst Du vorher anlegen. Und in deinem Fall in der Befehlszeile natürlich den Datenbank-Port ändern (Ich gehe mal davon aus, dass Du das schon gemacht hast).

Ich hab' mir auch einen extra Benutzer angelegt.

Und wie meinst Du das mit "User: root und Passwort hab ich ja selbst vergeben"?
 
  • Like
Reaktionen: Psy87

Psy87

Benutzer
Mitglied seit
09. Dez 2010
Beiträge
120
Punkte für Reaktionen
10
Punkte
18
Code:
[2021-11-23 15:51:16 +0000] [9] [INFO] Reason: Worker failed to boot.,
[2021-11-23 15:51:58 +0000] [8] [INFO] Starting gunicorn 19.10.0,
[2021-11-23 15:51:58 +0000] [8] [INFO] Listening at: http://0.0.0.0:5000 (8),
[2021-11-23 15:51:58 +0000] [8] [INFO] Using worker: sync,
[2021-11-23 15:51:58 +0000] [16] [INFO] Booting worker with pid: 16,
[2021-11-23 15:52:11 +0000] [16] [ERROR] Exception in worker process,
Traceback (most recent call last):,
  File "/usr/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 586, in spawn_worker,
    worker.init_process(),
  File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 135, in init_process,
    self.load_wsgi(),
  File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi,
    self.wsgi = self.app.wsgi(),
  File "/usr/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi,
    self.callable = self.load(),
  File "/usr/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load,
    return self.load_wsgiapp(),
  File "/usr/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp,
    return util.import_app(self.app_uri),
  File "/usr/local/lib/python2.7/site-packages/gunicorn/util.py", line 350, in import_app,
    __import__(module),
  File "/app/syncserver/wsgi_app.py", line 2, in <module>,
    application = syncserver.main(),
  File "/app/syncserver/__init__.py", line 281, in main,
    config = get_configurator(global_config, **settings),
  File "/app/syncserver/__init__.py", line 273, in get_configurator,
    config.include(includeme),
  File "/usr/local/lib/python2.7/site-packages/pyramid/config/__init__.py", line 676, in include,
    c(configurator),
  File "/app/syncserver/__init__.py", line 158, in includeme,
    config.include("syncstorage", route_prefix="/storage"),
  File "/usr/local/lib/python2.7/site-packages/pyramid/config/__init__.py", line 676, in include,
    c(configurator),
  File "/usr/local/lib/python2.7/site-packages/syncstorage/__init__.py", line 18, in includeme,
    config.include("syncstorage.storage"),
  File "/usr/local/lib/python2.7/site-packages/pyramid/config/__init__.py", line 676, in include,
    c(configurator),
  File "/usr/local/lib/python2.7/site-packages/syncstorage/storage/__init__.py", line 576, in includeme,
    storage = load_storage_from_settings("storage", settings),
  File "/usr/local/lib/python2.7/site-packages/syncstorage/storage/__init__.py", line 600, in load_storage_from_settings,
    return klass(**section_settings),
  File "/usr/local/lib/python2.7/site-packages/syncstorage/storage/sql/__init__.py", line 137, in __init__,
    self.dbconnector = DBConnector(sqluri, **dbkwds),
  File "/usr/local/lib/python2.7/site-packages/syncstorage/storage/sql/dbconnect.py", line 385, in __init__,
    collections.create(self.engine, checkfirst=True),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/sql/schema.py", line 860, in create,
    bind._run_visitor(ddl.SchemaGenerator, self, checkfirst=checkfirst),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2032, in _run_visitor,
    with self._optional_conn_ctx_manager(connection) as conn:,
  File "/usr/local/lib/python2.7/contextlib.py", line 17, in __enter__,
    return self.gen.next(),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2024, in _optional_conn_ctx_manager,
    with self._contextual_connect() as conn:,
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2226, in _contextual_connect,
    self._wrap_pool_connect(self.pool.connect, None),,
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2266, in _wrap_pool_connect,
    e, dialect, self,
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1536, in _handle_dbapi_exception_noconnection,
    util.raise_from_cause(sqlalchemy_exception, exc_info),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 383, in raise_from_cause,
    reraise(type(exception), exception, tb=exc_tb, cause=cause),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2262, in _wrap_pool_connect,
    return fn(),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool/base.py", line 363, in connect,
    return _ConnectionFairy._checkout(self),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool/base.py", line 760, in _checkout,
    fairy = _ConnectionRecord.checkout(pool),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool/base.py", line 492, in checkout,
    rec = pool._do_get(),
  File "/usr/local/lib/python2.7/site-packages/mozsvc/metrics.py", line 183, in timed_func,
    return func(*args, **kwds),
  File "/usr/local/lib/python2.7/site-packages/syncstorage/storage/sql/dbconnect.py", line 305, in _do_get,
    return QueuePool._do_get(self),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool/impl.py", line 139, in _do_get,
    self._dec_overflow(),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 68, in __exit__,
    compat.reraise(exc_type, exc_value, exc_tb),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool/impl.py", line 136, in _do_get,
    return self._create_connection(),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool/base.py", line 308, in _create_connection,
    return _ConnectionRecord(self),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool/base.py", line 437, in __init__,
    self.__connect(first_connect_check=True),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool/base.py", line 639, in __connect,
    connection = pool._invoke_creator(self),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 114, in connect,
    return dialect.connect(*cargs, **cparams),
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 453, in connect,
    return self.dbapi.connect(*cargs, **cparams),
  File "/usr/local/lib/python2.7/site-packages/pymysql/__init__.py", line 94, in Connect,
    return Connection(*args, **kwargs),
  File "/usr/local/lib/python2.7/site-packages/pymysql/connections.py", line 325, in __init__,
    self.connect(),
  File "/usr/local/lib/python2.7/site-packages/pymysql/connections.py", line 630, in connect,
    raise exc,
OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '192.168.178.21' (timed out)"),
(Background on this error at: http://sqlalche.me/e/e3q8),
[2021-11-23 15:52:11 +0000] [16] [INFO] Worker exiting (pid: 16),
[2021-11-23 15:52:11 +0000] [8] [INFO] Shutting down: Master,
[2021-11-23 15:52:11 +0000] [8] [INFO] Reason: Worker failed to boot.

Will nicht klappen.
Hab über den sql Befehl die DB "Firefox" erstellt.
Benutzer ist "root"
1637683534868.png

So sieht mein Befehl aus:
Code:
docker run -d --name FirefoxSyncSQL --restart always -p 32777:5000 -e SYNCSERVER_PUBLIC_URL=https://ffsync.domain.tld -e SYNCSERVER_SECRET=mysecret -e SYNCSERVER_SQLURI="pymysql://root:"passwort"@192.168.178.21:3306/Firefox" -e SYNCSERVER_BATCH_UPLOAD_ENABLED=true -e SYNCSERVER_FORCE_WSGI_ENVIRON=true -e PORT=5000 mozilla/syncserver:latest

So die MariaDB Einstellung

1637682936114.png
 
Zuletzt bearbeitet:

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Ich bin nicht mehr ganz sicher, aber ich meine, der Benutzer root ist standardmässig so eingestellt, dass er nur von "localhost" angesprochen werden kann.

Der Benutzer, den ich angelegt habe, steht auf 172.17.0.*, also die IP-Range, die Docker nutzt...

Hast Du das Passwort wirklich in Anführungszeichen gesetzt? Das war bei mir nicht nötig und könnte in diesem Fall eventuell die Variable aufbrechen...

Du kannst ja mal einen eigenen User anlegen:
Code:
create user 'ffsync'@'localhost' identified by 'MeingeheimesPW';
grant all privileges on Firefox.* to 'ffsync'@'%' identified by 'MeingeheimesPW';
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Psy87

Psy87

Benutzer
Mitglied seit
09. Dez 2010
Beiträge
120
Punkte für Reaktionen
10
Punkte
18
Es scheint nun zu laufen. Vielen Dank für deine Unterstützung.
Ich musste noch die SQL Adresse auf die externe dyndns Domain ändern, mit lokaler IP kam keine Verbindung zustande.

Das Passwort war nicht in Anführungszeichen, nur hier zur Darstellung :)
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Gerne...

Das mit der IP find ich merkwürdig, das ging bei mir ohne Probleme. Hast Du das denn jetzt mit einem extra Benutzer gemacht oder weiterhin mit root?
 

Psy87

Benutzer
Mitglied seit
09. Dez 2010
Beiträge
120
Punkte für Reaktionen
10
Punkte
18
Mit dem neuen Benutzer "ffsync" den du mir aufgeführt hast. root ist tatsächlich nur aufs lokale Netz beschränkt.
Hab noch zum Prüfen phpmyadmin installiert, darin konnte ich dann schnell sehen wann sich was tut.
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Komisch, dass das bei Dir nur über die DynDNS-Adresse geht. Da fragt man sich ja, welchen Weg die Daten nehmen und vor allen Dingen, was passiert, wenn DynDNS nicht laufen sollte...

Ich kann mich auch nicht erinnern, dass ich für den Datenbank-Zugriff irgendwas besonderes im Container einstellen musste...

Ich werde das noch mal mit einer Test-Datenbank und einem Testcontainer prüfen...
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Ich hab's grad getestet, funktioniert auf Anhieb mit der lokalen IP...

Seltsam...
 

thk_ms

Benutzer
Mitglied seit
19. Sep 2011
Beiträge
347
Punkte für Reaktionen
9
Punkte
18
Aber der Container startet jetzt sauber, also Du hast keine ungewöhnlichen Meldungen im Log?

Wenn der Container startet, sollte eigentlich nicht mehr als folgendes drin stehen:
Code:
[2021-11-20 16:21:05 +0000] [7] [INFO] Starting gunicorn 19.10.0
[2021-11-20 16:21:05 +0000] [7] [INFO] Listening at: http://0.0.0.0:5000 (7)
[2021-11-20 16:21:05 +0000] [7] [INFO] Using worker: sync
[2021-11-20 16:21:05 +0000] [15] [INFO] Booting worker with pid: 15

Sprichst Du den Container über die Syno-Adresse an oder nutzt Du den Reverse Proxy?
Hallo zusammen,

mit der Zeile
Code:
sudo docker run -d --name ffsync -p 50000:5000 -e SYNCSERVER_PUBLIC_URL=https://192.168.1.xx:8132 -e SYNCSERVER_SECRET=xxxxxxx -e SYNCSERVER_SQLURI=sqlite:////data/syncserver.db -e SYNCSERVER_BATCH_UPLOAD_ENABLED=true -e SYNCSERVER_FORCE_WSGI_ENVIRON=true -e PORT=5000 -v /volume1/docker/ffsync:/data/ mozilla/syncserver:latest

läuft der Container kontinurierlich.

Mein log zeigt folgendes an:

Code:
4 Elemente.
[2021-11-28 12:35:19 +0000] [8] [INFO] Starting gunicorn 19.10.0
[2021-11-28 12:35:19 +0000] [8] [INFO] Listening at: http://0.0.0.0:5000 (8)
[2021-11-28 12:35:19 +0000] [8] [INFO] Using worker: sync
[2021-11-28 12:35:19 +0000] [16] [INFO] Booting worker with pid: 16

Ich spreche die Synology direkt an, ohne Reverse-Proxy. Im Browser habe ich unter "identity.sync.tokenserver.uri" den Eintrag "http://192.168.1.11:8132/token/1.0/sync/1.5" drin. Auch Port 5000 habe ich da zum testen eingesetzt. Alle Kombinationen durchgespielt - kein Erfolg :-(

Vielleicht kannst Du mir die Ports noch einmal erklären. Hier sind ja 5.000, 50.000 und der 8132 genannt. Gelauscht wird auf 5000. Ist das der Port, der im Browser hinterlegt werden muss?

LG, thk_ms
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
5000 ist der interne Port, den der Container nutzt.

50000 (oder was immer du da haben möchtest) ist der externe Port, mit dem du von außen auf den Container zugreifst.

Wenn Du keinen Reverse Proxy dazwischen hast, muss dieser Port auch für die Public URL genommen werden.
 

thk_ms

Benutzer
Mitglied seit
19. Sep 2011
Beiträge
347
Punkte für Reaktionen
9
Punkte
18
Hallo,

Vielen Dank für Deine Antwort.

Ich verstehe Dich so:

Der Port 5000 interessiert mich nicht weiter.

Der Port 50000 ist für den Zugriff von Außen - der Port dem ich eine Portweiterleitung in meiner Fritzbox einrichte. Dann mit meiner DNS-Adresse https:// Meine.DNS.de:50000

Der Port 8132 nutze ich intern (Eintrag in about:config) mit der IP-Nummer 192.168.1.xxx:9132 meiner DS.

Ich meine, ich habe das alles durch gestest - ohne Erfolg.

Aber ich prüfe das nochmal.

LG, thk_ms
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Mit Außen ist der Container gemeint, nicht außerhalb deines Netzes...

D.h. auch in about:config ist der Port 50000 zu nutzen, 8132 hast Du ja nirgendwo konfiguriert...
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
So, ich hab's noch mal getestet...

Deine Docker-Zeile muss so lauten:
Code:
docker run -d --name ffsync -p 50000:5000 -e SYNCSERVER_PUBLIC_URL=http://Syno_IP:50000 -e SYNCSERVER_SECRET=secret -e SYNCSERVER_SQLURI=sqlite:////data/syncserver.db -e SYNCSERVER_BATCH_UPLOAD_ENABLED=true -e SYNCSERVER_FORCE_WSGI_ENVIRON=true -e PORT=5000 -v /volume1/docker/ffsync:/data/ mozilla/syncserver:latest

Die Zeile für about:config muss so lauten:
Code:
http://Syno_IP:50000/ffsync/token/1.0/sync/1.5

Und nicht vergessen, der Ordner für die Datenbank muss die richtigen Rechte haben:
Code:
chown 1001:1001 /volume1/docker/ffsync/
 
  • Like
Reaktionen: thk_ms

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Hi @thk_ms,

ich bin neugierig, hast du meine letzen Eingaben mal umgesetzt und getestet?
 
  • Like
Reaktionen: thk_ms

thk_ms

Benutzer
Mitglied seit
19. Sep 2011
Beiträge
347
Punkte für Reaktionen
9
Punkte
18
Hallo zusammen,

bin etwas ausgebremmst worden bei diesen kleinen Projekt. Jetzt gehts aber weiter. @Adama: Deine Neugierde komme ich aber gerne nach :)

Über das Terminal habe ich versucht Dein abgeändertes Sript auszuführen. Hierzu habe ich mich als admin angemeldet. Ich bekomme aber die Meldung :

Code:
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create?name=ffsync": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Ich meinte dann noch zu wissen, dass man sich noch als "superuser" su ins System anzumelden hat. Das wird aber gar nicht akzeptiert vom DSM. Und der Hinweis auf die Docker-help - da finde ich leider nichts Offensichtliche.


Wie wird das script zum Ausführen richtig eingegeben?

Vielen Dank, thk_ms
 


 

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