دليل تثبيت WorkUp الكامل
0

قبل ما نبدأ: ما الذي سنُركّبه؟

تخيّل السيرفر (Server) على أنه "بيت" فارغ. نحن سنقوم بأربعة أشياء بالترتيب: (1) نجهّز البيت بالكهرباء والماء — هذا هو تثبيت البرامج الأساسية (Apache وPHP وMySQL). (2) ننقل الأثاث للبيت — هذا هو رفع ملفات WorkUp. (3) نبني "خزانة" لحفظ كل المعلومات (الموظفين، الحضور، الطلبات) — هذه قاعدة البيانات. (4) نعطي البيت عنواناً يعرفه الجميع (دومين) وباباً آمناً (HTTPS). بعدها فقط، نُركّب تطبيق الموبايل الذي "يتصل" بهذا البيت من أي مكان.

ما الذي تحتاجه قبل البدء

1. جهاز سيرفر (يُسمى أيضاً VPS) يعمل بنظام Ubuntu 22.04 أو أحدث. هذا الدليل مبني على أوبنتو لأنه الأكثر شيوعاً للاستضافة. إذا لم يكن لديك سيرفر بعد، يمكنك استئجار واحد من أي شركة استضافة (Hostinger، DigitalOcean، AWS Lightsail... إلخ).

2. صلاحية دخول عبر SSH (يعني تقدر "تتحكم" بالسيرفر بالكتابة فقط، بدون شاشة) — عادة تحصل عليها من شركة الاستضافة فور الشراء (عنوان IP + كلمة مرور أو مفتاح).

3. نسخة كاملة من مجلد مشروع WorkUp (نفس هذا المجلد الذي تقرأ منه الآن).

4. (اختياري لكن مستحسن) اسم نطاق (Domain) مثل workup.شركتك.com. بدونه، تقدر تستخدم عنوان IP السيرفر مباشرة، لكن لن تقدر تفعّل HTTPS بسهولة.

كل أمر في هذا الدليل مكتوب داخل صندوق أسود (مثل الذي بالأسفل). انسخه والصقه في الترمنال بالضبط كما هو، ثم اضغط Enter.
مثال أمر هكذا يبدو
1

الجزء الأول: تجهيز السيرفر

هنا نُركّب "الأدوات الأساسية" التي يحتاجها أي موقع PHP ليعمل: خادم الويب (Apache)، ولغة البرمجة (PHP)، وقاعدة البيانات (MySQL).
1

الاتصال بالسيرفر عبر SSH

افتح الترمنال على جهازك (Terminal على ماك ولينكس، أو PowerShell/PuTTY على ويندوز) واكتب:

ssh root@عنوان_IP_السيرفر

استبدل عنوان_IP_السيرفر بالرقم الذي أعطتك إياه شركة الاستضافة (مثل 192.168.1.10). سيطلب منك كلمة المرور، اكتبها (لن تظهر أثناء الكتابة، هذا طبيعي) واضغط Enter.

SSH يستخدم دائماً المنفذ (Port) 22. هذا هو "الباب" الذي تدخل منه للتحكم بالسيرفر بالكتابة. لا تحتاج تتذكر هذا الرقم، فقط اعرف أنه موجود ويجب أن يبقى مفتوحاً دائماً (سنتأكد من هذا لاحقاً في خطوة الجدار الناري).
2

تحديث النظام

أول شيء نفعله دائماً بسيرفر جديد هو تحديث البرامج المثبتة مسبقاً:

sudo apt update && sudo apt upgrade -y

sudo تعني "نفّذ هذا الأمر بصلاحية المدير الكاملة". apt هو "متجر التطبيقات" الخاص بأوبنتو. هذا الأمر يتأكد أن كل شيء بالسيرفر بآخر إصدار وأكثر أماناً قبل أن نبني عليه.

3

تثبيت Apache (خادم الويب)

Apache هو البرنامج الذي "يستقبل" أي شخص يفتح رابط موقعك، ويُرسل له الصفحة المطلوبة. بدونه، السيرفر لا "يتكلم" مع المتصفحات إطلاقاً.

sudo apt install apache2 -y
sudo systemctl enable apache2
sudo systemctl start apache2

