matrixdotorg/synapse

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Moin zusammen,

ich würde gern einen neuen Docker installieren/starten und wollte Euch einmal fragen, ob es schon jemanden gibt, der es vielleicht schon eingerichtet hat und mit mir/uns teilen möchte? Des Weiteren würde ich diesen Thread gerne für Tipps und Anleitungen nutzen.

Gerne werde ich die Anleitung auch gleich im ersten Post anpassen.

Vielleicht habt ihr ja schon eine laufende Instanz und wollt Eure Umgebungsvariablen mal teilen, wie habt Ihr es eingerichtet?
- Wie habt ihr die Verschlüsselung gelöst, habt Ihr einen ReserveProxy eingerichtet?


https://github.com/matrix-org/synapse


https://hub.docker.com/r/matrixdotorg/synapse

Viele Grüße,
Seger
 

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Hey,

herzlichen Dank! Diese „Anleitung“ habe ich bereits gelesen, komme aber nur bis zu einem gewissen Punkt. Bzw. stecke ich irgendwie dazwischen fest: https://www.synoforum.com/threads/matrix-synapse.1941/#post-8253
-> aktuell startet mein Container und bleibt auch online. Der eigentliche Server ist wohl auch gestartet und die jeweilige .yaml Datei wurde auch erzeugt. Bin bei dem Schritt das ich mich einloggen soll und einen User erstellen muss geht es dann aber nicht weiter.

Es wurde auch eine Key Datei erstellt, aber wir generiere ich jetzt den neuen User. Ich habe auch schon über das Docker Terminal versucht per SU Create New User auszuführen, aber es das scheitert immer daran, dass er mir im Terminal sagt das die .yaml Datei kein Ordner oder Datei wäre. Pfad: volume1/docker/matrix/xyz.yaml

Da ich das ganze docker compose nicht verstehe, bin ich noch auf der GUI unterwegs.
-ich verstehe es schon Irgendwie, man braucht die Argumente nicht alle eingeben und muss nur die docker compose Datei kopieren.
-> ich verstehe aber noch nicht was man dann immer im Docker eingeben muss ... immer nur den Pfad zur docker compose Datei?
-> sodass er sich die Daten daher zieht?

Entschuldigt meine aus dem Kopf formulierte Antwort, sitze gerade nicht vorm Rechner (Handy).

Sieht hier jemand von euch einen Ansatzpunkt oder kann mir/uns noch ein wenig weiterhelfen. Vielleicht habt ihr ja eine funktionierende Einstellung u d könnt sie mal als Screenshot teilen. Vielleicht reicht ja aber auch nur der kleine Tipp.

Danke und viele Grüße,
Seger
 

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Also vielleicht einmal mein Zwischenstand,
Der Server ist hochgestartet.

Weiß leider nicht wie ich einen Benutzer erstelle, geht irgendwie nicht oder ich denke falsch ;-):

register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008

register_new_matrix_user -c /volume1/docker/matrix/homeserver.yaml http://localhost:8008

Hab zudem irgendwie nur Leserechte (Protokoll Docker GUI):
sqlite3.OperationalError: attempt to write a readonly database
2020-03-09 11:17:12,964 - synapse.storage.database - 389 - WARNING - prune_old_user_ips-


Anbei einige Screenshots:
umgebung.JPG
volumen.JPG
dateien.JPG
browser.jpg
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.476
Punkte für Reaktionen
359
Punkte
103
SYNAPSE_ENABLE_REGISTRATION=1 then you can register via riot.

Ohne diese Umwelt-Variable gibt es keine Registrierung. Danach musst Du einen Client, bspw. Riot verwenden, um Dich zu registrieren.
Fragen zur Anwendung selbst kann ich dir nicht beantworten; ich benutzt sie nicht.

Bitte schau dir in dem Thread das UID/GID Thema an. Der Container wird offensichtlich mit einer UID ausgeführt, die keine Schreibrecht auf das gemappte (Syno) Verzeichnis hat.
 

Jaytie

Benutzer
Mitglied seit
02. Jul 2013
Beiträge
95
Punkte für Reaktionen
6
Punkte
8
Ich melde hier ebenfalls Interesse an :)
Arbeite mich gerade (soweit es die Zeit zulässt) in das Thema ein. Mein Container läuft zumindest schon mal. War auch nicht so ohne weiteres mit der GUI von Synology möglich, da ich den Container erst mit dem 'generate' Ausführungsbefehl anlegen musste und danach diesen wieder manuell in der Config entfernen musste und einen neuen Container mit dieser Config anlegen musste. Aber es scheint erst mal zu laufen (bekomme die Meldung 'Synapse is running' auf dem von mir definierten Port)

