أضِف Postgres أو MySQL أو Redis مُدارة
أضِف قاعدة بيانات مُدارة إلى مشروع من لوحة التحكم واربطها بتطبيقك ليُحقَن رابط الاتصال تلقائياً.
إضافة قاعدة بيانات
قواعد البيانات المُدارة تعمل داخل مشروعك، ولا يصل إليها سوى عبر DNS الداخلي. وهي ليست متاحة للعموم أبداً. تُنشئ واحدة من لوحة التحكم، ثم تربطها بتطبيق Docker لتحقن المنصّة رابط الاتصال (مع بيانات الدخول) في ذلك التطبيق نيابةً عنك. أنت لا ترى كلمة المرور ولا تنسخها ولا تكتبها بنفسك.
المحرّكات ثابتة ومُدارة: Postgres 16 وMySQL 8.4 وRedis 8.
المسار من لوحة التحكم
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).
- PostgreSQL: الإصدار
- الاسم: اسم سهل؛ وتعرض النافذة المعرّف (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)، فيبقى التطبيق المرتبط متّصلاً عبر عمليات إعادة النشر.
ما الذي يُحقَن (حسب إطار العمل)
تحقن المنصّة مجموعة متغيّرات قياسية ليكون الاسم الصحيح حاضراً لإطار عملك مسبقاً:
| المحرك | اقرأ هذا | يُحقَن أيضاً |
|---|---|---|
| Postgres | DATABASE_URL | PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD؛ SPRING_DATASOURCE_URL / _USERNAME / _PASSWORD |
| MySQL | DATABASE_URL | DB_HOST DB_PORT DB_NAME DB_USER DB_PASSWORD؛ SPRING_DATASOURCE_* |
| Redis | REDIS_URL | REDIS_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 مُدارة لنموذج الاتصال وصيغ أسماء المضيف.
ربط تطبيق بالتخزين السحابي
اربط تطبيقاً منشوراً بـ bucket من S3 عبر متغيّرات البيئة و AWS SDK، لـ JavaScript (v3) و Python (boto3).
انشر تطبيقاً من سوق التطبيقات بنقرة واحدة
اختر تطبيقاً من مجموعة منتقاة مثل WordPress أو n8n وانشره بنقرة واحدة — تنشئ المنصّة قاعدة البيانات المُدارة وتربطها وتُرفِق التخزين ويعمل تطبيقك على رابط عام.