دليل النشر

استضافة BookStack على خادم VPS الخاص بك

انشر على VPS Cloud ←

دليل عملي

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

استضافة BookStack على خادم VPS الخاص بك

‏BookStack منصة توثيق مفتوحة المصدر منظَّمة في أرفف وكتب وفصول وصفحات. عند استضافتها ذاتيًا على خادم ‏VPS‏ تصبح الويكي الداخلي المثالي لفريقك أو وكالتك: بحث بالنص الكامل، ومحرر ‏WYSIWYG‏، وأذونات دقيقة. يغطي هذا الدليل التثبيت الكامل مع ‏Docker Compose‏ وإعداد ‏SSL‏ وتشخيص الأخطاء الشائعة وإعداد نسخ احتياطي موثوق.

7 دقائق للقراءةعدد الخطوات: 5
المحتويات· لماذا تستضيف BookStack ذاتيًا على خادم VPS1/12
  1. 01لماذا تستضيف BookStack ذاتيًا على خادم VPS
  2. 02فوائد ملموسة لـBookStack ذاتية الاستضافة
  3. 03المتطلبات العتادية والبرمجية
  4. 04BookStack مقارنةً بالبدائل ذاتية الاستضافة
  5. 05نشر BookStack مع Docker Compose وSSL
  6. 06الإعداد المتقدم: SSO وLDAP وSAML
  7. 07النسخ الاحتياطي واستعادة BookStack
  8. 08تشخيص الأخطاء: المشكلات الشائعة
  9. 09المشكلات المتكررة وحلولها
  10. 10تحديث BookStack
  11. 11نصيحة أمنية
  12. 12لمزيد من المعلومات

لماذا تستضيف BookStack ذاتيًا على خادم VPS

تتميّز ‏BookStack‏ ببساطتها: فحيث تُغرِق ويكيات أخرى المستخدمَ بالخيارات، تفرض هي تراتبية واضحة — أرفف وكتب وفصول وصفحات — تجعل التوثيق قابلًا للتصفّح فورًا. مبنيّة على ‏Laravel‏، فهي خفيفة وسهلة الصيانة. عند استضافتها ذاتيًا على خادم ‏VPS‏، تُبقي كامل توثيقك الداخلي — الإجراءات و‏runbooks‏ وقاعدة معرفة العملاء — على بنيتك التحتية الخاصة، دون اشتراك لكل مستخدم. وبالنسبة إلى وكالة توثّق مشاريعها أو فريق تقني يوحّد إجراءاته، فهي ويكي خاص تتحكّم فيه من طرف إلى طرف، مع بحث بالنص الكامل، وإدارة دقيقة للأذونات، ومحرّر ‏WYSIWYG‏ أو ‏Markdown‏.

فوائد ملموسة لـBookStack ذاتية الاستضافة

  • بنية واضحة من الأرفف/الكتب/الفصول/الصفحات: توثيق قابل للتصفّح بلا عناء.
  • محرّر ‏WYSIWYG‏ و‏Markdown‏ حسب اختيارك، مع مخططات ‏Draw.io‏ مدمجة.
  • أذونات دقيقة حسب الدور وحسب الكتاب لعزل المحتوى الحسّاس.
  • بحث سريع بالنص الكامل عبر كامل قاعدة المعرفة.
  • مصادقة ‏LDAP‏ أو ‏SAML‏ أو ‏OAuth‏ للتكامل مع دليل مؤسستك.
  • بصمة خفيفة: خادم ‏VPS‏ بذاكرة 2 غيغابايت يكفي لتوثيق فريق.
  • لا اشتراك لكل مستخدم — عدد غير محدود من المساهمين بلا تكاليف إضافية.

المتطلبات العتادية والبرمجية

‏BookStack‏ قليلة التطلّب. يستضيف خادم ‏VPS‏ بمعالج إلى معالجَين افتراضيَّين و2 غيغابايت من الذاكرة كحدٍّ أدنى توثيق فريق بأريحية؛ مع تشغيل ‏BookStack‏ و‏MariaDB‏ معًا، يُعدّ 2 غيغابايت الحدَّ الأدنى الموصى به — دونه قد تفشل ترحيلات ‏Laravel‏ عند التشغيل الأول بسبب نقص الذاكرة. يرتفع الاستهلاك خصوصًا مع حجم الصور المرفوعة.

