عن المشروع
OpenAnalytics منتج تحليلات ويب مفتوح المصدر يُسلم كمستودع أحادي pnpm، صادر تحت ترخيص AGPL-3.0 ومُصمَّم للعمل على أجهزة المستخدم ذاتياً. فلسفته الأساسية: قياس يحترم الخصوصية بدون كوكيز وقراءات مجمّعة فقط — لا كوكيز، لا بصمات رقمية، لا معرّفات عبر المواقع، ولا تُخزَّن عناوين IP الخام. هوية الزائر هي تجزئة مشفّرة盐 rotates كل ليلة، لذا مسار الزائر لا يتجاوز زيارة واحدة ولن يمتد لمدى حياة الشخص. تُحترم إشارات عدم التعقب (Do Not Track) والتحكم العالمي في الخصوصية (GPC) عند جامع البيانات قبل أي كتابة، وجغرافيا المستوى المدني اختيارية لكل موقع وتُحلِّض ضد قاعدة بيانات محلية على المضيف دون أن يغادر أي طلب الجهاز. نسخة مستضافة يُشغّلها المؤلفون تستخدم نفس الكود على getopen.so.
يُقسَّم المستودع الأحادي المنتج إلى تطبيقات منفصلة: snippet متتبع صغير يفرض CI ميزانيته بالبايت؛ جامع ي-validate ويُنقّي ويحدّ من المعدّل ويرقن; عامل يستنزف الطابور إلى ClickHouse ويتعامل مع الجلسات والاختزال والتصدير والبريد والحذف; مستوى تحكم API يغطي المصادقة والمواقع والمفاتيح والمشاركة وتعريفات الأحداث والمصاعد والودجت والإيرادات ومساعد الذكاء الاصطناعي وخادم MCP; بوابة استعلام هي العملية الوحيدة المسموح لها بقراءة ClickHouse وتتحقق من envelopes الاستعلامات الموقعّة بـ Ed25519; تطبيق الوقت الحقيقي الذي يوفر تدفق SSE خلف لوحة الحياة; لوحة Next.js; وسطر أوامر `oa` لإعداد المواقع والإحصائيات وتسجيل الدخول عبر جهاز. حزم مشتركة تغطي المنطق الرئيسي، مخططات Postgres وClickHouse مع الترحيلات، Redis/Valkey، المصادقة، عقود OpenAPI، المراقبة والتكاملات.
التخزين مُقسّم ثلاثاً: Postgres لمستوى التحكم، ClickHouse للأحداث والاختزالات، ومثيّلان Valkey — طابور أحداث دائم وخاصّة سرعة للوقت الفعلي. الوظائف المبلغ عنها تشمل: المشاهدات، أحداث مخصّصة ودفعيّة بالسمة، الجلسات، Web Vitals، المصاعد، الإبقاء لكل موقع، ودجت قابلة للتضمين، روابط مشاركة عامة، تحليلات الإيرادات من حساب Stripe الخاص بك، استيراد/تصدير CSV/JSON، خادم MCP وسطر الأوامر. تظهر اللوحة أيضاً قائمة زوار وقت حقيقي من مخزون حضور، ومسارات رحلة لكل زائر، وقبة مدن اختياريّة.
بعض قواعد الهندسة المعمارية تفرضها CI بدل العرف: التطبيق الويب لا يستورد سوى حزمة العقود المشتركة مع وثيقة OpenAPI بوصفها الوصلة الوحيدة بين الأمام والخلف; ClickHouse لا يُستحق إلا عبر بوابة الاستعلام; التغيير الذي يتجاوز ميزانية المتتبع يفشل البناء; وتحقق وظيفة CI ضد قاعدة بيانات حقيقية بأن مخطط Postgres لا يحتوي على جداول فواتير.
الاستضافة الذاتية موثّقة في SELF-HOSTING.md، باستخدام سكريبت مولّد وأمر `docker compose up -d` واحد مع TLS تلقائي. يتطلب Linux به Docker، وأربعة سجلات DNS (app, api, c, rt)، وحوالي 4 GB RAM و25 GB مساحة قرص. إصدارات تنشر عشر صور إلى ghcr.io، لذا التثبيت سحب لا بناء; hosts arm64 أو builds الفرع تَبنِي الصور محلياً. `upgrade.sh` ينتقل بين الإصدارات ويأخذ لقطة يحتاجها `rollback.sh`، لأن الترحيلات غير عكوسة والطريقة المعلنة للعودة استعادة. التشغيل من المصدر يتطلب بنائات قبل مشغّلي الترحيل المُعدّين. المساعد الذكي وتخزين الكائنات هما الخياران الوحيدان؛ عند عدم ضبطهما يتم تعطيل هذين السطحين ذاتياً. يوجد مجموعة اختبار وتحقق بأسلوب CI تعمل بدون بنية.
بيانات الجغرافيا غير مُدمجة (README يذكر أنها تحميل 60 ميجا بايت يتقادم خلال شهر); سكريبت مساعد يجلب قاعدة بيانات DB-IP تُستخدم تحت CC BY 4.0. المساهمة عبر pull requests تُدمج مباشرة، مع توقيع CLA لمرة واحدة يترك حقوق النشر للمساهم. الكود AGPL-3.0، والـ README تؤكد أن تشغيل نسخة معدّلة كخدمة شبكة يلزم بتقديم المصدر المعدّل للمستخدمين; اسم المشروع ونطاق الخدمة المستضافة ليسا جزءاً من منح الترخيص.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.