Dieses Repository enthält den eingestellten Matrix- homeserver der in Rust, Ruma, geschrieben wurde.
Einzelheiten zum Ende des Projekts finden Sie in diesem Blogbeitrag.
Unten finden Sie den vorherigen Inhalt dieser Readme-Datei. Für die restlichen Dateien gehen Sie zum Hauptzweig.
Ruma ist ein in Rust geschriebener Matrix homeserver .
Wenn Sie an dem Projekt interessiert sind, werfen Sie bitte einen Blick auf die Ruma-Website, folgen Sie ruma_io auf Twitter und chatten Sie mit uns unter #ruma:matrix.org auf Matrix (auch über #ruma im freenode IRC-Netzwerk erreichbar).
Das Ziel von Ruma als Projekt ist die Bereitstellung einer vollständigen Implementierung eines Matrix- homeserver , eines Matrix-Identitätsservers, einer Matrix-Client-Bibliothek und Matrix-Anwendungsdiensten. Dieses Repository zielt insbesondere auf die Implementierung eines Matrix- homeserver ab. Der Ruma homeserver wird als einzelne ausführbare Datei für kleine Bereitstellungen und als mehrere ausführbare Dateien für große Bereitstellungen gepackt, bei denen verschiedene Teile des homeserver unabhängig voneinander skaliert werden müssen. Weitere von Ruma verwendete Matrix-Bibliotheken finden Sie in der Ruma-Organisation auf GitHub.
Eine detaillierte Übersicht darüber, welche Matrix-APIs bisher von Ruma unterstützt werden, finden Sie im STATUS-Dokument.
Ruma beinhaltet ein Entwicklungs-Setup mit Docker. Informationen zur Installation von Docker finden Sie in den Installationsanweisungen für OS X, Linux oder Windows. (Beachten Sie, dass sowohl Docker als auch Docker Compose erforderlich sind, die Standardinstallationsmethoden jedoch beide umfassen.)
Hinweis : docker-compose
Version 1.6 oder höher und docker-engine
Version 1.10.0 oder höher sind erforderlich.
Fracht ist der wichtigste Einstiegspunkt für die Entwicklung. Verwenden Sie das Shell-Skript script/cargo
so, wie Sie es normalerweise mit normalem cargo
tun würden. Dadurch wird der Cargo-Befehl in einem Docker-Container ausgeführt, in dem Rust und andere Abhängigkeiten bereits installiert sind. Es startet automatisch auch eine PostgreSQL-Datenbank in einem Container. Wenn Sie zum ersten Mal einen Befehl mit script/cargo
ausführen, dauert das Herunterladen der Docker-Images einige Zeit.
Um Ruma zu erstellen, führen Sie script/cargo build --bin ruma
aus. Die Anwendung wird in target/debug/ruma
geschrieben. Sie können Ruma auch in einem Schritt mit script/cargo run --bin ruma
erstellen und ausführen. (Bei der Ausführung über Cargo müssen Argumente für ruma
selbst nach zwei Bindestrichen stehen, z. B. script/cargo run --bin ruma -- run
.)
Ruma erfordert Rust 1.34 oder höher.
Docker wird verwendet, um das Leben aller einfacher zu machen, einschließlich der Paketierung von Rust zusammen mit den anderen Abhängigkeiten von Ruma und der Verwaltung von Test-PostgreSQL-Datenbanken, alles ohne Rücksicht auf das Hostsystem. Wenn Sie Docker wirklich vermeiden möchten, liegt es an Ihnen, Ihre Entwicklungsumgebung so zu konfigurieren, dass sie den Annahmen des Codes in Ruma entspricht. Dies bedeutet insbesondere mindestens die Mindestversion von Rust, alle Abhängigkeiten auf Systemebene wie libsodium und eine PostgreSQL-Installation mit geeigneten Berechtigungen, die an der in src/test.rs
verwendeten Adresse und dem verwendeten Port verfügbar sind.
Um eine API-Dokumentation für Ruma zu generieren, führen Sie script/cargo doc
aus. Öffnen Sie dann target/doc/ruma/index.html
in Ihrem Browser. Beachten Sie, dass sich diese Dokumentation auf Rumas internen Rust-Code bezieht, nicht auf die öffentlich zugängliche Matrix-API. Die benutzerorientierte Dokumentation wird auf der Ruma-Website verfügbar sein.
Ruma enthält eine Integrationstestsuite. Sobald Docker installiert ist, führen Sie script/cargo test
aus, um die Testsuite auszuführen.
Ruma erfordert eine Konfigurationsdatei mit dem Namen ruma.json
, ruma.toml
oder ruma.yaml
/ ruma.yml
, die jeweils in JSON, TOML oder YAML geschrieben ist. Diese Datei sollte sich im Arbeitsverzeichnis befinden, von dem aus ruma
ausgeführt wird. Ruma wird versuchen, die Konfigurationsdatei in derselben Reihenfolge zu laden und stoppt bei der ersten, die es findet. Eine Konfigurationsdatei würde im JSON-Format etwa so aussehen:
{
"version" : " 1 " ,
"domain" : " example.com " ,
"macaroon_secret_key" : " qbnabRiFu5fWzoijGmc6Kk2tRox3qJSWvL3VRl4Vhl8= " ,
"postgres_url" : " postgres://username:[email protected]:5432/ruma "
}
Die vollständige Liste der Attribute in der Konfiguration lautet wie folgt:
ruma 0.1.0
A Matrix homeserver .
USAGE:
ruma [FLAGS] [SUBCOMMAND]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
help Prints this message or the help message of the given subcommand(s)
run Runs the Ruma server
secret Generates a random value to be used as a macaroon secret key
Bevor Sie ruma run
ausführen, stellen Sie sicher, dass im Arbeitsverzeichnis eine Konfigurationsdatei mit dem Namen ruma.json
vorhanden ist und dass ein PostgreSQL-Server ausgeführt wird und an dem in der Konfigurationsdatei angegebenen Speicherort verfügbar ist. Ruma erstellt automatisch die Datenbank (sofern sie noch nicht vorhanden ist) und verwaltet das Datenbankschema. Sie sind dafür verantwortlich, Ruma eine gültige PostgreSQL-Server-URL und eine Rolle bereitzustellen, die diese Vorgänge ausführen kann.
Ruma enthält einen HTTP-Endpunkt zur Bereitstellung von Swagger-Daten unter http://example.com/ruma/swagger.json (der natürlich den Host und Port Ihres Ruma-Servers für example.com ersetzt). Richten Sie eine Kopie der Swagger-Benutzeroberfläche darauf URL, um die vollständige Dokumentation für die Matrix-Client-API anzuzeigen. Beachten Sie, dass Ruma noch nicht alle diese API-Endpunkte tatsächlich implementiert.
Siehe das CONTRIBUTING-Dokument.
Ruma ist meiner besten Freundin Tamara Boyens gewidmet, die im Januar 2017 verstorben ist. Sie und ich unterhielten uns jeden Tag stundenlang online. Sie war ein großer Teil meiner Motivation, Ruma zu gründen, denn unsere Online-Kommunikation war der Ort, an dem wir die meiste Zeit miteinander verbrachten, nachdem wir beide aus der Stadt weggezogen waren, in der wir uns kennengelernt hatten, und wir waren immer auf der Suche nach einem System, mit dem wir unsere Beschwerden ausräumen konnten all die unterdurchschnittlichen Möglichkeiten, die wir zum Chatten hatten.
— Jimmy Cuadra
MIT