المنصة

الاستضافة الذاتية

الصورة نفسها تعمل على مضيفك أو مضيفنا. وهذه الصفحة عرض المشغّل: ما تضبطه، وما تضعه أمامه، وكيف تبقيه يعمل دون أن يغادر شيء المبنى.

التخطيط

  • عملية Python واحدة تشغّل مستمع المحادثة والمجدول وواجهة API مع لوحة التحكم في حلقة أحداث واحدة.
  • تستمع الحاوية على واجهة الاسترجاع فقط؛ ووكيل عكسي (Nginx أو Caddy) ينهي TLS ويمرر إليها.
  • تقيم الحالة في دليل بيانات: قاعدة بيانات SQLite، والمرفوعات، وبيانات GeoIP، والمفاتيح المولَّدة، وأوزان النموذج. وجّه DATABASE_URL إلى Postgres للنشر على عدة مضيفين؛ ومجموعة الترحيل الإضافية تعمل على كليهما.
  • يمكن أن يكون خادم المحادثة (Synapse أو خادم Matrix رئيسي آخر) في أي مكان يمكن الوصول إليه.

البيئة

MATRIX_HOMESERVER, MATRIX_USER_ID, MATRIX_ACCESS_TOKENحساب الروبوت
MATRIX_STANDUP_ROOM_IDغرفة التحديثات اليومية الافتراضية
MATRIX_ADMIN_TOKENرمز مسؤول الخادم الرئيسي للتزويد وعمليات البحث؛ في البيئة فقط، ولا يُحفظ أبدًا
SECRET_KEYسلسلة عشوائية من 64 حرفًا فأكثر توقّع جلسات لوحة التحكم
DATABASE_URLsqlite افتراضيًا، أو عنوان URL لـ Postgres
BOOTSTRAP_ADMIN_MATRIX_IDالمسؤول الأول، يُرقَّى عند بدء التشغيل
AI_PROVIDER ومفتاح المزوّدانظر "مزوّدو الذكاء الاصطناعي"
INTEGRATION_VAULT_KEYالمفتاح الذي يشفّر بيانات اعتماد التكاملات المخزّنة
TZ وMAX_BODY_BYTES وAI_REASONING_MODELاختيارية

الوكيل العكسي

  • مرّر X-Forwarded-For وX-Forwarded-Proto؛ فدون الأخير لا يستطيع المنتج التمييز بين HTTP وHTTPS ويتخطى ترويسة HSTS.
  • فعّل الضغط للاستجابات الممرَّرة وHTTP/2؛ فلوحة التحكم تسحب عشرات الأصول عند التحميل البارد.
  • لا تضغط أبدًا نقطة نهاية تدفق الأحداث ولا تخزّنها مؤقتًا؛ فالتحديثات الحية أحداث مرسلة من الخادم.
  • تحديد المعدل لكل IP مهمة الوكيل؛ والمنتج يحدّ طلبات الرموز وتسجيلات الدخول بنفسه.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
gzip_proxied any;
http2 on;

ترويسات الأمان والحدود

تحمل كل استجابة nosniff، ومنع الأطر، وسياسة عدم الإحالة، وسياسة صلاحيات مقيِّدة، وHSTS لسنتين على TLS، وسياسة أمان المحتوى. وتُحدّ أجسام الطلبات عند 5 MiB افتراضيًا. ويُتحقق من كل مدخل بمخطط قبل تشغيل المعالج؛ وتُفحص معرّفات المحادثة بتعبير نمطي قبل أي استدعاء للخادم الرئيسي؛ ويُثبَّت HTTP الصادر على الخادم الرئيسي ومضيف المزوّد المضبوط.

التشغيل

  • الترقية: سحب، وإعادة بناء، وإعادة تشغيل. وتعمل الترحيلات عند الإقلاع وتتخطى ما هو موجود.
  • انسخ دليل البيانات احتياطيًا كل ليلة؛ ولـ Postgres استخدم pg_dump.
  • الصحة: نقطة نهاية حيوية سريعة دون مصادقة لفحص الحاوية، ونقطة مفصّلة مقيَّدة بالمسؤول مع وقت التشغيل وحجم قاعدة البيانات وحالة المزوّد.
  • GeoIP: شغّل نص التحديث البرمجي أسبوعيًا (db-ip Lite دون مفتاح، أو MaxMind بمفتاح مجاني)؛ والنسخة في وحدة تخزين البيانات تُلتقط عند إعادة التشغيل دون تهيئة.
  • يدير المجدول يوم العمل: عينات الحضور كل خمس دقائق، وفحوص الغياب كل خمس عشرة، والتجميعات الليلية وحساب الدرجات المسبق، والملخصات والتقارير بإيقاعاتها.
docker compose up -d --build
docker exec inroots sqlite3 /app/data/standup.db ".backup /tmp/backup.db"
GEO_DATA_DIR=/app/data/geo scripts/update_geoip.sh

معزول تمامًا

مع خادم Matrix مستضاف ذاتيًا، وOllama مزوّدًا، وقاعدة بيانات IP محلية على المضيف، والردود المنطوقة معطّلة، ودون تفعيل أي تكاملات، لا يحتاج المنتج إلى إنترنت إطلاقًا. لا قياس عن بُعد، ولا إشارة استخدام، ولا مُبلِّغ أعطال يتصل بالخارج؛ صفر بايت يغادر ما لم تضبط وجهة.