لماذا تستضيف لوحات ذكاء الأعمال ذاتياً
أدوات ذكاء الأعمال المُستضافة مريحة إلى أن تصل فاتورة كل مقعد — وإلى أن تدرك أن بيانات منتجك وإيراداتك وعملائك يجري نسخها إلى خدمة SaaS من طرف ثالث مُسعَّرة بالدولار. يقلب Metabase ذلك: فهو مفتوح المصدر (AGPL)، وقابل للاستضافة الذاتية، ويتصل بقاعدة بيانات تملكها بالفعل. شغّله على خادم VPS خلف نطاقك الخاص فلا تغادر طبقة تحليلاتك خادمك أبداً. تدفع تكلفة شهرية ثابتة للـVPS، لا اشتراكاً متزايداً لكل مستخدم، وتبقى بياناتك على بنية تحتية تتحكم فيها — وهو ما يعني أيضاً لفريق مغربي سيادةً على البيانات، لا مركز بيانات تجهل موقعه.
ما الذي يمنحك إياه Metabase
- منشئ استعلامات مرئي يتيح للمستخدمين غير التقنيين إنشاء الرسوم والأسئلة بالنقر — مع محرّر SQL كامل للمحلّلين.
- لوحات تفاعلية بمرشّحات، وتنقّل تفصيلي (drill-through)، وتحديث مجدوَل.
- موصّلات لأكثر من 20 قاعدة بيانات: PostgreSQL وMySQL/MariaDB وSQL Server وClickHouse وBigQuery وRedshift وSnowflake وMongoDB وAthena وSpark وDruid وغيرها.
- اشتراكات مجدوَلة وتنبيهات عتبة تُرسَل إلى البريد الإلكتروني أو Slack.
- أذونات على مستوى المجموعة والمجموعة (collection) مع ضوابط على مستوى الصف/العمود بحيث يرى كل فريق بياناته فقط.
- تحليلات مُضمَّنة لإدراج لوحات موقّعة ومرشّحة داخل تطبيقك الخاص.
- مفتوح المصدر برخصة AGPL — لا رسوم لكل مقعد، وحالته الخاصة مخزّنة في قاعدة بيانات Postgres تملكها.
المتطلبات
خادم VPS بنظام Ubuntu 22.04 (أو Debian 12) مع تثبيت Docker. يعمل Metabase على JVM، فامنحه مجالاً: 2 GB من الذاكرة هي الحدّ الأدنى الواقعي، و4 GB مريحة لفريق صغير. يخصّص الـJVM افتراضياً حجم heap بـ1500 MB؛ على خادم بـ2 GB يمكنك تقليصه إلى 1200 MB عبر JAVA_OPTS=-Xmx1200m، ورفعه إلى 2 GB على خادم بـ4 GB (-Xmx2g). يتكوّن النشر من حاويتين — Metabase نفسه وقاعدة postgres:16 مرافقة تخزّن البيانات الوصفية الخاصة بـMetabase (المستخدمون، اللوحات، الأسئلة المحفوظة). لا يلزم نطاق بشكل صارم — يستجيب Metabase على المنفذ 3000 عبر عنوان IP الخاص بخادمك — لكنك ستحتاج إلى وكيل عكسي من أجل HTTPS في الإنتاج.
انشر Metabase على خادم VPS الخاص بك
أنشئ حُزمة docker-compose
ينبغي أن يخزّن Metabase حالته الخاصة في قاعدة بيانات فعلية، لا في ملف H2 المدمج الافتراضي. أنشئ ملف
docker-compose.ymlبخدمتين:metabase/metabase:v0.64.1وقاعدةpostgres:16مرافقة. اربط Metabase بـPostgres عبرMB_DB_TYPE=postgresوMB_DB_HOST=metabase-dbوMB_DB_DBNAME=metabaseappdbوMB_DB_PORT=5432وMB_DB_USER=metabaseوكلمةMB_DB_PASSقوية. استخدم كلمة المرور نفسها لـPOSTGRES_PASSWORDالخاصة بحاوية Postgres، وحمّل حجماً مُسمَّى لـ/var/lib/postgresql/data، واضبطrestart: unless-stoppedعلى كلتيهما. أضف أيضاًMETABASE_SITE_URL=https://bi.yourdomain.comوMB_ENCRYPTION_SECRET_KEY(سلسلة عشوائية من 32+ حرفاً) لتشفير بيانات اعتماد الاتصال بقواعد البيانات في التخزين — بدون هذا المفتاح تُخزَّن كلمات المرور بنص عادي في Postgres.اضبط ذاكرة JVM
أضف
JAVA_OPTS=-Xmx1500mفي قسمenvironmentلخدمة Metabase إن كان لديك 2 GB ذاكرة، أو-Xmx2gإن كان لديك 4 GB. بدون هذا الضبط قد يتجاوز الـJVM الذاكرة المتاحة ويُطلق خطأ OOM (نفاد الذاكرة) يوقف الحاوية دون رسالة خطأ واضحة. تحقق من قتل OOM بـdocker inspect metabase --format '{{.State.OOMKilled}}'(يعيدtrue) أوdmesg | grep -i oom.شغّلها وانتظر الإقلاع
شغّل
docker compose up -d. عند أول تشغيل، يشغّل Metabase عمليات ترحيل قاعدة بياناته على Postgres، وهو ما يستغرق 60–120 ثانية على خادم VPS صغير — وهذا طبيعي. استقصِ الجاهزية عبرcurl -f http://localhost:3000/api/health؛ وبمجرد أن يُعيد{"status":"ok"}يكون التطبيق جاهزاً. تربط حُزمة compose تشغيل Metabase بفحص صحة Postgres بحيث لا يبدأ التطبيق أبداً قبل أن تكون قاعدة بياناته جاهزة.أكمِل معالج الإعداد
افتح
http://<your-server-ip>:3000. يعيد Metabase التوجيه إلى معالج الإعداد: أنشئ حساب المسؤول، ثم اربط قاعدة البيانات التي تريد تحليلها فعلاً — عادةً PostgreSQL أو MySQL الخاصة بتطبيقك، ويُفضَّل نسخة قراءة (read replica) بحيث لا تصيب استعلامات التحليلات قاعدتك الأساسية للإنتاج أبداً. يفحص Metabase المخطّط وتصبح جداولك جاهزة للاستعلام في ثوانٍ.ابنِ لوحة
أنشئ سؤالين أو ثلاثة عبر منشئ الاستعلامات المرئي (عدّ عبر الزمن، وتفصيل حسب الفئة)، واحفظها في مجموعة (collection)، وثبّتها على لوحة مع مرشّح تاريخ. بدّل أي سؤال إلى محرّر SQL الأصلي عندما تحتاج إلى تحكّم كامل. أعِدّ اشتراك بريد إلكتروني أو Slack ليُسلَّم إليك محتوى اللوحة وفق جدول زمني.
أضِف HTTPS وأحكِم إغلاقه
ضَع Metabase خلف وكيل عكسي للحصول على نطاق حقيقي وشهادة. مع Caddy:
apt install caddy، ثم ملف/etc/caddy/Caddyfileيحتوي علىbi.yourdomain.com { reverse_proxy localhost:3000 }وsystemctl reload caddyللحصول على شهادة Let's Encrypt تلقائية. وجّه سجل DNS من نوع A لـbi.yourdomain.comإلى خادم VPS الخاص بك أولاً، وقيّد المنفذ 3000 عبرufw allow from <proxy> to any port 3000، واضبط كلمة مرور مسؤول قوية — فأي شخص يستطيع تسجيل الدخول يمكنه الاستعلام عن كل قاعدة بيانات متصلة.
الترقية إلى Metabase 64 (LTS)
إن كنت على v63 أو إصدار أقدم، انتقل قبل 1 نوفمبر 2026 — ذاك هو موعد انتهاء دعم أمان v63. Metabase 64.1 هو الفرع LTS الموصى به، مدعوم حتى 1 ديسمبر 2027. الترقية مع Docker مباشرة: أوقف الحزمة (docker compose down)، استبدل وسم الصورة بـv0.64.1 في docker-compose.yml، ثم أعِد التشغيل (docker compose up -d). يُطبّق Metabase ترحيلات المخطّط تلقائياً عند البدء. احتفظ بنسخة احتياطية من حجم Postgres (docker exec metabase-db pg_dump -U metabase metabaseappdb > backup-before-v64.sql) قبل الترقية، وتحقق من أن الحاوية تبدأ بشكل سليم عبر curl -f http://localhost:3000/api/health قبل حذف النسخة الاحتياطية.
التنبيهات والاشتراكات والتقارير المجدولة
يمكن لـMetabase إرسال لوحاتك عبر البريد الإلكتروني أو Slack وفق جدول زمني. للبريد الإلكتروني، اضبط خادم SMTP في الإدارة ← إعدادات البريد الإلكتروني: اضبط METABASE_SMTP_HOST وMETABASE_SMTP_PORT وMETABASE_SMTP_USER وMETABASE_SMTP_PASSWORD كمتغيرات بيئة أو مباشرة في الواجهة. بمجرد تفعيل SMTP، تعرض كل لوحة زر «الاشتراك»: اختر المستلمين والتكرار (يومي، أسبوعي) والتنسيق (صورة PNG أو مرفق). تعمل تنبيهات العتبة على أي سؤال رقمي: يُقيّم Metabase الاستعلام وفق جدول ويُرسل إشعاراً حين تتجاوز القيمة عتبة معينة أو تنخفض عنها — مثالي لمراقبة مؤشرات الأداء الرئيسية كالإيرادات اليومية ومعدلات الأخطاء ومعدلات التحويل.
الموصّلات المدعومة: أبعد بكثير من SQL الكلاسيكي
يتصل Metabase مفتوح المصدر بشكل أصلي بـPostgreSQL وMySQL/MariaDB وSQL Server وSQLite وH2 وRedshift وBigQuery وSnowflake وAthena وDruid وClickHouse وMongoDB (قراءة فقط عبر المشغّل الرسمي) وPresto/Trino وSparkSQL. تُضيف إصدارتا Pro/Enterprise مشغّلات معتمدة ودعماً رسمياً. للقواعد غير المدرجة تتوفر مشغّلات مجتمعية بتنسيق JSON: ضعها في مجلد /plugins الخاص بالحاوية (ثبّت حجماً) ويكتشفها Metabase عند البدء. يستحق موصّل ClickHouse التسليط عليه: يُستخدم ClickHouse بشكل متزايد للتحليلات الفورية بحجم كبير، ويتصل به Metabase بشكل أصلي منذ v44 — تركيبة قوية للوحات شبه الفورية دون مستودع بيانات مخصص.
Metabase مفتوح المصدر مقابل Pro مقابل Cloud
يغطي إصدار المصدر المفتوح (AGPL) جميع حالات الاستخدام التحليلي الشائعة: لوحات التحكم والتنبيهات والاشتراكات والتضمين الأساسي وضبط الوصول على مستوى المجموعة. يُضيف إصدار Pro (الترخيص التجاري) إدارة المؤسسات الفرعية (multi-tenant)، ولوحات تفاعلية مع متغيرات الجلسة للتضمين المتقدم، وسجلات تدقيق الوصول، والمصادقة SAML SSO. يُزيل إصدار Cloud (SaaS مُدار من Metabase Inc.) عبء الصيانة لكنه ينقل بياناتك إلى خوادم طرف ثالث — وهو ما يكفي للبيانات الحساسة أو متطلبات الامتثال لتبرير الاستضافة الذاتية. على خادم VPS بـ8 يورو شهرياً، يغطي إصدار المصدر المفتوح تقريباً جميع احتياجات المؤسسات الصغيرة والمتوسطة دون أي قيود على عدد المستخدمين.
استكشاف الأخطاء: المشكلات الشائعة
حاوية تُعيد التشغيل في حلقة / OOM. تحقق من docker inspect metabase --format '{{.State.OOMKilled}}' — إن كانت true، زد ذاكرة الـVPS أو قلّص الـheap بـJAVA_OPTS=-Xmx1200m. خادم بـ1 GB ذاكرة ضيّق جداً؛ 2 GB هو الحد الأدنى. خطأ JDBC connection refused عند البدء. يحاول Metabase الاتصال بـPostgres قبل أن يكون جاهزاً. تأكد من تعريف healthcheck على خدمة Postgres وأن Metabase يعتمد عليه (depends_on: metabase-db: condition: service_healthy). وقت بدء طويل جداً (أكثر من 5 دقائق). على خادم منخفض الأداء، قد تستغرق الترحيلات الأولية حتى 5 دقائق. هذا طبيعي عند الإطلاق الأول؛ عمليات البدء اللاحقة سريعة (15–30 ثانية). لوحات بطيئة أو timeout. اربط Metabase بنسخة قراءة بدلاً من القاعدة الأساسية. إن تعذّر ذلك، فعّل التخزين المؤقت للاستعلامات بـMB_QUERY_CACHING_TTL_RATIO=10. رسائل إلكترونية غير مُستلمة. تحقق من سجلات SMTP في الإدارة ← سجلات التدقيق. اختبر الاتصال بـSMTP من الإدارة ← إعدادات البريد الإلكتروني ← إرسال بريد إلكتروني اختباري.
وجّه Metabase إلى نسخة قراءة، لا إلى قاعدتك الأساسية
قد تكون استعلامات التحليلات ثقيلة. اربط Metabase بنسخة قراءة (read replica) أو بقاعدة بيانات تقارير مخصّصة بدلاً من قاعدتك الأساسية للإنتاج، بحيث لا يُبطئ استعلام لوحة بطيء تطبيقك الحيّ أبداً. على خادم VPS واحد يمكنك تشغيل نسخة قراءة خفيفة في حاويتها الخاصة على شبكة Docker الخاصة نفسها — يصل إليها Metabase عبر اسم الخدمة وتبقى قاعدتك الأساسية دون مساس.