انتقل إلى المحتوى الرئيسي

المختبر 5.7 - تثبيت Wiki.js على Ubuntu 24.04 LTS

الأهداف​

في نهاية هذا المختبر، ستكون قادرًا على:

  • تثبيت Git و Node.js على Ubuntu 24.04
  • تثبيت وتكوين MariaDB
  • تنزيل وتكوين Wiki.js
  • إنشاء خدمة systemd لـ Wiki.js
  • حل المشاكل الشائعة في التثبيت
  • تكوين HTTPS باستخدام Certbot

المتطلبات الأساسية​

  • تثبيت Ubuntu 24.04 LTS
  • الوصول إلى طرفية مع حقوق sudo
  • اتصال بالإنترنت
  • على الأقل 2 جيجابايت من الذاكرة العشوائية المتاحة
  • على الأقل 5 جيجابايت من مساحة القرص الحرة

المقدمة​

يرشدك هذا الدليل في تثبيت Wiki.js، وهو محرك Wiki حديث وقوي يعتمد على Node.js و Git و Markdown. يتم توزيع Wiki.js تحت رخصة Affero GNU General Public License ويدعم عدة أنظمة إدارة قواعد بيانات.


الجزء 1: تثبيت Git​

يتطلب Wiki.js Git. لتثبيته على Ubuntu 24.04، اتبع هذه الخطوات:

# التحول إلى وضع المستخدم المتميز
sudo -s
# أو
su

# تحديث الحزم
sudo apt update

# تثبيت Git
sudo apt install git -y

التحقق من التثبيت​

git --version
# يجب أن يعرض: git version 2.x.x أو أعلى

الجزء 2: تثبيت Node.js​

يعمل Wiki.js مع Node.js. قم بتثبيت إصدار LTS من Node.js باستخدام سكربت NodeSource:

# تنزيل وتشغيل سكربت التثبيت NodeSource
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -

# تثبيت Node.js
sudo apt-get install -y nodejs

التحقق من الإصدارات المثبتة​

# التحقق من إصدار Node.js
node -v
# يجب أن يعرض: v20.x.x أو أعلى (إصدار LTS)

# التحقق من إصدار npm
npm -v
# يجب أن يعرض: 10.x.x أو أعلى

الجزء 3: تثبيت وتكوين MariaDB​

تثبيت MariaDB​

قم بتثبيت MariaDB لإدارة بيانات Wiki.js:

# تثبيت MariaDB
sudo apt install mariadb-server mariadb-client -y

# بدء الخدمة
sudo systemctl start mariadb

# تفعيل الخدمة عند بدء التشغيل
sudo systemctl enable mariadb

# التحقق من الحالة
sudo systemctl status mariadb

اختبار الاتصال​

# اختبار الاتصال مع mariadb
mariadb
# اكتب exit; للخروج

# اختبار الاتصال مع mysql
mysql
# اكتب exit; للخروج

تأمين MariaDB​

قم بتعزيز الأمان باستخدام الأمر:

sudo mariadb-secure-installation

الإجابات الموصى بها:

Enter current password for root: [اضغط على Enter]
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

تكوين قاعدة البيانات​

اتصل بـ MariaDB وقم بتكوين قاعدة البيانات:

sudo mysql -u root -p

في واجهة MariaDB، نفذ الأوامر التالية:

CREATE DATABASE wikidb;
CREATE USER 'wikidb_user'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON wikidb.* TO 'wikidb_user'@'localhost';
FLUSH PRIVILEGES;
SHOW DATABASES;
USE wikidb;
SHOW TABLES;
EXIT;

ملاحظة: استبدل PASSWORD بكلمة مرور آمنة من اختيارك.


الجزء 4: تنزيل وتثبيت Wiki.js​

إنشاء مستخدم ومجلد لـ Wiki.js​

# إنشاء مستخدم نظام لـ Wiki.js
sudo adduser --system --group wikijs

