Das komplette SDK für Chat, Kommentare und Benachrichtigungen
cord bietet Entwicklern eine leistungsstarke, flexible Lösung zur nahtlosen Integration von Funktionen für die Zusammenarbeit in Echtzeit in ihre Anwendungen. Mit vorgefertigten Komponenten für Chat, Anwesenheit und Benachrichtigungen sowie vollständig anpassbaren UI-Grundelementen ermöglicht cord die schnelle Implementierung anspruchsvoller In-App-Collaboration-Tools. Unabhängig davon, ob Sie eine einfache Messaging-Schnittstelle oder eine komplexe Mehrbenutzerumgebung erstellen, bietet das SDK von cord die erforderliche Zuverlässigkeit und Skalierbarkeit, um die Benutzereinbindung zu verbessern und die Kommunikation innerhalb Ihres Produkts zu optimieren.
cord wurde ursprünglich als kommerzielle Lösung entwickelt, um robuste Echtzeit-Chat-, Kommentar- und Benachrichtigungsfunktionen für Webanwendungen bereitzustellen. Im August 2024, als der gehostete Dienst von cord zusammenbrach, beschloss das Team, die gesamte Codebasis als Open Source bereitzustellen. Mehrere cord Mitarbeiter und Open-Source-Enthusiasten aus ihrem Kundenstamm, darunter auch Preset, haben den Wert von cord erkannt und sich zusammengeschlossen, um dieses Open-Source-Projekt zu starten. Viele dieser Mitwirkenden verwenden und verlassen sich auf cord in ihren eigenen Produkten und setzen sich dafür ein, das Projekt am Leben zu erhalten, das Interesse innerhalb der Open-Source-Community zu prüfen und hoffentlich zu sehen, wie dieses erstaunliche Projekt zu einer blühenden Community heranwächst.
Für weitere Unterstützung und die Kontaktaufnahme mit der Community nutzen Sie bitte die folgenden Ressourcen:
Verwenden Sie diese Anweisungen, um cord lokal auszuführen und dabei nur lokale Ressourcen (DB, Redis usw.) zu verwenden.
Hinweis: cord wurde routinemäßig nur auf MacOS- und Linux-Distributionen mit apt
ausgeführt. Nichts sollte plattformspezifisch sein, Anweisungen für andere Plattformen werden dem Leser jedoch als Übung überlassen.
Bevor Sie cord ausführen, müssen Sie Software installieren.
.nvmrc
als auch eine .node-version
Datei bereit, die die zu verwendende Node-Version angibt.jq
installieren (Mac: brew install jq
, Linux: apt install jq
)brew install libpq && brew link --force libpq
, Linux: apt install postgresql-client
)Um über TLS eine Verbindung zu unserem lokalen Computer herzustellen, müssen wir ein selbstsigniertes Zertifikat installieren.
Mac:
scripts/generate-localhost-certificates.sh
aus (wobei Homebrew zur Installation mkcert
verwendet wird).security.enterprise_roots.enabled
in about:config
auf true
Linux:
mkcert
über apt install mkcert
scripts/generate-localhost-certificates.sh
aus Führen Sie scripts/generate-dotenv.cjs --include-secrets=false
aus, um eine .env
Datei zu generieren, die Konfigurationsoptionen zum Ausführen des Entwicklungsservers enthält.
Führen Sie npm run local-dev
aus, um die lokale Entwicklungsumgebung zu starten.
Die Migration Ihrer Daten von der cord -Plattform in Ihre eigene, selbst gehostete Infrastruktur erfolgt in zwei Schritten: Migration der Datenbankdaten und Migration von S3-Daten (z. B. Nachrichtenanhänge).
In beiden Fällen benötigen Sie ein Projektmanagement-Authentifizierungstoken. Dies sollte den folgenden APIs in einem Authorization
bereitgestellt werden.
Um Ihre Dateien aus S3 zu kopieren, müssen Sie zunächst einen S3-Bucket konfigurieren, wie in den Schritten 1 und 2 der Dokumentation zum Konfigurieren eines benutzerdefinierten S3-Buckets beschrieben. Erstellen Sie dann eine Richtlinie, die mindestens die Berechtigungen PutObject
und ListObjects
für arn:aws:iam::869934154475:role/radical-stack-prodServerLondonASGInstanceRole31491-P9EJBVI9CBCR
(unseren Produktionsserverbenutzer) sowohl für den Bucket als auch für jedes Objekt im Bucket zulässt. Die Richtlinie sollte etwa so aussehen:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::869934154475:role/radical-stack-prodServerLondonASGInstanceRole31491-P9EJBVI9CBCR"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::YOUR-S3-BUCKET-ID",
"arn:aws:s3:::YOUR-S3-BUCKET-ID/*"
]
}
]
}
Sobald dies erledigt ist, wenden Sie sich an jemanden bei cord , da wir auch eine IAM-Richtlinie in unserem Konto konfigurieren müssen, um denselben Zugriff zu genehmigen.
Rufen Sie nach dem Einrichten der Berechtigungen https://api.cord.com/v1/customer/copyfiles?region=YOUR-S3-REGION&bucket=YOUR-S3-BUCKET-ID
auf. Der Handler ist eine inkrementelle Kopie, die einen limit
von 1 bis 1000 (Standard 10) annimmt und versucht, so viele Dateien in Ihren Bucket zu kopieren, sodass Sie ihn wahrscheinlich mehr als einmal ausführen müssen. Führen Sie es so lange aus, bis es {"copied":0}
zurückgibt. An diesem Punkt werden alle Dateien kopiert.
Sie können diesen Schritt jederzeit ausführen. Da er inkrementell ist, können Sie ihn ausführen, bevor Sie bereit sind, zu Ihrer eigenen Infrastruktur zu wechseln, und ihn dann zum Zeitpunkt der Umstellung erneut ausführen, um einfach alle neuen Dateien zu kopieren, die hochgeladen wurden seit.
Um Ihre Datenbankdaten zu migrieren, rufen Sie https://api.cord.com/v1/customer/dbdump
auf. Dadurch wird ein SQL-Skript erstellt, das alle Ihre Daten enthält und über psql --variable=ON_ERROR_STOP=1
in einer leeren Datenbank ausgeführt werden kann. Darin sind alle Daten aller Ihrer Projekte enthalten. Seien Sie geduldig, es kann ein bis zwei Minuten dauern, bis alle Daten erfasst sind.
Diese Daten sind natürlich nur zum Zeitpunkt der Ausführung des Befehls gültig. Daher möchten Sie sie wahrscheinlich zum Testen Ihres Migrationsprozesses verwenden und sie dann direkt vor dem Wechsel zu Ihrer eigenen Infrastruktur erneut ausführen, um den aktuellsten Stand zu erfassen -Datumsdaten verfügbar.
Sie können die Dateien in diesem Repo verwenden, um die Infrastruktur von cord unter Ihrem eigenen AWS-Konto auszuführen. Dies ist ungefähr die Reihe von Schritten, um das zum Laufen zu bringen:
Sie benötigen folgende Informationen:
1234567890
)eu-central-1
)cord .example.com
)Suchen Sie mindestens die folgenden Dateien und ersetzen Sie alle Verweise auf die oben genannten drei Dinge durch Ihre Werte. Diese können in Konstanten, ARNs usw. vorliegen. Verwenden Sie „Suchen und Ersetzen“. (Es gibt noch andere, aber das sollte ausreichen, um Sie zum Laufen zu bringen.)
package.json
(die Befehle db-ssh-tunnel
und db-ssh-tunnel-write
npm)ops/aws/config/zero/cssh
ops/aws/src/Config.ts
ops/dockerfiles/server.Dockerfile
ops/local-s3/create-buckets.sh
scripts/connect-docker-to-aws-ecr.sh
scripts/manual-deploy.sh
scripts/ci/build-on-commit.sh
scripts/lib/secrets.cjs
server/src/config/Env.ts
Erstellen Sie in us-east-1
Zertifikate für *.
, *.staging.
und *.loadtest.
(z. B. *.staging. cord .example.com
). Diese werden für CloudFront verwendet und müssen sich daher in us-east-1
befinden, unabhängig davon, in welcher Region Sie ausgeführt werden.
Suchen Sie die Standard-VPC für die Region, in der Sie arbeiten, zusammen mit den drei Standard-Subnetzen. AWS erstellt diese automatisch für Sie in den Regionen und sie müssen in die Konfigurationen importiert werden.
Erstellen Sie einen RSA-SSH-Schlüssel mit ssh-keygen -t rsa -b 4096 -C "[email protected]"
. Gehen Sie dann in AWS zur Seite „Meine Sicherheitsanmeldeinformationen“ und laden Sie sie im Abschnitt „AWS CodeCommit-Anmeldeinformationen“ hoch. Dies wird für den SSH-Zugriff auf das System verwendet. Geben Sie Ihrem Benutzer auch in IAM das Tag zeroAccount
: yes
zusammen mit allen anderen Benutzern, denen Sie eine SSH-Verbindung zum System ermöglichen möchten.
Aktualisieren Sie alle Konstanten in ops/aws/src/radical-stack/Config.ts
um Ihre Domänen festzulegen, ARNs für die Zertifikate und VPCs aus dem vorherigen Schritt hinzuzufügen usw.
Führen Sie in ops/aws
npm install
und npm run deploy
. Dies wird lange dauern, da viele Dienste (Datenbanken, EC2-Instanzen usw.) aufgerufen werden. Wenn dies fehlschlägt, ist CloudFormation leider nicht in der Lage, die Erstellung einer Reihe dieser Objekte rückgängig zu machen. Sie müssen also alle manuell löschen, andernfalls schlägt der nächste Versuch fehl, da einige der Objekte bereits vorhanden sind. (Hoffentlich scheitert es nicht.)
(Ihre EC2-Maschinen werden sofort abstürzen und ständig neu gestartet, da noch kein Server-Build verfügbar ist. Das ist in Ordnung.)
Der Host, den wir als SSH-Bastion verwenden, heißt zero
. Fügen Sie ~/.ssh/config
eine Strophe hinzu (erstellen Sie sie bei Bedarf), die lautet:
Host zero
HostName zero. cord .example.com
Port 28547
User YOUR_AWS_USERNAME
ForwardAgent yes
Wenn dann seit dem Start von Zero mindestens 15 Minuten vergangen sind (alle 15 Minuten werden öffentliche SSH-Schlüssel für Benutzerkonten abgerufen und installiert), versuchen Sie es mit ssh zero
. Es sollte Sie in eine Konsole führen. Wenn ja, herzlichen Glückwunsch, Sie befinden sich jetzt im virtuellen privaten Netzwerk und alles sollte funktionieren.
Gehen Sie zu scripts/generate-dotenv.cjs
und bearbeiten Sie die Eigenschaften, um sie an Ihre Bedürfnisse anzupassen. Zumindest müssen Sie die AWS-Region und cord -basierten Hostnamen aktualisieren. Fügen Sie außerdem in der buildProdEnv
Funktion am Ende INCLUDE_SDK_TESTBED: '1'
hinzu.
Führen Sie Folgendes auf Ihrem lokalen Computer aus:
$ npm run db-ssh-tunnel-write
$ PGPASSWORD="$(aws secretsmanager get-secret-value --secret-id database-prod-1 | jq -r '.SecretString | fromjson | .password')" createdb -h localhost -p 25432 -U ChuckNorris radical_db
$ PGPASSWORD="$(aws secretsmanager get-secret-value --secret-id database-prod-1 | jq -r '.SecretString | fromjson | .password')" psql -h localhost -p 25432 -U ChuckNorris -d radical_db
radical_db=> CREATE EXTENSION "uuid-ossp";
radical_db=> COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)';
Führen Sie bei zero
den Befehl cssh -l ubuntu build3
aus, wodurch Sie mit der Build-Maschine verbunden werden. Klonen Sie das von Ihnen verwendete Repo (mit allen oben genannten Änderungen) und führen Sie dann ./scripts/ci/build-on-commit.sh
aus. Dies sollte eine Version der Server erstellen und Ihnen mitteilen, dass diese aufgrund der Heimdall-Einstellungen nicht automatisch bereitgestellt werden, Ihnen aber einen Befehl zum Ausführen geben, um sie manuell zu pushen (es beginnt mit scripts/manual-deploy.sh
).
Führen Sie den manuellen Bereitstellungsbefehl aus. Der Push kann nicht ausgeführt werden, da die Server derzeit fehlerhaft sind, aber das ist in Ordnung. Sobald der Vorgang abgeschlossen ist, übernehmen die Server beim nächsten Neustart den neuen Code und sollten ordnungsgemäß ausgeführt werden.
Ändern Sie das staging
in dem von Ihnen ausgeführten Befehl in prod
und führen Sie es erneut aus. Das Gleiche sollte passieren, aber die Produktserver sollten in Ordnung sein.
Sie sollten jetzt über eine lauffähige Version der gesamten cord verfügen. Sie können den Schritten im vorherigen Abschnitt dieser README-Datei folgen, um Ihre DB- und S3-Daten in den Datenspeicher zu migrieren.
An dieser Stelle können Sie API-Schlüssel für alle von Ihnen verwendeten Dienste hinzufügen, z. B. SendGrid und LaunchDarkly. Die Schlüssel befinden sich in SecretsManager unter einigermaßen gut beschriebenen Elementen, oder Sie können sie in scripts/generate-dotenv.cjs
nachschlagen.
Jetzt können Sie loslegen. Jedes Mal, wenn Sie neue Versionen erstellen möchten, können Sie sich bei der build3
Maschine anmelden und sie selbst ausführen, oder Sie können die Beispiele in github_workflows
verwenden, um GitHub-Workflows auszuführen, um Dinge auszuführen. (Sie müssen INCLUDE_GITHUB_RUNNER
in ops/aws/src/radical-stack/ec2/build3.ts
auf true
setzen, um den GitHub Actions Runner zum Laufen zu bringen.)