حزمة SDK الكاملة للدردشة والتعليق والإشعارات
يوفر cord للمطورين حلاً قويًا ومرنًا لدمج ميزات التعاون في الوقت الفعلي بسلاسة في تطبيقاتهم. بفضل المكونات المعدة مسبقًا للدردشة والحضور والإشعارات، بالإضافة إلى عناصر واجهة المستخدم الأولية القابلة للتخصيص بالكامل، يتيح 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
يحتوي على خيارات التكوين لتشغيل خادم التطوير.
قم بتشغيل npm run local-dev
لبدء بيئة التطوير المحلية.
هناك خطوتان لترحيل بياناتك من النظام الأساسي cord إلى البنية الأساسية ذاتية الاستضافة الخاصة بك: ترحيل بيانات قاعدة البيانات وترحيل بيانات S3 (مثل مرفقات الرسائل).
في كلتا الحالتين، تحتاج إلى رمز مصادقة إدارة المشروع. يجب توفير ذلك لواجهات برمجة التطبيقات التالية في رأس 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 إلى 1000 (الافتراضي 10) وتحاول نسخ هذا العدد من الملفات إلى مجموعتك، لذلك من المحتمل أن تضطر إلى تشغيلها أكثر من مرة. استمر في تشغيله حتى يعود {"copied":0}
، وعندها يتم نسخ جميع الملفات.
يمكنك القيام بهذه الخطوة في أي وقت، ولأنها تزايدية، يمكنك تشغيلها قبل أن تصبح جاهزًا للتبديل إلى البنية الأساسية الخاصة بك ثم تشغيلها مرة أخرى عند نقطة التبديل لنسخ أي ملفات جديدة تم تحميلها منذ.
لترحيل بيانات قاعدة البيانات الخاصة بك، اتصل بـ https://api.cord.com/v1/customer/dbdump
. سيؤدي هذا إلى إنتاج برنامج نصي SQL يحتوي على جميع بياناتك، وجاهز للتشغيل على قاعدة بيانات فارغة عبر psql --variable=ON_ERROR_STOP=1
. سيشمل هذا جميع البيانات لجميع مشاريعك. كن صبورًا، فقد يستغرق الأمر ما يصل إلى دقيقة أو دقيقتين لجمع كافة البيانات.
من الواضح أن هذه البيانات تكون صالحة فقط اعتبارًا من وقت تشغيل الأمر، لذلك من المحتمل أن ترغب في استخدامها لاختبار عملية الترحيل، ثم تشغيلها مرة أخرى مباشرة قبل التبديل إلى البنية الأساسية الخاصة بك وذلك للحصول على أحدث البيانات -بيانات التاريخ المتاحة.
يمكنك استخدام الملفات الموجودة في هذا الريبو لتشغيل البنية التحتية لـ 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، انتقل إلى صفحة My Security Credentials وقم بتحميلها ضمن قسم "بيانات اعتماد AWS CodeCommit". سيتم استخدام هذا للوصول إلى SSH للنظام. أيضًا في IAM، امنح المستخدم الخاص بك العلامة zeroAccount
: yes
مع أي مستخدم آخر تريد أن يكون قادرًا على دخول SSH إلى النظام.
قم بتحديث جميع الثوابت في ops/aws/src/radical-stack/Config.ts
لتعيين نطاقاتك، وأضف ARNs للشهادات وVPCs من الخطوة السابقة، وما إلى ذلك.
في 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 . أيضًا في وظيفة 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 . يمكنك اتباع الخطوات الواردة في القسم السابق من هذا الملف التمهيدي لترحيل بيانات 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.)