Was jetzt halt kommt ist die Integration meines Protokolls für die Verschlüsselung und einer Postgres Datenbank.
 

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Also bei mir läuft es jetzt auch.
ja die "generate" Nummer und die Probierstunde habe ich auch schon hinter mir.
Ich bin gerade dabei das Teil das erste Mal zu testen ...

Ist sehr komplex und sicher weiter als Synology Chat, aber der eigentliche Chat und die nicht Anpassung/Design und die Einstellungen im Client habe ich mir irgendwie besser vorgestellt. Bin mir noch nicht sicher ob es mich überzeugt.

Ich werde es weiter testen ... hast du denn schon gute oder schlechte Erfahrungen mit den Clients gemacht?

Werde mich gleich mal um meinen Proxy kümmern... oder es per https einrichten.... mal schauen.
 

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Ohne diese Umwelt-Variable gibt es keine Registrierung. Danach musst Du einen Client, bspw. Riot verwenden, um Dich zu registrieren.
Fragen zur Anwendung selbst kann ich dir nicht beantworten; ich benutzt sie nicht.

Bitte schau dir in dem Thread das UID/GID Thema an. Der Container wird offensichtlich mit einer UID ausgeführt, die keine Schreibrecht auf das gemappte (Syno) Verzeichnis hat.

Der Tipp war super, aber ich musste es tatsächlich in der homeserver.yaml setzen "true"

Danke und viele Grüße,
Seger
 

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Hatte ich, aber in der Yaml Datei war noch per Default auf false gesetzt und somit ging es nicht. Erst nach dem erlauben in der der Datei.

Aber ja, es läuft... werde jetzt mal ausgiebig testen.
Sind ja auch gerade einige Clients in der Entwicklung, vielleicht kommt da noch was geniales :)
 
Zuletzt bearbeitet von einem Moderator:

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.476
Punkte für Reaktionen
359
Punkte
103
Oh, als ich damals das Docker-compose.yml geschrieben und das ganze getestet hatte, ging das so durch (die Antworten in dem anderen Forums Post sind von mir)...

Ich hab mir neulich spasseshalber Rocketchat wieder aufgesetzt. Auch das natürlich mit docker-compose.yml. Sieht richtig gut aus und bringt eine Browser UI mit.
Solange man keine Sicherheitsbedenken hat schlägt aber nichts Slack...
 

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Okay, schau ich mir auch mal an...

Diese Docker-compose.yml ;-) muss ich nochmal verstehen. Das ist doch nichts anderes wie die Hilfe um der fehlerhaften GUI zu entfliehen, oder?
Wenn du mir das mal an einem Beispiel durchspielen könntest würde ich sehr freuen. Kann auch ein andere Docker sein zur Erklärung.

Danke Dir und viele Grüße
 
Zuletzt bearbeitet von einem Moderator:

Jaytie

Benutzer
Mitglied seit
02. Jul 2013
Beiträge
95
Punkte für Reaktionen
6
Punkte
8
Ich hatte eigentlich final auch vor, das mit Docker-compose umzusetzen. Wie man das mit der Docker App in DSM zusammen bringt, muss ich mir auch noch ansehen.

Was Clients angeht, ist ja gerade der Riot-Nachfolger RiotX in Entwicklung. Auf den wollte ich eigentlich setzen :)
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.476
Punkte für Reaktionen
359
Punkte
103
Bei den docker-compose Dateien geht es um versionerbare Reproduzierbarkeit der Konfiguration, die auch noch dokumentiert welche Parameter man wie verwendet hat :)

Ob über GUI, docker run oder docker-compose, mit allem kann man mehr oder weniger dasselbe ausdrücken. Die Optionen lassen sich zwischen docker run und docker-compose vollständig übersetzen. Mit der GUI geht es zum größten Teil genauso, nur das diese einzelne Optionen nicht unterstützt werden - hier ist es vorteilhaft wenn man weiss welche nicht unterstützt sind.

Ansonsten verhält es sich fast wie eine Mathegleichung: man kann von der einen Seite auf die andere Umformen und erhält das selbe Ergebnis :) (bis auf die Optionen, die die Gui nicht unterstützt)

