# دليل التثبيت والتهيئة للبرمجيات

اتبع قائمة التحقق الفنية الكاملة هذه لنشر واجهة برمجة تطبيقات Laravel (Backend)، ولوحة تحكم المشرف (React)، وتهيئة الخدمات الخارجية مثل Zoom و Firebase ووظائف جدولة المهام (Cron Jobs).

قائمة التحقق قبل البدء

تأكد من مطابقة خادم الاستضافة أو جهاز التطوير للمتطلبات الأساسية التالية:

  • بيئة PHP الإصدار 8.2 أو أحدث مع تفعيل إضافات (OpenSSL, PDO, Mbstring, XML, Ctype, JSON).
  • قاعدة بيانات MySQL 8.0+ أو MariaDB 10.4+ كخادم قواعد بيانات.
  • بيئة Node.js (الإصدار 18.x أو أحدث) ومدير حزم npm.
  • أداة Composer (الإصدار 2.x) لإدارة حزم PHP للمشروع.

1. نشر خادم التطبيقات (Laravel API)

يمثل خادم الواجهة الخلفية (Backend) القلب البرمجي للمنصة حيث يتم حفظ البيانات والعمليات المحاسبية والتحقق.

الخطوة 1.1: تثبيت الحزم التابعة للمشروع

افتح الطرفية في مجلد خادم التطبيقات وقم بتثبيت حزم Composer اللازمة:

composer install --no-dev --optimize-autoloader

الخطوة 1.2: تهيئة ملف البيئة (.env)

انسخ ملف قالب البيئة وقم بفتحه لبدء التعديل فيه:

cp .env.example .env
nano .env

اضبط متغيرات الاتصال بقاعدة بيانات MySQL الخاصة بك:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=icare_db
DB_USERNAME=your_database_user
DB_PASSWORD=your_database_password

الخطوة 1.3: توليد مفتاح التشفير وبناء الجداول

لتأمين تشفير بيانات المنصة، قم بتوليد مفتاح التطبيق، بناء مخطط الجداول وقواعد البيانات، وحقن البيانات الأساسية (بيانات المشرف، الأدوار والصلاحيات، جداول التهيئة):

php artisan key:generate
php artisan migrate --seed

قم بإنشاء رابط التخزين العام لتمكين النظام من حفظ وعرض الوصفات الطبية وأيقونات العيادة:

php artisan storage:link

2. نشر لوحة تحكم المشرف المباشر (React Admin Panel)

لوحة التحكم مبنية كـ Single-Page Application باستخدام React.js ونظام البناء السريع Vite، وتتصل بخادم Laravel عبر Sanctum ومفاتيح API.

الخطوة 2.1: تثبيت حزم واجهة العميل

توجه إلى مجلد لوحة المشرف بالطرفية وقم بتشغيل معالج الحزم:

npm install

الخطوة 2.2: تهيئة ملف البيئة للواجهة

أنشئ ملف البيئة الخاص ببرمجيات React في جذر مجلد اللوحة:

cp .env.example .env
nano .env

أدخل مسارات خادم الـ API والتخزين الذي أنشأته في الخطوة الأولى:

VITE_API_URL=http://localhost:8000/api/v1
VITE_STORAGE_URL=http://localhost:8000/storage

الخطوة 2.3: البناء والتشغيل

لتشغيل الخادم المحلي للتطوير والمتابعة اللحظية للتعديلات:

npm run dev

لتوليد وحزم ملفات HTML, CSS و JS النهائية والمحسنة للرفع لخادم الإنتاج المباشر (داخل مجلد dist):

npm run build

3. دليل النشر باستخدام Docker على خادم VPS

لنشر التطبيق في بيئة معزولة ومحزمة باستخدام Docker و Docker Compose على خادم VPS الخاص بك، استخدم الإعدادات والملفات التالية لتشغيل الخدمات تلقائياً.

الخطوة 3.1: ملف docker-compose.yml

أنشئ ملف docker-compose.yml في مجلد النشر الرئيسي بالخادم الافتراضي (VPS) لتنسيق خدمات قواعد البيانات وخادم الويب وخادم التطبيقات ولوحة التحكم:

version: '3.8'

