用于聊天、评论和通知的完整 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 中所述。然后创建一个策略,至少允许对存储桶和存储桶中的每个对象具有arn:aws:iam::869934154475:role/radical-stack-prodServerLondonASGInstanceRole31491-P9EJBVI9CBCR
(我们的生产服务器用户)的PutObject
和ListObjects
权限。该策略应该如下所示:
{
"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。)