# إنشاء دليل التثبيت
sudo mkdir -p /var/www/wikijs

# التحقق من الإنشاء
ls -la /var/www/

# تعيين المالك
sudo chown -R wikijs:wikijs /var/www/wikijs

# التحقق من الأذونات
ls -la /var/www/
ls -la /var/www/wikijs

تعديل shell المستخدم wikijs​

# السماح بالاتصال باستخدام shell bash
sudo usermod -s /bin/bash wikijs

تنزيل وتثبيت Wiki.js​

# تسجيل الدخول كمستخدم wikijs
sudo su - wikijs

# التحقق من الدليل الحالي
pwd
# يجب أن يعرض: /var/www/wikijs

# التحقق من المستخدم
whoami
# يجب أن يعرض: wikijs

# الانتقال إلى دليل التثبيت
cd /var/www/wikijs

# تنزيل Wiki.js
wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz

# استخراج الأرشيف
tar xzf wiki-js.tar.gz

# التحقق من المحتوى
ls -la

# حذف الأرشيف
rm wiki-js.tar.gz

# نسخ ملف التكوين النموذجي
cp config.sample.yml config.yml

# تحرير ملف التكوين
nano config.yml

تكوين ملف config.yml​

قم بتكوين ملف config.yml لاستخدام MariaDB. عدل القسم db:

db:
type: mariadb
host: localhost
port: 3306
user: wikidb_user
pass: PASSWORD
db: wikidb
ssl: false

bindIP: 127.0.0.1
port: 3000