enable تعني "شغّله تلقائياً كل مرة يُعاد تشغيل السيرفر"، وstart تعني "شغّله الآن فوراً". Apache يعمل تلقائياً على المنفذ 80.

جرّبه الآن: افتح متصفحك واذهب إلى http://عنوان_IP_السيرفر. يجب أن تظهر صفحة "Apache2 Default Page" الخضراء. إن ظهرت، فهذا يعني أن الخطوة نجحت 100%.

4

تثبيت MySQL (قاعدة البيانات)

MySQL هو البرنامج الذي سيحفظ فيه WorkUp كل شيء: أسماء الموظفين، سجلات الحضور، الطلبات، المهام... كل شيء. فكّر فيه كـ"خزانة ملفات ضخمة ومنظّمة".

sudo apt install mysql-server -y
sudo mysql_secure_installation

الأمر الثاني سيسألك عدة أسئلة أمنية (كلمة مرور المدير، حذف مستخدمين تجريبيين...) — أجب بـ Y (نعم) على أغلبها، وضع كلمة مرور قوية لحساب المدير (root) وتذكّرها جيداً.

MySQL يعمل على المنفذ 3306. الميزة المهمة: هذا المنفذ لا يحتاج أبداً أن يكون مفتوحاً "للعالم الخارجي" (الإنترنت) — فقط PHP الموجود على نفس السيرفر يتحدث معه محلياً (localhost). لهذا لن نفتحه في الجدار الناري لاحقاً، وهذا شيء جيد للأمان.
5

إنشاء قاعدة بيانات ومستخدم خاص بـ WorkUp

ادخل لبرنامج MySQL:

sudo mysql -u root -p

اكتب كلمة المرور التي وضعتها بالخطوة السابقة. الآن أنت "داخل" MySQL (سترى mysql>). انسخ والصق هذه الأوامر واحداً تلو الآخر (كل سطر ثم Enter):

-- ننشئ قاعدة بيانات فارغة اسمها workup
CREATE DATABASE workup CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- ننشئ مستخدماً جديداً خاصاً بالتطبيق فقط (وليس root)
CREATE USER 'workup_user'@'localhost' IDENTIFIED BY 'ضع_كلمة_مرور_قوية_هنا';

-- نعطي هذا المستخدم صلاحية كاملة، لكن فقط على قاعدة workup تحديداً
GRANT ALL PRIVILEGES ON workup.* TO 'workup_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

لماذا لا نستخدم root مباشرة داخل التطبيق؟ لأنه لو تسرّبت بيانات الاتصال يوماً ما، حساب workup_user المحدود لا يقدر يلمس أي قاعدة بيانات أخرى على نفس السيرفر — بينما root يقدر يفعل أي شيء. هذا مبدأ أمني اسمه "أقل صلاحية ممكنة".

اكتب كلمة المرور التي اخترتها في مكان آمن (ملاحظات هاتفك مثلاً) — ستحتاجها بعد قليل في الخطوة الرابعة.
6

تثبيت PHP والإضافات (Extensions) التي يحتاجها WorkUp

PHP هي اللغة التي كُتب بها كل كود WorkUp. لكن PHP وحدها لا تكفي — تحتاج "إضافات" صغيرة لتقدر تفعل أشياء معيّنة (التعامل مع قواعد البيانات، الصور، ملفات ZIP...). ثبّت PHP وكل الإضافات دفعة واحدة:

sudo apt install php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-zip php-xml -y
الإضافةلماذا يحتاجها WorkUp بالضبط
php-mysqlتسمح لـ PHP "بالتحدث" مع قاعدة بيانات MySQL — بدونها، لا يقدر الموقع حتى يقرأ اسم موظف واحد.
php-curlيستخدمها WorkUp لإرسال إشعارات الموبايل عبر Firebase/OneSignal، ولبعض مكتبات التقارير الداخلية.
php-gdمعالجة الصور (تصغيرها، التحقق من صحتها) عند رفع صورة موظف أو مرفق مهمة، وأيضاً لتوليد ملفات PDF (التقارير وكشوفات الحضور).
php-mbstringيتأكد أن النصوص العربية والإنجليزية تُعرض وتُخزَّن بشكل صحيح دون تشويه للحروف.
php-zipيُستخدم عند تصدير تقارير حضور الفريق كملف ZIP يحتوي عدة ملفات دفعة واحدة.
php-xmlتحتاجها مكتبات التقارير/PDF الداخلية الموجودة أصلاً داخل مجلد المشروع.