خصّص من 15 إلى 25 غيغابايت من ‏SSD‏ بحسب كمية المرفقات. على الجانب البرمجي: ‏Docker 24+‏ وإضافة ‏Compose v2‏‏ (docker compose‏ بلا شَرطة)، ونطاق فرعي ‏wiki.yourdomain.com‏ مع سجل ‏A‏، ووصول ‏SMTP‏ للدعوات والإشعارات البريدية.

BookStack مقارنةً بالبدائل ذاتية الاستضافة

مرّر الجدول أفقيًا

الأداةالمجموعة التقنيةالذاكرة الدنيانقطة القوة
BookStackLaravel + MariaDB2 غيغابايتتراتبية الكتب والفصول، WYSIWYG
Wiki.jsNode.js + قاعدة بيانات حسب الاختيار512 ميغابايتمحرر حديث، مزامنة Git
OutlineNode.js + PostgreSQL1 غيغابايتواجهة شبيهة بـNotion، API غني
ConfluenceSaaS / on-premise4 غيغابايت+تكامل Atlassian، ناضج

نشر BookStack مع Docker Compose وSSL

  1. تجهيز خادم VPS وتثبيت Docker

    اتصل عبر ‏SSH‏ ثم ثبّت ‏Docker‏ وإضافة ‏Compose‏:

    curl -fsSL https://get.docker.com | sh
    apt install docker-compose-plugin
    mkdir -p /opt/bookstack && cd /opt/bookstack

    للتحقق: يجب أن يُظهر docker compose version‏ الإصدار v2.x أو أعلى. الصورة المجتمعية lscr.io/linuxserver/bookstack‏ هي الأكثر انتشارًا والأفضل صيانةً للنشر عبر الحاويات.

  2. إنشاء ملف docker-compose.yml

    أنشئ /opt/bookstack/docker-compose.yml‏ بخدمتَين — ‏MariaDB‏ و‏BookStack‏ — على شبكة مخصصة:

    services:
      mariadb:
        image: mariadb:10.11
        environment:
          MYSQL_ROOT_PASSWORD: changeme_root
          MYSQL_DATABASE: bookstack
          MYSQL_USER: bookstack
          MYSQL_PASSWORD: changeme_bk
        volumes:
          - ./data/mariadb:/var/lib/mysql
        networks: [bookstack]
    
      bookstack:
        image: lscr.io/linuxserver/bookstack:latest
        environment:
          PUID: 1000
          PGID: 1000
          APP_URL: https://wiki.yourdomain.com
          DB_HOST: mariadb
          DB_USER: bookstack
          DB_PASS: changeme_bk
          DB_DATABASE: bookstack
          MAIL_DRIVER: smtp
          MAIL_HOST: smtp.yourdomain.com
          MAIL_PORT: 587
          MAIL_FROM: [email protected]
          MAIL_USERNAME: [email protected]
          MAIL_PASSWORD: your_smtp_password
        ports:
          - "6875:80"
        volumes:
          - ./data/bookstack:/config
        depends_on: [mariadb]
        networks: [bookstack]
    
    networks:
      bookstack:

    يجب أن يتطابق APP_URL‏ تمامًا مع عنوان ‏HTTPS‏ النهائي. قيمة خاطئة تكسر الروابط الداخلية وعمليات الرفع.

  3. تشغيل الحزمة والتحقق من السجلات

    docker compose up -d
    docker compose logs -f bookstack

    عند التشغيل الأول، تنفّذ ‏BookStack‏ تلقائيًا ترحيلات ‏Laravel‏ لإنشاء مخطط قاعدة البيانات. انتظر السطر Server running on http://0.0.0.0:80‏ قبل المتابعة — يستغرق ذلك من 30 إلى 60 ثانية.

  4. إعداد reverse proxy وSSL

    مع Caddy (إدارة تلقائية للشهادة):

    wiki.yourdomain.com {
        reverse_proxy localhost:6875
    }

    أعِد تحميل ‏Caddy‏: systemctl reload caddy‏.

    مع Nginx + Certbot:

    server {
        listen 80;
        server_name wiki.yourdomain.com;
        return 301 https://$host$request_uri;
    }
    server {
        listen 443 ssl;
        server_name wiki.yourdomain.com;
        ssl_certificate /etc/letsencrypt/live/wiki.yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/wiki.yourdomain.com/privkey.pem;
        location / {
            proxy_pass http://127.0.0.1:6875;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    aحصل على الشهادة مع certbot --nginx -d wiki.yourdomain.com‏.

  5. أول تسجيل دخول وتأمين حساب المسؤول

    افتح https://wiki.yourdomain.com‏. الحساب الافتراضي هو [email protected]‏ بكلمة المرور password‏. غيّرهما فورًا في الإعدادات ← الملف الشخصي.

    تحقّق بعد ذلك من عمل ‏SMTP‏: الإعدادات ← إعداد البريد الإلكتروني ← إرسال بريد اختباري. إذا فشل الاختبار، تحقّق من السجلات: docker compose logs bookstack | grep -i mail‏.

الإعداد المتقدم: SSO وLDAP وSAML

تدعم ‏BookStack‏ عدة آليات للمصادقة المركزية، قابلة للتهيئة عبر متغيرات البيئة في ملف docker-compose.yml‏.

LDAP / Active Directory: أضِف المتغيرات AUTH_METHOD=ldap‏ و‏LDAP_SERVER‏ و‏LDAP_BASE_DN‏ و‏LDAP_USER_FILTER‏ و‏LDAP_VERSION‏. يسجّل المستخدمون الدخول بإثباتيات الهوية المؤسسية دون حساب ‏BookStack‏ منفصل.

SAML 2.0 (لمزودين مثل ‏Authentik‏ و‏Keycloak‏ و‏Azure AD‏): عيّن AUTH_METHOD=saml2‏ وادخل SAML2_IDP_ENTITYID‏ و‏SAML2_IDP_SSO‏ و‏SAML2_IDP_SLO‏. توثيق ‏BookStack‏ الرسمي يوفر أمثلة لكل مزوّد.

OAuth الاجتماعي (‏GitHub‏ و‏Google‏ و‏Slack‏): لكل مزوّد زوجه من المتغيرات *_APP_ID‏ / *_APP_SECRET‏. هذا الخيار مناسب للفرق التي تريد تجنّب إدارة كلمات المرور دون نشر خادم ‏LDAP‏.

النسخ الاحتياطي واستعادة BookStack

تعتمد نسخة ‏BookStack‏ على ثلاثة عناصر: قاعدة بيانات ‏MariaDB‏، ومجلد uploads‏ (الصور والمرفقات)، وقيمة APP_KEY‏ في الإعداد. من دون APP_KEY‏ لا يمكن استرداد المحتوى المشفَّر بعد الاستعادة.

سكريبت نسخ احتياطي يومي يُوضع في /etc/cron.daily/bookstack-backup‏:

#!/bin/bash
BACKUP_DIR=/var/backups/bookstack
mkdir -p $BACKUP_DIR
DATE=$(date +%Y%m%d)
docker exec $(docker ps -qf name=mariadb) \
  mysqldump -u bookstack -pchangeme_bk bookstack \
  > $BACKUP_DIR/bookstack-db-$DATE.sql
tar -czf $BACKUP_DIR/bookstack-uploads-$DATE.tar.gz /opt/bookstack/data/bookstack/uploads
find $BACKUP_DIR -mtime +14 -delete

انسخ هذه الأرشيفات بعد ذلك إلى تخزين خارجي (‏S3‏ أو ‏Backblaze B2‏ أو تخزين الكائنات في خادم ‏VPS‏). احتفظ بـAPP_KEY‏ في مدير أسرار خارج الخادم — فهو العنصر الوحيد الذي لا يمكن إعادة إنشائه.

تشخيص الأخطاء: المشكلات الشائعة

تظهر بعض الأخطاء بانتظام أثناء التثبيت الجديد أو التحديث.

المشكلات المتكررة وحلولها

  • خطأ SMTP «Connection refused» أو انتهاء المهلة: تحقّق أن MAIL_PORT‏ يطابق المنفذ الفعلي (587 لـ‏STARTTLS‏، 465 لـ‏SSL‏). بعض خوادم ‏SMTP‏ تحجب المنفذ 25 الصادر. اختبر الاتصال من الحاوية: docker exec -it bookstack curl -v telnet://smtp.yourdomain.com:587‏.
  • أذونات storage/: خطأ 500 أو صفحة بيضاء: يجب أن يملك مجلد /opt/bookstack/data/bookstack‏ المعرِّف ‏UID 1000‏ (المتغير PUID‏). صحّح بـchown -R 1000:1000 /opt/bookstack/data/bookstack‏ ثم أعِد تشغيل الحاوية.
  • بطء أو انتهاء مهلة MariaDB عند الإقلاع: تنتظر ‏BookStack‏ أن تصبح ‏MariaDB‏ جاهزة. إذا أعادت حاوية ‏BookStack‏ التشغيل في حلقة خلال الثواني الأولى فهذا طبيعي. أضِف healthcheck‏ لخدمة mariadb‏ في ملف ‏Compose‏ أو انتظر 30 ثانية قبل فحص السجلات.
  • الصور لا تظهر بعد تغيير النطاق: يجب أن يتطابق APP_URL‏ تمامًا مع عنوان ‏HTTPS‏ العام. إذا غيّرت النطاق، حدّث APP_URL‏ في ملف ‏Compose‏، وأعِد تشغيل الحاوية، ثم نفّذ php artisan bookstack:update-url‏ من داخل الحاوية لتحديث ‏URL‏ المخزّنة في قاعدة البيانات.
  • توقف الترحيلات عند التشغيل الأول (OOM): إذا كان خادم ‏VPS‏ بذاكرة أقل من 2 غيغابايت، قد تُوقَف ترحيلات ‏Laravel‏ بواسطة ‏OOM killer‏. أضِف ملف مبادلة (‏swap‏) بحجم 2 غيغابايت (fallocate -l 2G /swapfile && mkswap /swapfile && swapon /swapfile‏) أو زِد ذاكرة ‏VPS‏ قبل إعادة المحاولة.

تحديث BookStack

تستقبل الصورة lscr.io/linuxserver/bookstack:latest‏ الإصدارات الجديدة بُعيد نشرها على ‏GitHub‏. للتحديث:

cd /opt/bookstack
docker compose pull
docker compose up -d
docker compose logs -f bookstack

تُطبَّق ترحيلات قاعدة البيانات تلقائيًا عند الإقلاع. راجع ملاحظات إصدار BookStack قبل أي تحديث رئيسي: تُدخل بعض الإصدارات تغييرات في المخطط أو الإعداد.

نصيحة أمنية

أعدّ إدخال robots.txt‏ أو احمِ نسخة ‏BookStack‏ خاصتك وراء جدار حماية تطبيقي إذا كانت تحتوي على إجراءات داخلية حسّاسة. لا توفّر ‏BookStack‏ وضع «إنترانت فقط» افتراضيًا — عنوان ‏URL‏ العام في متناول أي شخص يعرف العنوان. للتوثيق الخاص حقًا، اجمع أذونات ‏BookStack‏ الدقيقة مع قاعدة ‏UFW‏ أو شبكة ‏WireGuard VPN‏ تقصر الوصول على المنفذ 443.

لمزيد من المعلومات

ثبّت BookStack على خادم VPS من ServOrbit بنقرة واحدة

يتوفّر BookStack في Marketplace ServOrbit. اطلب خادم VPS Cloud ويُثبَّت الويكي المنظَّم تلقائيًا، مع MariaDB مضمَّنة.