SDK ที่สมบูรณ์สำหรับการแชท การแสดงความคิดเห็น และการแจ้งเตือน
cord มอบโซลูชันที่ทรงพลังและยืดหยุ่นแก่นักพัฒนา เพื่อรวมคุณสมบัติการทำงานร่วมกันแบบเรียลไทม์เข้ากับแอปพลิเคชันของพวกเขาได้อย่างราบรื่น ด้วยส่วนประกอบที่สร้างไว้ล่วงหน้าสำหรับการแชท การแสดงตน และการแจ้งเตือน รวมถึง UI ดั้งเดิมที่ปรับแต่งได้อย่างเต็มที่ cord ช่วยให้สามารถใช้งานเครื่องมือการทำงานร่วมกันในแอปที่ซับซ้อนได้อย่างรวดเร็ว ไม่ว่าคุณจะสร้างอินเทอร์เฟซการส่งข้อความแบบธรรมดาหรือสภาพแวดล้อมที่มีผู้ใช้หลายคนที่ซับซ้อน SDK ของ cord มอบความน่าเชื่อถือและความสามารถในการขยายขนาดที่จำเป็นในการปรับปรุงการมีส่วนร่วมของผู้ใช้และปรับปรุงการสื่อสารภายในผลิตภัณฑ์ของคุณ
cord ได้รับการพัฒนาในช่วงแรกเพื่อเป็นโซลูชันเชิงพาณิชย์เพื่อให้ฟีเจอร์การแชท การแสดงความคิดเห็น และการแจ้งเตือนแบบเรียลไทม์ที่มีประสิทธิภาพสำหรับเว็บแอปพลิเคชัน ในเดือนสิงหาคม ปี 2024 เนื่องจากบริการที่โฮสต์ของ cord ถูกยุบ ทีมงานจึงตัดสินใจเปิดซอร์สโค้ดเบสทั้งหมด ด้วยตระหนักถึงคุณค่าของ cord พนักงาน cord หลายคนและผู้สนใจโอเพ่นซอร์สภายในฐานลูกค้าของตน รวมถึง Preset ได้รวมตัวกันเพื่อเปิดตัวโครงการโอเพ่นซอร์สนี้ ผู้ร่วมให้ข้อมูลเหล่านี้จำนวนมากใช้และพึ่งพา cord ในผลิตภัณฑ์ของตนเอง และมุ่งมั่นที่จะรักษาโครงการให้คงอยู่ ประเมินความสนใจภายในชุมชนโอเพ่นซอร์ส และหวังว่าจะได้เห็นโครงการที่น่าทึ่งนี้ทำให้ชุมชนเจริญรุ่งเรือง
สำหรับการสนับสนุนเพิ่มเติมและการเชื่อมต่อกับชุมชน โปรดดูแหล่งข้อมูลต่อไปนี้:
ใช้คำแนะนำเหล่านี้เพื่อรัน cord ภายในเครื่อง โดยใช้ทรัพยากรภายในเครื่องเท่านั้น (DB, Redis ฯลฯ)
หมายเหตุ: cord ได้รับการรันเป็นประจำบน MacOS และ Linux โดยใช้ apt
ไม่ควรมีอะไรเฉพาะเจาะจงกับแพลตฟอร์ม แต่คำแนะนำสำหรับแพลตฟอร์มอื่นๆ ถือเป็นแบบฝึกหัดสำหรับผู้อ่าน
ก่อนที่จะรัน 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
)security.enterprise_roots.enabled
เป็น true
ใน about:config
ลินุกซ์:
mkcert
ผ่าน apt install mkcert
scripts/generate-localhost-certificates.sh
รัน scripts/generate-dotenv.cjs --include-secrets=false
เพื่อสร้างไฟล์ .env
ที่มีตัวเลือกการกำหนดค่าสำหรับการรันเซิร์ฟเวอร์ dev
เรียกใช้ npm run local-dev
เพื่อเริ่มสภาพแวดล้อมการพัฒนาในเครื่อง
มีสองขั้นตอนในการย้ายข้อมูลจากแพลตฟอร์ม cord ไปยังโครงสร้างพื้นฐานที่โฮสต์เอง: การย้ายข้อมูลฐานข้อมูลและการย้ายข้อมูล S3 (เช่น ไฟล์แนบข้อความ)
ในทั้งสองกรณี คุณต้องมีโทเค็นการตรวจสอบสิทธิ์การจัดการโครงการ สิ่งนี้ควรมอบให้กับ API ต่อไปนี้ในส่วนหัวของ Authorization
หากต้องการคัดลอกไฟล์จาก S3 ขั้นแรกคุณต้องกำหนดค่าบัคเก็ต S3 ตามที่อธิบายไว้ในขั้นตอนที่ 1 และ 2 ของเอกสารประกอบสำหรับการกำหนดค่าบัคเก็ต S3 แบบกำหนดเอง จากนั้นสร้างนโยบายที่อนุญาตอย่างน้อยสิทธิ์ PutObject
และ ListObjects
เพื่อ 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
ตัวจัดการคือการคัดลอกส่วนเพิ่มที่ใช้พารามิเตอร์ limit
ตั้งแต่ 1 ถึง 1,000 (ค่าเริ่มต้น 10) และพยายามคัดลอกไฟล์จำนวนมากนั้นลงในที่เก็บข้อมูลของคุณ ดังนั้นคุณอาจต้องเรียกใช้มากกว่าหนึ่งครั้ง รันต่อไปจนกว่าจะส่งคืน {"copied":0}
ซึ่ง ณ จุดนี้ไฟล์ทั้งหมดจะถูกคัดลอก
คุณสามารถดำเนินการขั้นตอนนี้เมื่อใดก็ได้ และเนื่องจากเป็นขั้นตอนแบบค่อยเป็นค่อยไป คุณจึงสามารถดำเนินการได้ก่อนที่คุณจะพร้อมที่จะเปลี่ยนไปใช้โครงสร้างพื้นฐานของคุณเอง จากนั้นจึงเรียกใช้อีกครั้งเมื่อถึงจุดที่มีการสลับเพื่อคัดลอกไฟล์ใหม่ที่ได้รับการอัปโหลด เนื่องจาก.
หากต้องการย้ายข้อมูลฐานข้อมูลของคุณ โปรดโทร https://api.cord.com/v1/customer/dbdump
สิ่งนี้จะสร้างสคริปต์ SQL ที่มีข้อมูลทั้งหมดของคุณ ซึ่งพร้อมที่จะรันกับฐานข้อมูลว่างผ่าน psql --variable=ON_ERROR_STOP=1
ซึ่งจะรวมข้อมูลทั้งหมดสำหรับโครงการทั้งหมดของคุณ โปรดอดทนรอ อาจต้องใช้เวลาถึงหนึ่งหรือสองนาทีในการรวบรวมข้อมูลทั้งหมด
เห็นได้ชัดว่าข้อมูลนี้ใช้ได้ ณ เวลาที่รันคำสั่งเท่านั้น ดังนั้นคุณอาจต้องการใช้เพื่อทดสอบกระบวนการย้ายข้อมูลของคุณ จากนั้นรันอีกครั้งก่อนที่จะเปลี่ยนไปใช้โครงสร้างพื้นฐานของคุณเอง เพื่อเก็บข้อมูลล่าสุด - ข้อมูลวันที่ที่มีอยู่
คุณสามารถใช้ไฟล์ใน repo นี้เพื่อเรียกใช้โครงสร้างพื้นฐานของ cord ภายใต้บัญชี AWS ของคุณเอง นี่เป็นขั้นตอนโดยประมาณในการเริ่มต้นใช้งาน:
คุณต้องการข้อมูลต่อไปนี้:
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 สร้างสิ่งเหล่านี้ให้คุณโดยอัตโนมัติในภูมิภาค และจำเป็นต้องนำเข้าไปยังการกำหนดค่า
สร้างคีย์ RSA SSH ด้วย ssh-keygen -t rsa -b 4096 -C "[email protected]"
จากนั้นใน AWS ให้ไปที่หน้าข้อมูลรับรองความปลอดภัยของฉัน และอัปโหลดไว้ในส่วน "ข้อมูลรับรอง AWS CodeCommit" สิ่งนี้จะถูกใช้สำหรับการเข้าถึง SSH ในระบบ นอกจากนี้ ใน IAM ให้ระบุแท็ก zeroAccount
: yes
ให้กับผู้ใช้ของคุณ พร้อมด้วยผู้ใช้รายอื่นที่คุณต้องการให้ SSH เข้าสู่ระบบได้
อัปเดตค่าคงที่ทั้งหมดใน ops/aws/src/radical-stack/Config.ts
เพื่อตั้งค่าโดเมนของคุณ เพิ่ม ARN สำหรับใบรับรองและ VPC จากขั้นตอนก่อนหน้า ฯลฯ
ใน 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 นาทีนับตั้งแต่คุณเริ่มต้นเป็นศูนย์ (ดึงข้อมูลและติดตั้งกุญแจสาธารณะ SSH สำหรับบัญชีผู้ใช้ทุกๆ 15 นาที) ให้ลองทำ 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
ซึ่งจะเชื่อมต่อคุณกับเครื่องบิลด์ โคลน repo ที่คุณใช้ (พร้อมการเปลี่ยนแปลงทั้งหมดจากด้านบน) จากนั้นเรียกใช้ . ./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 เพื่อรันสิ่งต่างๆ (คุณจะต้องตั้งค่า INCLUDE_GITHUB_RUNNER
ให้ true
ใน ops/aws/src/radical-stack/ec2/build3.ts
เพื่อให้ GitHub Actions Runner ทำงาน)