بعد التثبيت، أعد تشغيل Apache حتى يتعرّف على PHP:

sudo systemctl restart apache2
7

تفعيل mod_rewrite و FollowSymlinks

WorkUp يستخدم روابط "جميلة" مثل workup.com/login بدل workup.com/auth/login.php. هذا يحتاج ميزة اسمها mod_rewrite:

sudo a2enmod rewrite

الآن افتح ملف إعدادات أباتشي الرئيسي:

sudo nano /etc/apache2/apache2.conf

ابحث عن (بالسهم لأسفل، أو Ctrl+W بالبحث) هذا الجزء:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

غيّر AllowOverride None إلى AllowOverride All فقط (اترك الباقي كما هو). احفظ بالضغط Ctrl+O ثم Enter، ثم اخرج بـ Ctrl+X. بعدها أعد تشغيل أباتشي:

sudo systemctl restart apache2

لماذا هذا مهم؟ ملف .htaccess الموجود داخل مجلد WorkUp يطلب صراحةً هذه الميزة (+FollowSymlinks) وقواعد إعادة التوجيه (RewriteRule) للروابط الجميلة. بدون AllowOverride All، سيتجاهل أباتشي ملف .htaccess بالكامل وستظهر أخطاء 404 لكل صفحة تقريباً.

2

الجزء الثاني: رفع ملفات WorkUp للسيرفر

الآن "البيت" جاهز بالكهرباء والماء. حان وقت نقل الأثاث — أي ملفات المشروع نفسها.
8

إنشاء المجلد الصحيح بالاسم الصحيح

هذا مهم جداً: يجب أن يكون اسم المجلد WorkUp بالضبط (بنفس حروف كبيرة/صغيرة)، لأن بعض الملفات الداخلية (صفحات الأخطاء 404/500) تشير لمسار /WorkUp/ مباشرة.

sudo mkdir -p /var/www/html/WorkUp
9

نسخ الملفات من جهازك إلى السيرفر

عندك أكثر من طريقة، اختر الأسهل لك:

الطريقة 1 — عبر أمر scp (من جهازك مباشرة، بدون برامج إضافية):

scp -r /مسار/مجلد/WorkUp root@عنوان_IP_السيرفر:/var/www/html/

الطريقة 2 — برنامج FileZilla (سحب وإفلات بواجهة رسومية): حمّل FileZilla، اتصل بالسيرفر عبر SFTP (نفس بيانات SSH: المستخدم، الـIP، المنفذ 22)، ثم اسحب مجلد WorkUp بأكمله إلى /var/www/html/.

الطريقة 3 — Git (إذا كان المشروع على GitHub/GitLab):

cd /var/www/html
sudo git clone رابط_المستودع WorkUp
قد يستغرق نقل الملفات دقائق حسب سرعة الإنترنت، لأن المشروع يحتوي مكتبات جاهزة (PDF، محرر نصوص...) بأحجام لا بأس بها. لا تُقلق، هذا طبيعي.
10

ضبط الصلاحيات (Permissions)

الآن نُخبر السيرفر: "أباتشي يملك حق قراءة (وأحياناً كتابة) هذه الملفات":

# نعطي ملكية كل الملفات لمستخدم أباتشي (www-data)
sudo chown -R www-data:www-data /var/www/html/WorkUp

# صلاحيات القراءة العادية للمجلدات والملفات
sudo find /var/www/html/WorkUp -type d -exec chmod 755 {} \;
sudo find /var/www/html/WorkUp -type f -exec chmod 644 {} \;

# مجلد "files" يحتاج صلاحية أكبر، لأن التطبيق يخزّن بداخله
# صور الموظفين ومرفقات المهام تلقائياً وقت الاستخدام
sudo chmod -R 775 /var/www/html/WorkUp/files

