alawadi.cloudمستندات
أدلّة الاستخدام

أضِف Postgres أو MySQL أو Redis مُدارة

أضِف قاعدة بيانات مُدارة إلى مشروع من لوحة التحكم واربطها بتطبيقك ليُحقَن رابط الاتصال تلقائياً.

إضافة قاعدة بيانات

قواعد البيانات المُدارة تعمل داخل مشروعك، ولا يصل إليها سوى عبر DNS الداخلي. وهي ليست متاحة للعموم أبداً. تُنشئ واحدة من لوحة التحكم، ثم تربطها بتطبيق Docker لتحقن المنصّة رابط الاتصال (مع بيانات الدخول) في ذلك التطبيق نيابةً عنك. أنت لا ترى كلمة المرور ولا تنسخها ولا تكتبها بنفسك.

المحرّكات ثابتة ومُدارة: Postgres 16 وMySQL 8.4 وRedis 8.

المسار من لوحة التحكم

افتح قواعد البيانات من الشريط الجانبي واضغط قاعدة بيانات جديدة. اختر المشروع والمحرك (PostgreSQL أو MySQL أو Redis) والاسم والموارد المحجوزة. أرسِل، فتنتقل إلى صفحة تفاصيل القاعدة الجديدة بينما يجري إعدادها.
في صفحة التفاصيل، استخدم ربط تطبيق واختر تطبيق Docker في نفس المشروع. تحقن المنصّة DATABASE_URL (لـ Postgres/MySQL) أو REDIS_URL (لـ Redis) في ذلك التطبيق وتُعيد تشغيله تلقائياً.
اقرأ المتغيّر المحقون من بيئة تطبيقك. لا حاجة لإعادة نشر يدوية: يُعيد الربط تجهيز المُستهلِك نيابةً عنك.

1. إنشاء قاعدة البيانات

في نافذة الإنشاء تضبط:

  • المشروع: تنضمّ القاعدة إلى هذا المشروع، ولا تصل إليها سوى الخدمات الموجودة فيه.
  • المحرك: PostgreSQL أو MySQL أو Redis. تعرض النافذة الخيارات المناسبة لكلٍّ منها:
    • PostgreSQL: الإصدار 16. يتصل على المنفذ 5432 عبر DATABASE_URL.
    • MySQL: الإصدار 8.4. يتصل على المنفذ 3306 عبر DATABASE_URL.
    • Redis: يتصل على المنفذ 6379 عبر REDIS_URL. مع مفتاح استمرارية البيانات (مُفعَّل افتراضياً؛ عطِّله للذاكرة المؤقتة البحتة) وسياسة الإخلاء (maxmemory_policy، والافتراضي allkeys-lru).
  • الاسم: اسم سهل؛ وتعرض النافذة المعرّف (slug) الذي سيُنشَر به.
  • الموارد: المعالج (CPU) والذاكرة (Memory) والتخزين (Storage) المحجوزة (ضمن حدود، انظر أدناه).

للحقل resources حدود: cpu_milli من 250 إلى 4000 (بخطوات 250)، memory_mb من 256 إلى 8192 (بخطوات 128)، storage_gb من 1 إلى 100. القيم خارج المدى تُرفض. تعمل كل قاعدة بيانات كنسخة داخلية واحدة؛ وعدد النسخ غير قابل للضبط.

2. ربط قاعدة البيانات بتطبيقك

يمكنك الربط من أيٍّ من الجهتين، وكلاهما يؤدّي الغرض نفسه:

  • من صفحة التطبيق: افتح الخدمات المرتبطة ← ربط قاعدة بيانات واختر قاعدة بيانات في نفس المشروع.
  • من صفحة قاعدة البيانات: افتح ربط تطبيق واختر التطبيق.

قاعدة البيانات هي المزوِّد، والتطبيق هو المُستهلِك. تحقن المنصّة متغيّرات الاتصال في التطبيق عبر مرجع إلى Secret في Kubernetes وتُعيد تشغيله تلقائياً. تبقى بيانات الدخول داخل الـ Secret. لا تظهر أبداً كنصّ صريح في متغيّرات البيئة ولا في أيّ استجابة من الـ API، ولا تضبطها بنفسك.

الاتصال دائم: يُعاد تطبيقه عند كل تغيير، سواء تعديل متغيّرات البيئة أو توسيع عدد النسخ أو التوسيع التلقائي أو نشر حزمة جديدة (بما في ذلك من GitHub Actions)، فيبقى التطبيق المرتبط متّصلاً عبر عمليات إعادة النشر.

ما الذي يُحقَن (حسب إطار العمل)

تحقن المنصّة مجموعة متغيّرات قياسية ليكون الاسم الصحيح حاضراً لإطار عملك مسبقاً:

المحركاقرأ هذايُحقَن أيضاً
PostgresDATABASE_URLPGHOST PGPORT PGDATABASE PGUSER PGPASSWORD؛ SPRING_DATASOURCE_URL / _USERNAME / _PASSWORD
MySQLDATABASE_URLDB_HOST DB_PORT DB_NAME DB_USER DB_PASSWORD؛ SPRING_DATASOURCE_*
RedisREDIS_URLREDIS_HOST REDIS_PORT REDIS_PASSWORD

تقرأ Node وPython وGo وRails وDjango المتغيّر DATABASE_URL، بينما يقرأ Java/Spring المتغيّر SPRING_DATASOURCE_URL. تعرض بطاقة الخدمات المرتبطة في صفحة التطبيق أسماء المتغيّرات بدقّة ومقتطفاً جاهزاً للنسخ بلغتك، إضافةً إلى زرّ فكّ الربط.