Es gibt eine hervorragende Spezifikation, in die ich heute noch häufiger reinschaue, wenn ich von einzelnen Konfigurationen die Syntax oder Optionen nicht im Kopf habe.
Für reine docker-compose deployments ist das Version 2: https://docs.docker.com/compose/compose-file/compose-file-v2

"ein Docker" <- so heissen Container in der Sprache der Ahnungslosen!
 

Jaytie

Benutzer
Mitglied seit
02. Jul 2013
Beiträge
95
Punkte für Reaktionen
6
Punkte
8
Inzwischen hab ich mir ein bisschen weiter eingearbeitet. Zunächst hab ich einen Container mit einer Standardinstallation von Matrix Synapse ans Laufen gebracht, um das Ganze etwas zu testen. (Mit der internen DB Sqlite). Soweit sieht das ganz interessant aus.
Also wollte ich richtig einsteigen und mit Docker-Compose einen Synapse Server und eine Postgres Datenbank aufsetzen.

Da das offizielle Image von Synapse wohl keinen Turn Server mitbringt versuch ichs gerade damit: https://hub.docker.com/r/avhost/docker-matrix

Ich bin soweit, dass die Container starten. Allerdings kann sich Synapse wohl nicht zur Datenbank verbinden, da die Werte LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; jeweils auf C stehen müssen. Ich hab aber keinen Weg gefunden, das von Anfang an (womöglich schon in der Compose Datei) zu definieren.

so far...
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.476
Punkte für Reaktionen
359
Punkte
103
Ich nehme an das es eine PostgreSQL Datenbank ist?

Das offizielle PostgresSQL Image hat einen eingebautet Initialisierungsmechanismus:
If you would like to do additional initialization in an image derived from this one, add one or more *.sql, *.sql.gz, or *.sh scripts under /docker-entrypoint-initdb.d (creating the directory if necessary). After the entrypoint calls initdb to create the default postgres user and database, it will run any *.sql files, run any executable *.sh scripts, and source any non-executable *.sh scripts found in that directory to do further initialization before starting the service.

Warning: scripts in /docker-entrypoint-initdb.d are only run if you start the container with a data directory that is empty; any pre-existing database will be left untouched on container startup. One common problem is that if one of your /docker-entrypoint-initdb.d scripts fails (which will cause the entrypoint script to exit) and your orchestrator restarts the container with the already initialized data directory, it will not continue on with your scripts.

Siehe https://github.com/matrix-org/synapse/blob/master/docs/postgres.md#set-up-database für "wie lege ich einen Nutzer an und wie erzeuge ich die Datenbank". Dann muss man eine entsprechende .sql-Datei basteln und als Volume unterhalb des oben angegeben Ordners mapen (Wichtig: wird nur ausgeführt wenn DB wirklich leer ist!). Komisch nur das es benötigt wird - oder war das bei dem anderen Image und der bereitgestellten docker-compose.yml auch schon notwendig?
 

Jaytie

Benutzer
Mitglied seit
02. Jul 2013
Beiträge
95
Punkte für Reaktionen
6
Punkte
8
Ja es handelt sich um das offizielle Image: https://hub.docker.com/_/postgres

Also Nutzer und Datenbank hab ich schon. In Docker-Compose wird unter Envenvironment folgendes angehängt:
- POSTGRES_USER=synapse
- POSTGRES_PASSWORD=password

Damit wird wohl ein user samt gleichnahmiger Datenbank angehängt. Allerdings hat die Datenbank unter "LC_COLLATE" und "LC_CTYPE" falsche Werte, weshalb Synapse sie nicht beschreiben kann. Ich bin mir nicht genau im Klaren, was das genau bedeutet. Ist alles Neuland für mich. Genaueres dazu findet sich auch in der Synapse Doku: https://github.com/matrix-org/synapse/blob/master/docs/postgres.md

Synapse will refuse to set up a new database if it has the wrong values of COLLATE and CTYPE set, and will log warnings on existing databases. Using different locales can cause issues if the locale library is updated from underneath the database, or if a different version of the locale is used on any replicas.

The safest way to fix the issue is to take a dump and recreate the database with the correct COLLATE and CTYPE parameters (as per docs/postgres.md). It is also possible to change the parameters on a live database and run a REINDEX on the entire database, however extreme care must be taken to avoid database corruption.

edit: Ok jetz hab ichs. Hab mich jetzt mit pgAdmin mit der Datenbank verbunden und eine erstellt, die die nötigen Werte hatte. Also doch wieder GUI :p