www-data هو اسم "المستخدم" الذي يعمل به Apache على أوبنتو دائماً. الرقم 755 يعني "أنا أقدر أكتب وأقرأ، والجميع يقدر فقط يقرأ"، بينما 775 يعطي مجموعة أباتشي حق الكتابة أيضاً، وهذا ضروري لمجلد files تحديداً لأن الموقع يُنشئ بداخله مجلدات جديدة تلقائياً (مثلاً عند رفع مرفق مهمة).

3

الجزء الثالث: استيراد قاعدة البيانات

أنشأنا "الخزانة" الفارغة بالجزء الأول (خطوة 5). الآن نملأها بكل "الأدراج" (الجداول) التي يحتاجها WorkUp — 21 جدولاً جاهزة داخل ملف واحد اسمه db.sql.
11

استيراد db.sql

mysql -u workup_user -p workup < /var/www/html/WorkUp/db.sql

اكتب كلمة مرور workup_user التي اخترتها بالخطوة 5. هذا الأمر "يقرأ" ملف db.sql سطراً سطراً وينفّذه داخل قاعدة workup مباشرة — خلال ثوانٍ ستكون كل الجداول (الموظفين، الفرق، الحضور، المهام، الطلبات، الإشعارات...) جاهزة وفارغة تماماً، بانتظار أول مستخدم.

تفضّل واجهة رسومية بدل الترمنال؟ ثبّت phpMyAdmin (sudo apt install phpmyadmin -y) وارفع db.sql من خلاله بنفس الطريقة التي تعرفها من XAMPP.
4

الجزء الرابع: ربط الملفات بقاعدة البيانات

عندنا الآن "أثاث" (الملفات) و"خزانة" (قاعدة البيانات) منفصلين. هذا الجزء يربط بينهما بملفّين فقط.
12

تعديل includes/config.php

هذا هو الملف الوحيد الذي يحتوي بيانات الاتصال بقاعدة البيانات. افتحه:

sudo nano /var/www/html/WorkUp/includes/config.php

ستجد بالأعلى هذه الأسطر:

// كما هي الآن (افتراضي محلي)
define("HOST","localhost");
define("USER","root");
define("PASSWORD","");
define("DATABASE","workup");

غيّرها لتطابق ما أنشأته بالضبط في الجزء الثالث:

// بعد التعديل
define("HOST","localhost");
define("USER","workup_user");
define("PASSWORD","ضع_كلمة_المرور_التي_اخترتها");
define("DATABASE","workup");

HOST تبقى localhost لأن قاعدة البيانات موجودة على نفس السيرفر بالضبط (تذكّر: منفذ 3306 المحلي من الجزء الأول). احفظ (Ctrl+O ثم Enter) واخرج (Ctrl+X).

13

تعديل مسار include_path في .htaccess

افتح ملف .htaccess الرئيسي:

sudo nano /var/www/html/WorkUp/.htaccess

ابحث عن هذا السطر (قرب الأعلى):

php_value include_path "/Applications/XAMPP/htdocs/WorkUp/"

غيّره ليطابق المسار الحقيقي على هذا السيرفر تحديداً (الذي أنشأناه بالخطوة 8):

php_value include_path "/var/www/html/WorkUp/"

هذا السطر يخبر PHP: "عندما يطلب أي ملف كود آخر ملفاً مشتركاً، ابحث هنا أولاً". لو تركت المسار القديم (الخاص بجهاز آخر تماماً)، سيفشل الموقع في تحميل أي شيء تقريباً وستظهر صفحة بيضاء أو خطأ 500.

هذه الخطوة هي السبب الأكثر شيوعاً لمشكلة "الصفحة لا تعمل إطلاقاً" عند نقل WorkUp لسيرفر جديد. تأكد منها بدقة قبل المتابعة.

أعد تشغيل أباتشي لتطبيق كل التعديلات:

sudo systemctl restart apache2
5

الجزء الخامس: الدومين، وHTTPS، والجدار الناري

الآن الموقع "يعمل" فعلياً. بقي أن نعطيه عنواناً سهلاً يتذكره الناس (بدل رقم IP)، ونقفل كل الأبواب غير الضرورية في المنزل باستثناء الأبواب التي نحتاجها فعلاً.
14

ربط اسم النطاق (Domain) بالسيرفر

