用於聊天、評論和通知的完整 SDK
cord為開發人員提供了強大、靈活的解決方案,將即時協作功能無縫整合到他們的應用程式中。借助用於聊天、狀態和通知的預先建置元件以及完全可自訂的 UI 原語, cord可以快速實施複雜的應用程式內協作工具。無論您是建立簡單的訊息傳遞介面還是複雜的多用戶環境, cord的 SDK 都能提供增強用戶參與度和簡化產品內通訊所需的可靠性和可擴展性。
cord最初是作為商業解決方案開發的,旨在為 Web 應用程式提供強大的即時聊天、評論和通知功能。 2024 年 8 月,隨著cord的託管服務關閉,團隊決定開源整個程式碼庫。在意識到cord的價值後,幾位cord員工和客戶群中的開源愛好者(包括 Preset)聚集在一起啟動了這個開源專案。這些貢獻者中的許多人在自己的產品中使用並依賴cord ,並致力於保持專案的活力,評估開源社群的興趣,並希望看到這個令人驚嘆的專案發展成為一個繁榮的社區。
如需進一步支持並與社區聯繫,請參閱以下資源:
使用這些說明在本地端運行cord ,僅使用本地資源(DB、Redis 等)。
注意: cord僅通常使用apt
在 MacOS 和 Linux 發行版上運行。任何內容都不應特定於平台,但其他平台的說明將作為讀者的練習。
在運行cord之前,您需要安裝一些軟體。
.nvmrc
和.node-version
文件,用於指定要使用的 Node 版本。jq
(Mac: brew install jq
,Linux: apt install jq
)brew install libpq && brew link --force libpq
,Linux: apt install postgresql-client
)要透過 TLS 連接到本機,我們需要安裝自簽章憑證。
蘋果:
scripts/generate-localhost-certificates.sh
(這將使用 Homebrew 安裝mkcert
)about:config
中將security.enterprise_roots.enabled
設為true
Linux:
apt install mkcert
mkcert
安裝 mkcertscripts/generate-localhost-certificates.sh
運行scripts/generate-dotenv.cjs --include-secrets=false
以產生.env
文件,其中包含用於運行開發伺服器的配置選項。
執行npm run local-dev
啟動本機開發環境。
將資料從cord平台遷移到您自己的自架基礎架構有兩個步驟:遷移資料庫資料和遷移 S3 資料(例如訊息附件)。
在這兩種情況下,您都需要專案管理身份驗證令牌。這應該在Authorization
標頭中提供給以下 API。
若要從 S3 複製文件,首先需要配置 S3 儲存桶,如配置自訂 S3 儲存桶文件的步驟 1 和 2 所述。然後建立一個策略,至少允許對儲存桶和儲存桶中ListObjects
每個物件具有arn:aws:iam PutObject
arn:aws:iam::869934154475:role/radical-stack-prodServerLondonASGInstanceRole31491-P9EJBVI9CBCR
(我們的生產使用者)的權限。該策略應該如下所示:
{
"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/*"
]
}
]
}
完成後,請聯絡cord的人員,因為我們還需要在我們的帳戶中配置 IAM 策略以批准相同的存取。
設定權限後,呼叫https://api.cord.com/v1/customer/copyfiles?region=YOUR-S3-REGION&bucket=YOUR-S3-BUCKET-ID
。該處理程序是一個增量複製,它採用從 1 到 1000(預設為 10)的limit
參數,並嘗試將這麼多檔案複製到您的儲存桶中,因此您可能需要多次執行它。繼續運行它直到返回{"copied":0}
,此時所有檔案都被複製。
您可以隨時執行此步驟,並且由於它是增量式的,因此您可以在準備切換到自己的基礎架構之前運行它,然後在切換時再次運行它以複製已上傳的任何新文件自從。
若要遷移資料庫數據,請呼叫https://api.cord.com/v1/customer/dbdump
。這將產生一個包含所有資料的 SQL 腳本,準備好透過psql --variable=ON_ERROR_STOP=1
針對空資料庫執行。這將包括您所有項目的所有數據。請耐心等待,收集所有數據可能需要一兩分鐘。
這些資料顯然僅在命令運行時有效,因此您可能希望使用它來測試遷移過程,然後在切換到您自己的基礎架構之前再次運行它,以便捕獲最新的資料- 可用的日期資料。
您可以使用此儲存庫中的檔案在您自己的 AWS 帳戶下執行cord的基礎架構。這大約是啟動和運行的一系列步驟:
您需要以下資訊:
1234567890
)eu-central-1
)cord .example.com
)至少找到以下文件,並將上述三件事的所有引用替換為您的值。這些可能位於常數、ARN 等。 (還有其他的,但這應該足以讓您啟動並運行。)
package.json
( db-ssh-tunnel
和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
在us-east-1
中,為*.
, *.staging.
和*.loadtest.
(例如, *.staging. cord .example.com
)。這些用於 CloudFront,因此無論您在哪個區域運行,它們都必須位於us-east-1
中。
尋找您正在運行的區域的預設 VPC 及其三個預設子網路。 AWS 會在區域中自動為您建立這些,並且需要將它們匯入到配置中。
使用ssh-keygen -t rsa -b 4096 -C "[email protected]"
建立 RSA SSH 金鑰。然後在 AWS 中,前往我的安全憑證頁面並在「AWS CodeCommit 憑證」部分下上傳。這將用於透過 SSH 存取系統。同樣在 IAM 中,為您的使用者提供標籤zeroAccount
: yes
以及您希望能夠透過 SSH 存取系統的任何其他使用者。
更新ops/aws/src/radical-stack/Config.ts
中的所有常數以設定網域、為上一步中的憑證和 VPC 新增 ARN 等。
在ops/aws
中,執行npm install
和npm run deploy
。這將需要很長時間,因為它會啟動大量服務(資料庫、EC2 執行個體等)。如果失敗,不幸的是 CloudFormation 無法回滾這些東西的創建,因此您必須手動刪除它們,否則下一次嘗試將失敗,因為某些物件已經存在。 (希望不會失敗。)
(您的 EC2 電腦將立即開始崩潰並不斷重新啟動,因為它們尚未可用的伺服器版本。沒關係。)
我們用作 SSH 堡壘的主機名為zero
。在~/.ssh/config
中添加一個節(如果需要的話創建它),內容如下:
Host zero
HostName zero. cord .example.com
Port 28547
User YOUR_AWS_USERNAME
ForwardAgent yes
然後,如果自您開始清零以來已經過去了至少 15 分鐘(它每 15 分鐘為用戶帳戶獲取並安裝 SSH 公鑰),請嘗試執行ssh zero
。它應該會讓你進入控制台。如果是這樣,那麼恭喜您,您現在位於虛擬私人網路內,一切應該可以正常運作。
轉到scripts/generate-dotenv.cjs
並編輯屬性以根據您的需求進行調整。至少,您需要更新 AWS 區域和cord .com 的主機名稱。另外,在buildProdEnv
函數末端加入INCLUDE_SDK_TESTBED: '1'
。
從本機電腦執行以下命令:
$ 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)';
在zero
上,執行cssh -l ubuntu build3
,這會將您連接到建置機器。克隆您正在使用的儲存庫(包含上面的所有變更),然後執行./scripts/ci/build-on-commit.sh
。這應該會建立一個伺服器版本,並告訴您由於 heimdall 設置,它不會自動部署它們,但會給您一個運行命令來手動推送它們(以scripts/manual-deploy.sh
開頭)。
運行手動部署命令。由於伺服器目前不健康,它將無法推送,但沒關係。完成後,伺服器將在下一個重新啟動週期中取得新程式碼,並且應該正常啟動。
在您運行的命令中將staging
更改為prod
並再次運行它。同樣的事情應該發生,但產品伺服器應該沒問題。
您現在應該擁有所有cord基礎設施的運作版本。您可以依照本 README 上一節的步驟將 DB 和 S3 資料移轉到資料儲存體。
此時,您可以為您正在使用的任何服務新增 API 金鑰,例如 SendGrid 和 LaunchDarkly。金鑰位於 SecretsManager 中合理描述的項目下,或者您可以在scripts/generate-dotenv.cjs
中找到它們。
現在您已準備好出發了。任何時候你想要建立新版本,你都可以登入build3
機器並自己運行它們,或者你可以使用github_workflows
中的範例來執行 GitHub 工作流程來運行東西。 (您需要在ops/aws/src/radical-stack/ec2/build3.ts
中將INCLUDE_GITHUB_RUNNER
設為true
才能執行 GitHub Actions Runner。)