لماذا تستضيف 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 مقارنةً بالبدائل ذاتية الاستضافة
مرّر الجدول أفقيًا
| الأداة | المجموعة التقنية | الذاكرة الدنيا | نقطة القوة |
|---|---|---|---|
| BookStack | Laravel + MariaDB | 2 غيغابايت | تراتبية الكتب والفصول، WYSIWYG |
| Wiki.js | Node.js + قاعدة بيانات حسب الاختيار | 512 ميغابايت | محرر حديث، مزامنة Git |
| Outline | Node.js + PostgreSQL | 1 غيغابايت | واجهة شبيهة بـNotion، API غني |
| Confluence | SaaS / on-premise | 4 غيغابايت+ | تكامل Atlassian، ناضج |
نشر BookStack مع Docker Compose وSSL
تجهيز خادم 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 هي الأكثر انتشارًا والأفضل صيانةً للنشر عبر الحاويات.إنشاء ملف 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 النهائي. قيمة خاطئة تكسر الروابط الداخلية وعمليات الرفع.تشغيل الحزمة والتحقق من السجلات
docker compose up -d docker compose logs -f bookstackعند التشغيل الأول، تنفّذ BookStack تلقائيًا ترحيلات Laravel لإنشاء مخطط قاعدة البيانات. انتظر السطر
Server running on http://0.0.0.0:80 قبل المتابعة — يستغرق ذلك من 30 إلى 60 ثانية.إعداد 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.أول تسجيل دخول وتأمين حساب المسؤول
افتح
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.
لمزيد من المعلومات
- استضافة Nextcloud على VPS — التخزين السحابي والتعاون الوثائقي.
- استضافة Gitea على VPS — منصة Git ذاتية الاستضافة لفرق التطوير.
- Authentik على VPS — SSO مفتوح المصدر لمركزة مصادقة BookStack وتطبيقاتك الأخرى.