عن المشروع

يُحزم هذا المستودع نشر XWiki ذاتي الاستضافة كمجموعة واحدة من Docker Compose. تعمل XWiki، وهي منصة ويكي للمؤسسات، خلف Traefik الذي يعمل كـ reverse proxy، مع إصدار شهادات Let's Encrypt تلقائيًا للمجالات المحددة. تُخزن PostgreSQL 15 بيانات الويكي. يتبع الإعداد تسلسلًا قصيرًا: استنساخ المستودع، وإنشاء الشبكتين المتوقعتين (traefik-network وxwiki-network)، ونسخ .env.example إلى .env وملء القيم المطلوبة (XWIKI_DB_PASSWORD، XWIKI_HOSTNAME، TRAEFIK_HOSTNAME، TRAEFIK_ACME_EMAIL، TRAEFIK_BASIC_AUTH)، ثم تشغيل المجموعة باستخدام docker compose. يلاحظ README أن التشغيل الأول يستغرق عدة دقائق أثناء قيام XWiki بتهيئة مخططها وصفحاتها الأساسية، ويُدرج مشكلات النشر الشائعة مثل فشل إصدار الشهادة لأن DNS لم ينتشر أو المنفذ 80 غير قابل للوصول، وأخطاء الشبكة من تخطي خطوة إنشاء الشبكة، وفشل المتغيرات المفقودة. يقوم نص update.sh بنقل النسخة إلى أحدث علامة إصدار ويعيد تشغيل docker compose up. يرفض الانتقال إلى إصدار رئيسي جديد دون إشراف، ويرفض التشغيل فوق التغييرات المحلية، ويبلغ عن أي متغير أصبح مطلوبًا منذ الإصدار المثبت. يوفر العلم --dry-run معاينة للإجراء. تم تثبيت ثلاث صور رسمية من Docker Hub (traefik، xwiki، postgres) على بصمات رقمية tag@sha256 كقيم افتراضية للترابط، لذا فإن أمر git pull البسيط يُحضر المزيج المُختبر. تم توثيق مستويات تجاوز الصورة: يغير المتغير version العلامة فقط دون البصمة الرقمية، بينما يحل المتغير tag المرجع بالكامل. تتطلب القيم الافتراضية المتداخلة Docker Compose v2.5 أو أحدث. تقوم وظيفة CI اليومية بإعادة حل البصمات الرقمية مقابل السجلات وتُقارن إصدارات XWiki وTraefik الثابتة مع الإصدارات الرسمية؛ تم تثبيت GitHub Actions على SHA الالتزام ويتم تحديثها بواسطة Dependabot. يتم التعامل مع النسخ الاحتياطية بواسطة حاوية مخصصة تُجري pg_dump من خلال gzip بالإضافة إلى أرشيف tar.gz لبيانات الويكي، ثم تُحذف النسخ القديمة وتنام. القيم الافتراضية هي فترة إحماء 30 دقيقة، وفترة تكرار 24 ساعة، واحتفاظ لمدة 7 أيام. تغطي نصوصان تفاعليان للاستعادة قاعدة البيانات وبيانات التطبيق. ينصح المستودع بركب مجلدات النسخ الاحتياطية على المضيف وإجراء نسخ احتياطية قبل الترقية لأن XWiki تُحرك مخططها عند تغيير الإصدار. يتم تطبيق التقوية بشكل موحد: تضبط كل خدمة no-new-privileges، وتُسقط حاويات البنية التحتية جميع الصلاحيات وتُعيد فقط ما تحتاجه نقاط الدخول الخاصة بها (NET_BIND_SERVICE لـ Traefik، CHOWN/SETUID/SETGID لصور قواعد البيانات)، بينما تحتفظ حاويات التطبيق بمجموعة الصلاحيات الافتراضية عمداً. تحمل كل خدمة حدودًا للذاكرة والـ CPU بالإضافة إلى حجوزات كقيم افتراضية للـ compose، ويمكن تجاوزها من خلال .env. يتم تشغيل سير عمل التحقق من النشر عند كل دفع، وطلب سحب، ويوميًا في الساعة 06:00 UTC، ويغطي shellcheck، وactionlint، ومسح Trivy للصور الثلاث الثابتة، وفحص الحداثة، ووظيفة نشر واختبار تُشغل المجموعة بمصادقة مؤقتة وتتطلب أن ترد واجهة الويكي من خلال Traefik. يقوم نص اختبار النسخ الاحتياطية/الاستعادة الشامل بإدخال صف مؤشر، ويستعيد أقدم نسخة احتياطية، ويتأكد من اختفاء المؤشر؛ وهو يوقف حاوية قاعدة البيانات لفترة وجيزة لإثبات اكتشاف الفشل، ومُخصص للمرحلة التجريبية وليس الإنتاج. تذكر ملاحظات الأمن أن الاعتمادات تُقرأ من .env المهملة عند النشر، وأن PostgreSQL تستمع فقط على الشبكة الداخلية، وأن الإصدارات قبل v1.0.0 شحنت .env مُدرجة مع كلمة مرور قاعدة بيانات ذات مظهر عشوائي يجب تغييرها إذا تم إعادة استخدامها.