المختبر 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):
-
إضافة قاعدة لحركة المرور الواردة في جدار الحماية السحابي الخاص بك (المنفذ 3000)
-
تعديل bindIP في config.yml:
# تسجيل الدخول كمستخدم wikijs
sudo su - wikijs
# الانتقال إلى الدليل
cd /var/www/wikijs
# تحرير التكوين
nano config.yml
غير:
bindIP: 127.0.0.1
إلى:
bindIP: 0.0.0.0
احفظ واخرج.
- إعادة تحميل وإعادة تشغيل الخدمة:
# العودة إلى root
exit
# إعادة تحميل التكوين
sudo systemctl daemon-reload
# إعادة تشغيل الخدمة (مهم!)
sudo systemctl restart wikijs
# التحقق من الحالة
sudo systemctl status wikijs
- الوصول إلى 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
التكوين الأولي
- اتبع التعليمات لإنشاء حساب مدير
- أكمل التثبيت عبر الواجهة الويب
- سجل الدخول باستخدام بيانات اعتماد المدير الخاصة بك
الجزء 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 (اختياري)
أسئلة للتفكير
-
لماذا من المهم إنشاء مستخدم نظام مخصص (
wikijs) لـ Wiki.js؟- اشرح الفوائد الأمنية
-
ما الفرق بين
bindIP: 127.0.0.1وbindIP: 0.0.0.0؟- في أي حالات ستستخدم كل من هذه التكوينات؟
-
لماذا من الضروري تعليق أقسام PostgreSQL و SQLite في
config.ymlإذا كنا نستخدم MariaDB؟- اشرح أخطاء YAML وكيفية تجنبها
-
ما هو دور خدمة systemd في هذا التثبيت؟
- اشرح الفوائد مقارنة بالتشغيل اليدوي
-
لماذا نستخدم Certbot لـ HTTPS بدلاً من شهادة موقعة ذاتيًا؟
- ما هي الفوائد لبيئة الإنتاج؟
الخطوات التالية
- الوحدة 8: الخدمات والعمليات (لتعميق المعرفة بـ systemd)
- الوحدة 9: أمان النظام (لتأمين التثبيت بشكل أكبر)
- TP 2: Reverse Proxy NGINX (لإظهار Wiki.js عبر وكيل عكسي)
الموارد الإضافية
تم إنشاء المختبر في: ديسمبر 2024