لا تُربط قاعدة البيانات المُدارة إلّا بتطبيق خلفي (backend). أمّا حِزم الواجهة الأمامية (VITE_* / REACT_APP_*) فتُبنى مسبقاً ويجب ألّا تحمل بيانات دخول قاعدة بيانات، لذا لا يُتاح ربط قاعدة بيانات بها.

3. قراءة المتغيّر في تطبيقك

بمجرّد الربط، يُعاد تشغيل تطبيقك والمتغيّرات حاضرة. اقرأها بالطريقة المعتادة من البيئة (مثلاً os.environ["DATABASE_URL"] أو process.env.REDIS_URL).

المسار المتقدم: عبر API

مسار الإنشاء والربط نفسه متاح عبر API للأتمتة وكتابة السكربتات. صادِق كل طلب برمز الوصول الخاص بحسابك في ترويسة Authorization: Bearer، واحصل على PROJECT_ID من مشروعك في لوحة التحكم.

إنشاء قاعدة البيانات

أرسِل الاسم السهل name والموارد المحجوزة resources و(لـ Postgres/MySQL) الإصدار version. تحوّل المنصّة الاسم إلى معرّف (slug)، وتولّد بيانات الدخول، وتُعيد معرّف الخدمة الجديدة id ومضيف الاتصال الداخلي host:

# Add managed Postgres to a project
curl -X POST https://api.alawadi.cloud/v1/projects/$PROJECT_ID/postgres \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "app-db",
    "version": "16",
    "resources": { "cpu_milli": 500, "memory_mb": 512, "storage_gb": 5 }
  }'

بدِّل جزء المسار إلى mysql أو redis لإنشاء تلك المحرّكات بدلاً من ذلك:

  • postgres: الإصدار 16. يتصل على المنفذ 5432 عبر DATABASE_URL.
  • mysql: الإصدار 8.4. يتصل على المنفذ 3306 عبر DATABASE_URL.
  • redis: الإصدار ثابت، فأهمِله. يتصل على المنفذ 6379 عبر REDIS_URL. اختيارياً أرسِل "persistence": false للذاكرة المؤقتة البحتة، أو "maxmemory_policy" (واحدة من noeviction أو allkeys-lru أو allkeys-lfu أو allkeys-random أو volatile-lru أو volatile-lfu أو volatile-random أو volatile-ttl؛ والافتراضي allkeys-lru) لضبط سياسة الإخلاء.

الحقل resources مطلوب وله حدود: cpu_milli من 250 إلى 4000 (بخطوات 250)، memory_mb من 256 إلى 8192 (بخطوات 128)، storage_gb من 1 إلى 100. القيم خارج المدى تُعيد BAD_RESOURCES؛ والإصدار غير المدعوم يُعيد BAD_VERSION، وسياسة Redis غير الصحيحة تُعيد BAD_MAXMEMORY_POLICY.

تُغلِّف استجابة 201 الخدمة الجديدة وكتلة connection. معرّف الخدمة id هو ما تربط به، وتعرض الكتلة connection المضيف الداخلي الذي سيستخدمه تطبيقك:

{
  "service": {
    "id": "11111111-1111-1111-1111-111111111111",
    "name": "app-db",
    "type": "postgres",
    "status": "provisioning"
  },
  "connection": {
    "host": "app-db-rw.<namespace>.svc.cluster.local:5432",
    "port": "5432",
    "env_var": "DATABASE_URL",
    "requires_auth": "true",
    "instructions": "Link this Postgres to a container to auto-inject DATABASE_URL (with credentials) into it."
  }
}

تُعيد المنصّة كتلة connection أيضاً ضمن GET /v1/containers/{containerID} لأيّ قاعدة بيانات، فتستطيع قراءة المضيف ومتغيّر الاتصال لاحقاً.

ربطها بتطبيقك

مرِّر معرّفات الخدمات (service IDs، أي الحقل id من كل خدمة لا اسمها) للتطبيق المُستهلِك ولقاعدة البيانات بصفتها المزوِّد، إضافةً إلى link_type المطابق لمحرك المزوِّد (postgres أو mysql أو redis):

# Link the database into your web container
curl -X POST https://api.alawadi.cloud/v1/projects/$PROJECT_ID/service-links \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "consumer_service_id": "'"$WEB_CONTAINER_ID"'",
    "provider_service_id": "'"$DB_SERVICE_ID"'",
    "link_type": "postgres"
  }'

الحقول consumer_service_id وprovider_service_id وlink_type كلها مطلوبة. وقيمة link_type واحدة من postgres أو mysql أو redis، مطابقةً لمحرك المزوِّد (تحقن Postgres/MySQL المتغيّر DATABASE_URL؛ ويحقن Redis المتغيّر REDIS_URL). ويجب أن يكون المُستهلِك تطبيق Docker عاماً في نفس المشروع. تُعيد استجابة 201 الرابط، بما في ذلك خريطة injected_env.

للتأكد من وجود الرابط، اعرض الروابط:

curl https://api.alawadi.cloud/v1/projects/$PROJECT_ID/service-links \
  -H "Authorization: Bearer $TOKEN"

راجع Postgres وMySQL وRedis مُدارة لنموذج الاتصال وصيغ أسماء المضيف.

في هذه الصفحة