لو عندك دومين (مثل workup.شركتك.com): أولاً اذهب للوحة تحكم الدومين (من الشركة التي اشتريته منها) وأضف سجل من نوع A يشير لعنوان IP السيرفر. بعدها أنشئ ملف إعدادات خاص بالموقع:

sudo nano /etc/apache2/sites-available/workup.conf

الصق هذا المحتوى بالضبط (استبدل الدومين بدومينك الفعلي):

<VirtualHost *:80>
    ServerName workup.شركتك.com
    DocumentRoot /var/www/html/WorkUp

    <Directory /var/www/html/WorkUp>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

فعّل هذا الموقع وأعد تحميل أباتشي:

sudo a2ensite workup.conf
sudo systemctl reload apache2
لا تملك دومين بعد؟ لا مشكلة، تجاوز هذه الخطوة تماماً، وافتح الموقع مباشرة عبر: http://عنوان_IP_السيرفر/WorkUp (لاحظ إضافة /WorkUp بالآخر، لأن المجلد فرعي داخل مجلد أباتشي العام /var/www/html).
15

تفعيل HTTPS (قفل أمان مجاني عبر Let's Encrypt)

HTTPS يعني أن كل البيانات المرسلة بين المتصفح/التطبيق والسيرفر "مشفّرة" — لا أحد على نفس الشبكة (مقهى، فندق، واي فاي عام) يقدر "يتنصت" ويرى كلمات المرور. هذه الخطوة تتطلب دومين حقيقي (من الخطوة 14):

sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d workup.شركتك.com

Certbot سيطرح عليك سؤالين بسيطين (بريدك الإلكتروني، والموافقة على الشروط)، ثم يقوم تلقائياً بكل العمل: يُصدر شهادة أمان مجانية، يعدّل إعدادات أباتشي بنفسه، ويفتح المنفذ 443. كما يجدّد الشهادة تلقائياً كل 90 يوماً دون أي تدخل منك.

16

الجدار الناري (Firewall) — فتح الأبواب الصحيحة فقط

الجدار الناري مثل "حارس أمن" يقرر أي "أبواب" (منافذ) مسموح لأي شخص من الإنترنت الطرق عليها. نفعّله ونفتح فقط ما نحتاج:

sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
sudo ufw enable

OpenSSH يبقي المنفذ 22 مفتوحاً — لا تنسَ هذا السطر أبداً، وإلا ستُقفل الباب على نفسك وتفقد القدرة على الدخول للسيرفر عن بُعد نهائياً! أما 'Apache Full' فيفتح المنفذين 80 و443 معاً دفعة واحدة.

تأكد أن أمر sudo ufw allow OpenSSH نجح قبل كتابة sudo ufw enable. إذا فعّلت الجدار الناري بدون هذا السطر، ستنقطع جلسة SSH الحالية ولن تقدر تتصل بالسيرفر مرة أخرى إلا عبر لوحة تحكم شركة الاستضافة مباشرة (Console/VNC).
17

التجربة النهائية

افتح المتصفح واذهب إلى رابط موقعك (https://workup.شركتك.com أو http://عنوان_IP_السيرفر/WorkUp). يجب أن تظهر صفحة تسجيل الدخول الخاصة بـ WorkUp — إن ظهرت، فقد أنجزت الجزء الأصعب بنجاح! 🎉

6

جدول ملخّص كل المنافذ (Ports)

"المنفذ" (Port) هو مجرد رقم يحدد "أي باب" من أبواب السيرفر يُستخدم لنوع معيّن من الاتصال. هذا ملخّص لكل منفذ ذكرناه في هذا الدليل بالضبط.
المنفذالاستخداممفتوح للإنترنت؟لماذا
22 SSH — التحكم بالسيرفر عن بعد بالكتابة نعم تحتاجه أنت (المدير) للدخول وتنفيذ الأوامر من أي مكان. حافظنا عليه مفتوحاً بأول أمر بخطوة الجدار الناري.
80 HTTP — تصفّح الموقع العادي (غير مشفّر) نعم هو المنفذ الافتراضي لأي متصفح أو تطبيق موبايل عند كتابة http://. Apache يستمع عليه تلقائياً فور تثبيته.
443 HTTPS — تصفّح مشفّر وآمن نعم يُستخدم عند كتابة https://. يُفعَّل تلقائياً عند تثبيت شهادة SSL عبر Certbot (الخطوة 15). موصى به بشدة للإنتاج الفعلي.
3306 MySQL — التحدث مع قاعدة البيانات لا يستخدمه فقط كود PHP الموجود على نفس السيرفر (اتصال محلي/localhost). لا حاجة أبداً لفتحه للإنترنت، وتركه مغلقاً أكثر أماناً.
7

الجزء السادس: إعداد إشعارات الموبايل (اختياري)

هذه خطوة اختيارية، لكنها مطلوبة إن أردت أن يستلم الموظفون إشعارات فعلية على هواتفهم (طلب جديد، مهمة، اعتماد...). WorkUp يدعم مزوّدَين، اختر واحداً فقط.
18

Firebase أو OneSignal — أيهما تختار؟

Firebase Cloud Messaging (FCM): خدمة مجانية من جوجل، تحتاج مشروع Firebase (من console.firebase.google.com) و"مفتاح سيرفر" (Server Key) من إعدادات المشروع.

OneSignal: خدمة إشعارات مستقلة، أسهل قليلاً بالإعداد الأولي، تحتاج App ID ومفتاح REST API من onesignal.com.

بعد الحصول على المفاتيح (أياً كانت الخدمة)، ادخل للوحة تحكم الإدارة abma ثم الإعدادات، وأدخل المفاتيح في الحقول المخصصة. WorkUp يحفظها ويبدأ استخدامها فوراً بلا حاجة لإعادة تشغيل أي شيء.

8

الجزء السابع: بناء وتثبيت تطبيق الموبايل

آخر خطوة: نبني ملف التثبيت (APK) لتطبيق الموظفين، ونضعه على الهاتف، ونربطه بالسيرفر الذي جهّزناه بالأعلى.
19

ما الذي تحتاجه على جهاز الكمبيوتر (وليس السيرفر)

هذا الجزء يُنفَّذ على جهاز الكمبيوتر (ويندوز/ماك/لينكس) الذي تعمل عليه، وليس على السيرفر. تحتاج:

1. Flutter SDK — حمّله من flutter.dev واتبع تعليمات التثبيت حسب نظامك.

2. Android Studio — يوفّر لك Android SDK اللازم لبناء تطبيق أندرويد (حتى لو لن تستخدم واجهة Android Studio نفسها).

3. هاتف أندرويد حقيقي (متصل بكابل USB) أو محاكي (Emulator) من Android Studio.

بعد التثبيت، تأكد أن كل شيء تمام بكتابة:

flutter doctor

هذا الأمر يفحص جهازك ويخبرك بعلامة صح (✓) أو خطأ (✗) لكل متطلب. تأكد أن كل شيء أخضر قبل المتابعة.

20

تحميل مكتبات المشروع (pub get)

افتح الترمنال داخل مجلد تطبيق الموبايل الأساسي (اسمه new_app):

cd new_app
flutter pub get

هذا الأمر يقرأ ملف pubspec.yaml ويُحمّل تلقائياً كل "المكوّنات الجاهزة" التي يعتمد عليها التطبيق (كاميرا، خرائط بوصلة القبلة، إشعارات...) — تماماً مثل تحميل قطع ليغو جاهزة بدل صنعها من الصفر.

21

بناء ملف التثبيت (APK)

flutter build apk --release

هذا الأمر يحوّل كل كود Dart إلى ملف واحد قابل للتثبيت على أي هاتف أندرويد. قد يستغرق عدة دقائق أول مرة. الملف الناتج سيكون هنا بالضبط:

new_app/build/app/outputs/flutter-apk/app-release.apk
22

نقل الملف للهاتف وتثبيته

الطريقة 1 (الأسهل): إذا كان الهاتف متصلاً بالكمبيوتر عبر USB مع تفعيل "وضع المطوّر" (Developer Options) و"تصحيح USB" (USB Debugging)، اكتب:

flutter install

الطريقة 2: ارفع ملف app-release.apk على Google Drive أو أرسله عبر واتساب/بريد لنفسك، وحمّله على الهاتف مباشرة.

في الحالتين، أول مرة تُثبّت تطبيقاً من خارج متجر جوجل، سيطلب منك الهاتف تفعيل خيار اسمه "السماح بالتثبيت من مصادر غير معروفة" (Install unknown apps) — وافق عليه فقط لهذا التطبيق تحديداً.

23

أول تشغيل: ربط التطبيق بالسيرفر

عند فتح التطبيق لأول مرة، ستظهر شاشة تطلب "عنوان السيرفر". عندك خياران:

مسح رمز QR: إذا جهّزت رمز QR يحتوي رابط سيرفرك (نص عادي أو JSON بمفتاح backend_url)، امسحه مباشرة من كاميرا التطبيق.

الإدخال اليدوي: اكتب رابط سيرفرك بالكامل مع http:// أو https://، مثل:

https://workup.شركتك.com

التطبيق يحفظ هذا الرابط داخلياً ولن يسألك عنه مرة أخرى. بعدها، سجّل الدخول بحساب موظف حقيقي موجود بقاعدة البيانات (أنشأه أولاً من لوحة abma إن لم يكن موجوداً).

9

استكشاف الأخطاء الشائعة

لو واجهتك مشكلة، غالباً حلّها هنا. ابحث عن أقرب وصف لما يظهر لك.
⚠️ ظهرت لي صفحة "Internal Server Error 500"
السبب الأشيع: مسار include_path في .htaccess (الخطوة 13) لا يطابق المكان الحقيقي للملفات. تحقق من سجل الأخطاء لمعرفة السبب بالضبط:
sudo tail -f /var/log/apache2/error.log
افتح الموقع بمتصفح جديد بينما هذا الأمر يعمل، وشاهد آخر سطر يظهر — سيخبرك بالسطر والملف بالضبط.
⚠️ صفحة بيضاء تماماً بدون أي رسالة
هذا يعني عادة خطأ PHP يُخفيه إعداد "عدم عرض الأخطاء". لتفعيل عرضها مؤقتاً (للتشخيص فقط، عطّلها بعد الانتهاء)، افتح includes/config.php وأزل التعليق (/* */) عن أول سطرين بالأعلى، ثم أعد تحميل الصفحة لترى رسالة الخطأ الحقيقية.
⚠️ "لا يمكن الاتصال بقاعدة البيانات"
تأكد أن بيانات includes/config.php (المستخدم، كلمة المرور، اسم القاعدة) مطابقة تماماً لما أنشأته في الخطوة 5، وتأكد أن خدمة MySQL تعمل فعلاً:
sudo systemctl status mysql
⚠️ كل الروابط (بدون .php) تعطي 404، حتى صفحة تسجيل الدخول
تأكد أن mod_rewrite مفعّل وأن AllowOverride All مضبوطة فعلاً (الخطوة 7)، ثم أعد تشغيل أباتشي.
⚠️ لا يمكن رفع صورة موظف أو مرفق مهمة
تحقق من صلاحيات مجلد files ومالكه (الخطوة 10) — يجب أن يكون www-data ويملك صلاحية 775.
⚠️ تطبيق الموبايل يقول "تعذّر الاتصال بالخادم"
تأكد أن الرابط المُدخَل بالتطبيق صحيح وكامل (يبدأ بـ http:// أو https:// بدون علامة / بالنهاية)، وأن الجدار الناري يسمح بالمنفذ المستخدم (80 أو 443)، وأن الهاتف يقدر يصل فعلاً لعنوان السيرفر (جرّب فتح نفس الرابط من متصفح الهاتف أولاً).
⚠️ فقدت الاتصال بالسيرفر عبر SSH بعد تفعيل الجدار الناري
هذا يحدث فقط لو نسيت sudo ufw allow OpenSSH قبل enable (الخطوة 16). الحل: ادخل للسيرفر عبر لوحة تحكم شركة الاستضافة مباشرة (خيار اسمه غالباً Console أو VNC)، ثم نفّذ:
sudo ufw allow OpenSSH
sudo ufw reload
صُنع بعناية لفريق WorkUp — احتفظ بهذا الملف كمرجع دائم، ولا بأس أبداً من إعادة قراءته أكثر من مرة.
التثبيت WorkUp