Skip to main content
Bun هو بيئة تشغيل للغتي JavaScript وTypeScript تتضمن عميل Postgres مدمجًا هو Bun.sql، لذا لا حاجة إلى تثبيت أي مشغّل. في هذا الدليل، ستربط Bun بخدمة ClickHouse Managed Postgres عبر اتصال TLS مُتحقَّق منه، ثم تنشئ جدولًا، وتنفّذ استعلامات ومعاملة، وأخيرًا تعرض الصفوف عبر HTTP باستخدام Bun.serve.

المتطلبات الأساسية

  • Bun الإصدار 1.4 أو أحدث. اختُبر هذا الدليل باستخدام Bun 1.4.2 وPostgres 18.
  • حساب على ClickHouse Cloud.
  • psql، لإنشاء قاعدة البيانات. ويمكنك بدلًا من ذلك تنفيذ عبارة CREATE DATABASE في SQL console.

إنشاء خدمة ClickHouse Managed Postgres

في وحدة تحكم ClickHouse Cloud، انقر على New service ثم اختر Postgres. سيصبح المثيل جاهزًا خلال بضع دقائق. للاطلاع على شرح مفصّل للخطوات، راجع دليل البدء السريع.

احصل على بيانات الاتصال

افتح خدمتك وانقر على Connect في الشريط الجانبي الأيسر. أبقِ الخيار Directly محددًا وفعّل Use SSL. سينتهي عنوان URL حينها بـ sslmode=verify-full&sslrootcert=.... انقر على Download CA certificate لتنزيل شهادة CA الخاصة بالمثيل. يعتمد هذا الدليل على الاتصال المباشر عبر المنفذ 5432. فتطبيق Bun.serve عملية تعمل لفترات طويلة، كما يدير Bun.sql مجمّع الاتصالات الخاص به، لذا لا حاجة إلى أداة تجميع اتصالات من جهة الخادم. أما إذا كنت تشغّل عددًا كبيرًا من عمليات Bun قصيرة الأمد، فراجع الاتصال عبر PgBouncer.

إعداد المشروع

أنشئ مشروعًا:
هل تُضيف ذلك إلى تطبيق قائم؟تخطَّ الأمرين mkdir وbun init -y، فـ Bun.sql مدمج في Bun ولا حاجة إلى تثبيت أي شيء. من المجلد الجذر لمشروعك، انتقل مباشرةً إلى تهيئة الاتصال، وأضف كذلك NODE_EXTRA_CA_CERTS=./ca-certificate.pem في بداية البرنامج النصي الذي يشغّل تطبيقك حتى يتمكن من التحقق من الخادم.

تهيئة الاتصال

انقل شهادة CA التي نزّلتها إلى المشروع، ثم أعد تسميتها إلى ca-certificate.pem:
أنشئ قاعدة بيانات للتطبيق. استبدل <PASSWORD> واسم المضيف بالقيم المعروضة في النافذة المنبثقة Connect:
أضف عنوان URL للاتصال بقاعدة البيانات guide_bun إلى الملف .env، وأنشئ الملف إن لم يكن موجودًا. يحمّل Bun الملف .env تلقائيًا، ويقرأ التصدير sql من bun المتغير DATABASE_URL:
.env
رمّز كلمة المرور بترميز URL إذا كانت تحتوي على محارف خاصة، واحرص على عدم إضافة .env إلى نظام التحكم في الإصدارات. أضف هذه النصوص البرمجية إلى package.json، وادمجها في قسم scripts إن كان موجودًا بالفعل. تمرّر هذه النصوص البرمجية شهادة CA إلى Bun عبر NODE_EXTRA_CA_CERTS:
package.json
كيف يتحقق Bun من شهادة الخادم
  • يجعل sslmode=verify-full الأداة Bun.sql تتحقق من سلسلة الشهادات ومن اسم المضيف معًا.
  • لا تنسخ المعلمة sslrootcert من عنوان URL الظاهر في وحدة التحكم، فالأداة Bun.sql لا تقرؤها، بل تمررها إلى الخادم على أنها إعداد وقت تشغيل، فيفشل الاتصال بالخطأ unrecognized configuration parameter "sslrootcert".
  • يجب تعيين NODE_EXTRA_CA_CERTS في البيئة عند بدء تشغيل Bun، إذ لا يقرؤه Bun من الملف .env، ولهذا يُضاف في النصوص البرمجية.
  • في الإصدار Bun 1.4.2، يفشل تمرير الشهادة التي نزّلتها عبر الخيار tls: { ca } في SQL بالخطأ certificate signature failure. استخدم NODE_EXTRA_CA_CERTS بدلًا من ذلك.

إنشاء جدول

أنشئ الملف setup.ts. يعرض هذا الملف حالة TLS الخاصة بالـ session، ثم ينشئ جدول todos:
setup.ts
نفّذه:
للتأكد من أن الشهادة يجري التحقق منها فعلًا، شغّل الملف دون شهادة CA، وستلاحظ رفض الاتصال:

الاستعلام عن قاعدة البيانات

يعتمد Bun.sql على القوالب الموسومة (tagged templates)، إذ تُرسَل كل قيمة مُضمَّنة بوصفها معلمة ربط (bind parameter)، ولذلك يمكن تمرير مدخلات المستخدم بأمان. أنشئ الملف queries.ts:
queries.ts
تُنفِّذ sql.begin دالة الاستدعاء (callback) ضمن معاملة (transaction)، فتُثبِّت المعاملة عند انتهاء دالة الاستدعاء، وتتراجع عنها إذا رفعت الدالة استثناءً. شغِّلها:

تقديم الصفوف عبر HTTP

أنشئ الملف server.ts يتضمّن نقطة نهاية /todos لاستعراض الصفوف وإنشائها:
server.ts
شغِّل الخادم:
في طرفية أخرى، أضف صفًا:

التحقق

افتح http://localhost:3106/todos في متصفحك لعرض جميع الصفوف. ستظهر الاستجابة على النحو التالي، بعد تنسيقها لتسهيل قراءتها:
في وحدة التحكم، افتح SQL console ثم وسّع guide_bun، ثم public، ثم todos لتظهر لك الصفوف نفسها:

الاتصال عبر PgBouncer

إذا كنت تشغّل عددًا كبيرًا من عمليات Bun قصيرة العمر، فاتصل عبر PgBouncer المضمَّن بدلًا من ذلك. اختر via PgBouncer في نافذة Connect المنبثقة، وغيّر المنفذ في DATABASE_URL إلى 6432. أما شهادة CA وsslmode=verify-full فتبقى كما هي. يعمل PgBouncer في وضع تجميع الاتصالات على مستوى المعاملة (transaction pooling). يستخدم Bun.sql افتراضيًا العبارات المُعدّة المسمّاة (named prepared statements)، وقد عملت عبر PgBouncer في اختباراتنا دون أي أخطاء. إذا ظهرت لك أخطاء prepared statement does not exist، فأنشئ العميل مع الخيار prepare: false:
مرِّر prepare كخيار، لا ضمن عنوان URL. فكما هو الحال مع sslrootcert، تُمرَّر معلمة URL ‏prepare=false إلى الخادم فيرفضها.

الخطوات التالية

آخر تعديل في ١٤ أكتوبر ٢٠٢٦