# دليل التثبيت والتهيئة للبرمجيات
اتبع قائمة التحقق الفنية الكاملة هذه لنشر واجهة برمجة تطبيقات 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)
يستخدم النظام خدمة زووم لربط الأطباء بالمرضى في جلسات استشارية افتراضية:
- قم بتسجيل الدخول إلى موقع مطوري زووم Zoom App Marketplace.
- اختر Develop -> Build App وقم بإنشاء تطبيق من نوع Server-to-Server OAuth.
- في تبويب الصلاحيات (Scopes)، أضف الصلاحيات التالية:
- meeting:write:meeting:admin
- meeting:update:meeting:admin
- meeting:delete:meeting:admin
- انسخ معرف العميل (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)
لإرسال التنبيهات اللحظية ومواعيد الحجوزات لتطبيقات الأطباء والمرضى:
- أنشئ مشروعاً جديداً في منصة Firebase Console.
- من إعدادات المشروع، توجه إلى Service Accounts وانقر Generate New Private Key لتحميل ملف بيانات الاعتماد بتنسيق JSON.
- احفظ ملف الـ 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