مهم:

  • استبدل PASSWORD بكلمة المرور التي قمت بتعيينها لـ wikidb_user
  • bindIP: 127.0.0.1 يعني أن Wiki.js سيستمع فقط على localhost
  • للوصول الخارجي، استخدم bindIP: 0.0.0.0 (انظر قسم Troubleshooting #4)

تعليق الأقسام غير المستخدمة:

في ملف config.yml، قم بتعليق الأقسام الخاصة بـ PostgreSQL و SQLite التي لا تُستخدم:

# تعليق هذه الخطوط (إضافة # في البداية):
# sslOptions:
# auto: true
# # rejectUnauthorized: false

# # Optional - PostgreSQL only:
# schema: public

# # SQLite only:
# storage: path/to/database.sqlite

احفظ واخرج باستخدام Ctrl + X، ثم Y، ثم Enter.


الجزء 5: إنشاء خدمة systemd​

العودة إلى المستخدم الجذر​

قبل إنشاء الخدمة، عد إلى المستخدم الرئيسي:

# الخروج من جلسة wikijs
exit

# التحقق من أنك root
whoami
# يجب أن يعرض: root

Troubleshooting #1: الأذونات لإنشاء الخدمة​

إذا واجهت خطأ في الأذونات عند إنشاء الخدمة:

# إذا كنت لا تزال wikijs
whoami
# يجب أن يعرض: wikijs

# الخروج
exit
# أو
sudo -s
# أو
su

# التحقق
whoami
# يجب أن يعرض: root

# تغيير كلمة مرور wikijs
sudo passwd wikijs

# إضافة wikijs إلى مجموعة sudo
sudo usermod -aG sudo wikijs

# إعادة الاتصال كمستخدم wikijs
su - wikijs

# الآن يمكنك استخدام sudo
sudo nano /etc/systemd/system/wikijs.service

إنشاء خدمة systemd​

# إنشاء ملف الخدمة
sudo nano /etc/systemd/system/wikijs.service

أضف المحتوى التالي:

[Unit]
Description=Wiki.js
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always

User=wikijs
Environment=NODE_ENV=production
WorkingDirectory=/var/www/wikijs

[Install]
WantedBy=multi-user.target

احفظ واخرج.

تفعيل وبدء الخدمة​

# إعادة تحميل تكوين systemd
sudo systemctl daemon-reload

# بدء الخدمة
sudo systemctl start wikijs

# تفعيل الخدمة عند بدء التشغيل
sudo systemctl enable wikijs

# التحقق من الحالة
sudo systemctl status wikijs

الجزء 6: حل المشاكل (Troubleshooting)​

Troubleshooting #2: التحقق من السجلات​

إذا لم تبدأ الخدمة بشكل صحيح، تحقق من السجلات:

# عرض آخر 50 سطر من السجلات
sudo journalctl -u wikijs.service --no-pager --lines=50

# متابعة السجلات في الوقت الحقيقي
sudo journalctl -u wikijs.service -f

المشكلة 1: خطأ في تباعد YAML - sslOptions​

الخطأ:

bad indentation of a mapping entry at line 37, column 3:
sslOptions:
^

الحل:

# الانتقال إلى دليل Wiki.js
cd /var/www/wikijs

# تحرير ملف التكوين
nano config.yml

# تعليق الخطوط التالية (إضافة # في البداية):
# sslOptions:
# auto: true
# # rejectUnauthorized: false

# حفظ والخروج

# إعادة تحميل وإعادة تشغيل الخدمة
sudo systemctl daemon-reload
sudo systemctl start wikijs
sudo systemctl enable wikijs
sudo systemctl status wikijs

المشكلة 2: خطأ في تباعد YAML - schema (PostgreSQL)​

الخطأ:

bad indentation of a mapping entry at line 47, column 3:
schema: public
^

الحل:

cd /var/www/wikijs
nano config.yml

# تعليق الخطوط التالية:
# Optional - PostgreSQL only:
# schema: public

# حفظ والخروج

# إعادة تحميل وإعادة تشغيل
sudo systemctl daemon-reload
sudo systemctl start wikijs
sudo systemctl enable wikijs
sudo systemctl status wikijs

المشكلة 3: خطأ في تباعد YAML - storage (SQLite)​

الخطأ:

bad indentation of a mapping entry at line 50, column 3:
storage: path/to/database.sqlite
^

الحل:

cd /var/www/wikijs
nano config.yml

# تعليق الخطوط التالية:
# SQLite only:
# storage: path/to/database.sqlite

# حفظ والخروج

# إعادة تحميل وإعادة تشغيل
sudo systemctl daemon-reload
sudo systemctl start wikijs
sudo systemctl enable wikijs
sudo systemctl status wikijs

المشكلة 4: الوصول الخارجي (Azure/Cloud)​

إذا كنت ترغب في الوصول إلى Wiki.js من الخارج (مثلًا من Azure):

  1. إضافة قاعدة لحركة المرور الواردة في جدار الحماية السحابي الخاص بك (المنفذ 3000)

  2. تعديل bindIP في config.yml:

# تسجيل الدخول كمستخدم wikijs
sudo su - wikijs

# الانتقال إلى الدليل
cd /var/www/wikijs

# تحرير التكوين
nano config.yml

غير:

bindIP: 127.0.0.1

إلى:

bindIP: 0.0.0.0

احفظ واخرج.

  1. إعادة تحميل وإعادة تشغيل الخدمة:
# العودة إلى root
exit

# إعادة تحميل التكوين
sudo systemctl daemon-reload

# إعادة تشغيل الخدمة (مهم!)
sudo systemctl restart wikijs

# التحقق من الحالة
sudo systemctl status wikijs
  1. الوصول إلى Wiki.js:

الوصول إلى Wiki.js عبر المتصفح باستخدام الرابط: http://<adresse_IP>:3000


الجزء 7: الوصول إلى Wiki.js​

الوصول المحلي​

الوصول إلى Wiki.js عبر المتصفح باستخدام الرابط: http://127.0.0.1:3000 أو http://localhost:3000

الوصول الخارجي​

إذا قمت بتكوين bindIP: 0.0.0.0، فالوصول عبر: http://<adresse_IP>:3000

التكوين الأولي​

  1. اتبع التعليمات لإنشاء حساب مدير
  2. أكمل التثبيت عبر الواجهة الويب
  3. سجل الدخول باستخدام بيانات اعتماد المدير الخاصة بك

الجزء 8: تكوين HTTPS باستخدام Certbot​

تثبيت Certbot​

# الاتصال عبر SSH (إذا كنت على Azure/Cloud)
# ssh -i key1.pem azureuser@<adresse_ip_publique_de_votre_vm>

# التحول إلى root
sudo -i

# تحديث الحزم
sudo apt update

# تثبيت Certbot والملحق Apache
sudo apt install certbot python3-certbot-apache -y

تكوين جدار الحماية​

# السماح لـ Apache (HTTP و HTTPS)
sudo ufw allow 'Apache Full'

# التحقق من الحالة
sudo ufw status

الحصول على شهادة SSL​

# الحصول على شهادة SSL باستخدام Certbot
sudo certbot --apache

أثناء التنفيذ:

  • أدخل عنوان بريدك الإلكتروني
  • اقبل الشروط والأحكام
  • أدخل اسم النطاق الخاص بك (مثل: haythemrehouma.eastus.cloudapp.azure.com)
  • اختر إعادة توجيه HTTP إلى HTTPS

التحقق من التجديد التلقائي​

# التحقق من حالة المؤقت Certbot
sudo systemctl status certbot.timer

# اختبار التجديد (محاكاة)
sudo certbot renew --dry-run

سيقوم Certbot بتجديد الشهادات تلقائيًا قبل انتهاء صلاحيتها.


ملخص الأوامر المهمة​

الأمرالوصف
git --versionالتحقق من إصدار Git
node -v && npm -vالتحقق من إصدارات Node.js و npm
sudo systemctl status mariadbالتحقق من حالة MariaDB
sudo mysql -u root -pالاتصال بـ MariaDB
sudo systemctl status wikijsالتحقق من حالة خدمة Wiki.js
sudo journalctl -u wikijs.service -fمتابعة السجلات في الوقت الحقيقي
sudo systemctl restart wikijsإعادة تشغيل خدمة Wiki.js
sudo certbot renew --dry-runاختبار تجديد SSL

التحقق النهائي​

تحقق من أنك قد نجحت في:

  • تثبيت Git و Node.js
  • تثبيت وتكوين MariaDB
  • إنشاء قاعدة البيانات والمستخدم لـ Wiki.js
  • تنزيل واستخراج Wiki.js
  • تكوين ملف config.yml بشكل صحيح
  • إنشاء وتفعيل خدمة systemd
  • الوصول إلى Wiki.js عبر المتصفح
  • حل أخطاء YAML إذا كانت موجودة
  • تكوين HTTPS باستخدام Certbot (اختياري)

أسئلة للتفكير​

  1. لماذا من المهم إنشاء مستخدم نظام مخصص (wikijs) لـ Wiki.js؟

    • اشرح الفوائد الأمنية
  2. ما الفرق بين bindIP: 127.0.0.1 و bindIP: 0.0.0.0؟

    • في أي حالات ستستخدم كل من هذه التكوينات؟
  3. لماذا من الضروري تعليق أقسام PostgreSQL و SQLite في config.yml إذا كنا نستخدم MariaDB؟

    • اشرح أخطاء YAML وكيفية تجنبها
  4. ما هو دور خدمة systemd في هذا التثبيت؟

    • اشرح الفوائد مقارنة بالتشغيل اليدوي
  5. لماذا نستخدم Certbot لـ HTTPS بدلاً من شهادة موقعة ذاتيًا؟

    • ما هي الفوائد لبيئة الإنتاج؟

الخطوات التالية​

  • الوحدة 8: الخدمات والعمليات (لتعميق المعرفة بـ systemd)
  • الوحدة 9: أمان النظام (لتأمين التثبيت بشكل أكبر)
  • TP 2: Reverse Proxy NGINX (لإظهار Wiki.js عبر وكيل عكسي)

الموارد الإضافية​


تم إنشاء المختبر في: ديسمبر 2024