services:
  # MySQL Database Service
  icare-db:
    image: mysql:8.0
    container_name: icare-db
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: icare_db
      MYSQL_ROOT_PASSWORD: secure_db_root_password
    volumes:
      - dbdata:/var/lib/mysql
    ports:
      - "3306:3306"

  # Laravel API Service
  icare-api:
    build:
      context: ./icare-backend
      dockerfile: Dockerfile
    container_name: icare-api
    restart: unless-stopped
    working_dir: /var/www
    volumes:
      - ./icare-backend:/var/www
    depends_on:
      - icare-db

  # Nginx Web Server (Proxying API requests and serving PHP)
  icare-webserver:
    image: nginx:alpine
    container_name: icare-webserver
    restart: unless-stopped
    ports:
      - "8000:80"
    volumes:
      - ./icare-backend:/var/www
      - ./nginx/conf.d/:/etc/nginx/conf.d/
    depends_on:
      - icare-api

  # React Admin Panel Service
  icare-admin:
    build:
      context: ./icare-admin-panel
      dockerfile: Dockerfile
    container_name: icare-admin
    restart: unless-stopped
    ports:
      - "80:80"

volumes:
  dbdata:
    driver: local

الخطوة 3.2: ملف Dockerfile للـ Backend

أنشئ ملف Dockerfile داخل مجلد الواجهة الخلفية (./icare-backend/Dockerfile):

FROM php:8.2-fpm

# Install system dependencies
RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Set working directory
WORKDIR /var/www

# Copy existing application directory contents
COPY . /var/www

# Copy existing application directory permissions
COPY --chown=www-data:www-data . /var/www

# Change current user to www
USER www-data

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]

الخطوة 3.3: ملف Dockerfile للـ Frontend

أنشئ ملف Dockerfile داخل مجلد لوحة التحكم (./icare-admin-panel/Dockerfile) لبناء تطبيقات React وخدمتها عبر Nginx:

# Build stage
FROM node:18-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# Production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

الخطوة 3.4: التشغيل وحقن البيانات

قم بتشغيل الحاويات في الخلفية، تشغيل التهجير، وحقن البيانات الافتراضية:

docker-compose up -d --build
docker-compose exec icare-api php artisan migrate --seed
docker-compose exec icare-api php artisan storage:link

4. تهيئة التكاملات والخدمات الخارجية

يتم ضبط مفاتيح المزامنة مع الخدمات الخارجية في ملف البيئة .env للـ Backend.

4.1: تكامل جلسات الفيديو الافتراضية (Zoom)

يستخدم النظام خدمة زووم لربط الأطباء بالمرضى في جلسات استشارية افتراضية:

  1. قم بتسجيل الدخول إلى موقع مطوري زووم Zoom App Marketplace.
  2. اختر Develop -> Build App وقم بإنشاء تطبيق من نوع Server-to-Server OAuth.
  3. في تبويب الصلاحيات (Scopes)، أضف الصلاحيات التالية:
    • meeting:write:meeting:admin
    • meeting:update:meeting:admin
    • meeting:delete:meeting:admin
  4. انسخ معرف العميل (Client ID)، السري (Client Secret)، ومعرف الحساب (Account ID) إلى ملف .env:
ZOOM_CLIENT_ID=your_zoom_client_id
ZOOM_CLIENT_SECRET=your_zoom_client_secret
ZOOM_ACCOUNT_ID=your_zoom_account_id

4.2: تهيئة إشعارات الأجهزة المحمولة (Firebase)

لإرسال التنبيهات اللحظية ومواعيد الحجوزات لتطبيقات الأطباء والمرضى:

  1. أنشئ مشروعاً جديداً في منصة Firebase Console.
  2. من إعدادات المشروع، توجه إلى Service Accounts وانقر Generate New Private Key لتحميل ملف بيانات الاعتماد بتنسيق JSON.
  3. احفظ ملف الـ JSON داخل مجلد التخزين بالـ Backend وقم بالإشارة لمساره في ملف البيئة:
FIREBASE_CREDENTIALS_PATH=storage/app/firebase-credentials.json

5. إعداد مهمة الجدولة التلقائية والتذكيرات (Cron Job)

يستخدم ICARE نظام الجدولة الخاص بـ Laravel للتحقق من المواعيد وإرسال التذكيرات التلقائية للمرضى. لتفعيل هذه الخدمة، يجب إضافة مهمة مجدولة على لوحة خادمك لتعمل كل دقيقة.

اختر أحد التهيئات التالية بناءً على نموذج النشر الخاص بك:

الخيار أ: النشر العادي (Native Deployment)

* * * * * cd /path-to-your-ICARE-backend-root && php artisan schedule:run >> /dev/null 2>&1

الخيار ب: النشر باستخدام Docker على خادم VPS

* * * * * docker exec icare-api php artisan schedule:run >> /dev/null 2>&1
السابق: ميزات التطبيق ← التالي: بنية النظام →