Jetz läuft Synapse wieder und mit der Postgres DB deutlich flotter. Was ich jetzt noch ans laufen bringen muss ist die Verbindung des Servers nach außen zu anderen und der TURN Server geht auch noch nicht.

Wenn jetzt ein Update für ein Docker Image erscheint, wie aktualisiere ich das dann mit Docker-Compose? Einfach das neue Image/neue Imagenummer eintragen und dann docker-compose down und wieder up?
 
Zuletzt bearbeitet:

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.476
Punkte für Reaktionen
359
Punkte
103
edit: Ok jetz hab ichs. Hab mich jetzt mit pgAdmin mit der Datenbank verbunden und eine erstellt, die die nötigen Werte hatte. Also doch wieder GUI :p
Wenn man den PostgreSQL-Image Initalisierungsmechanismus nicht nutzt, muss man es direkt über SQL-Statements machen... ob nun im Container via psql oder über pgAmin spielt keine Rolle.

Wenn jetzt ein Update für ein Docker Image erscheint, wie aktualisiere ich das dann mit Docker-Compose? Einfach das neue Image/neue Imagenummer eintragen und dann docker-compose down und wieder up?

Das hängt davon ab, ob Du das docker-compose.yml mit dem offiziellen Image so verwendest wie im anderen Forum angegeben. Nur dann ist sichergestellt, dass Environments und vorallem Volumes identisch sind.

Normalweise muss man nur das Tag ersetzen werden und `docker-compose up -d` ausgeführt werden. Docker Compose erkennt bei welchen Service sich etwas getan hat und erzeugt nur für diesen einen neuen Container auf Basis des neuen Images; Alles anderen Services der docker-compose.yml laufen unverändert weiter. Wenn man mit den Volumes richtig gemacht hat, bekommt man nichts mit von der Aktuallisierung.
 
Zuletzt bearbeitet:

Jaytie

Benutzer
Mitglied seit
02. Jul 2013
Beiträge
95
Punkte für Reaktionen
6
Punkte
8
Wenn man den PostgreSQL-Image Initalisierungsmechanismus nicht nutzt, muss man es direkt über SQL-Statements machen... ob nun im Container via psql oder über pgAmin spielt keine Rolle..

.
In diversen Tutorials war nie die Rede von einem Initialisierungsmechanismus. Es wurden nur die beiden Env. Einträge "postgres_user und postgres_password gesetzt und dann soll es angeblich klappen. Nur dass die dann erzeugte DB halt von Synapse nicht beschreibbar ist. Die Erzeugung einer DB via psql hab ich auch erst versucht. Hat auch geklappt, nur hab ich es nicht hinbekommen COLLATE und CTYPE richtig zu setzten. Die Befehle hat er irgendwie nicht angenommen.
Naja über pgAdmin hat letztendlich geklappt.




Das hängt davon ab, ob Du das docker-compose.yml mit dem offiziellen Image so verwendest wie im anderen Forum angegeben. Nur dann ist sichergestellt, dass Environments und vorallem Volumes identisch sind.

Normalweise muss man nur das Tag ersetzen werden und `docker-compose up -d` ausgeführt werden. Docker Compose erkennt bei welchen Service sich etwas getan hat und erzeugt nur für diesen einen neuen Container auf Basis des neuen Images; Alles anderen Services der docker-compose.yml laufen unverändert weiter. Wenn man mit den Volumes richtig gemacht hat, bekommt man nichts mit von der Aktuallisierung.

Für Synapse nutze ich nicht das offizielle sondern eins mit integriertem TURN Server. Environments und Volumes sind aber identisch zum Offiziellen. Postgres ist das offizielle.
Was meinst du mit Tag ersetzen? In meiner Docker-Compose.yml nutze ich unter image nicht die :latest sondern genaue Versionsnummern. Also im Falle von Synapse wäre das bei mir derzeit: 'image: avhost/docker-matrix:v1.11.1'

Müsste ich für ein Update dann an der Stelle die Versionsnummer ändern oder zieht er bei einem erneuten Start der Compose.yml automatisch ein aktuelleres image?
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.476
Punkte für Reaktionen
359
Punkte
103
In deinem Beispiel 'image: avhost/docker-matrix:v1.11.1', wird das Image von dem Repo "avhost/docker-matrix" für das Tag "v1.11.1" verwendet.
Das was Du Versionsnummer nennst ist das Tag. Manchmal wird auch die Angabe von Repo:Tag als Tag bezeichnet.
 


 

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