دليل النشر والترقية

نشر «طقس الأردن» بأمان على الاستضافة

السكربت يعمل بـ PHP وSQLite، وينشئ مجلدات التخزين وقاعدة البيانات تلقائيًا عند التثبيت الجديد. عند ترقية موقع قائم، احتفظ دائمًا بملفي .env وstorage/database.sqlite الموجودين على الخادم.

PHP 8.2+الإصدار المطلوب
SQLiteقاعدة البيانات
3مهام دورية أساسية
RTLواجهة عربية
1

متطلبات الاستضافة

  • PHP: الإصدار 8.2 أو أحدث.
  • امتدادات إلزامية: pdo_sqlite وsqlite3 وjson وmbstring.
  • اتصال HTTP: يفضّل curl، ويعمل السكربت احتياطيًا عبر streams إذا سمحت الاستضافة بالاتصال الخارجي.
  • Apache/LiteSpeed: تفعيل mod_rewrite والسماح بقراءة .htaccess.
  • HTTPS: شهادة صالحة للموقع قبل فتح لوحة الإدارة.
وجود PHP لا يعني أن pdo_sqlite مفعّل تلقائيًا. تحقّق منه من لوحة الاستضافة أو صفحة فحص الصحة.
2

ترقية الموقع الموجود حاليًا

  1. نزّل نسخة احتياطية من .env ومجلد storage/ كاملًا.
  2. ارفع ملفات النسخة الجديدة فوق ملفات الكود الحالية.
  3. لا تحذف ولا تستبدل .env أو storage/database.sqlite.
  4. اترك السكربت ينفّذ تحديثات قاعدة البيانات تلقائيًا عند أول طلب.
  5. شغّل مهام التحديث اليدوية الموجودة في قسم الـCron لاستبدال الكاش القديم فورًا.
الحزمة المنشورة لا تحتاج أن تحتوي على storage/ عند الترقية؛ السكربت سيستخدم مجلد التخزين الموجود على الخادم.
3

تثبيت جديد

وجّه Document Root إلى مجلد public/ كلما كان ذلك ممكنًا. إن تعذر، ارفع المشروع كاملًا واترك ملف .htaccess الجذري في مكانه.

انسخ .env.example إلى .env ثم اضبط القيم الأساسية:

APP_ENV=production
APP_DEBUG=false
APP_URL=https://www.example.com
BASE_PATH=/joweather
APP_TIMEZONE=Asia/Amman

DB_CONNECTION=sqlite
DB_DATABASE=storage/database.sqlite

WEATHER_PROVIDER=open-meteo
WEATHER_BASE_ENDPOINT=https://api.open-meteo.com/v1/forecast
WEATHER_SEASONAL_ENDPOINT=https://seasonal-api.open-meteo.com/v1/seasonal
WEATHER_TIMEZONE=Asia/Amman
WEATHER_CURRENT_TTL=1800
WEATHER_FORECAST_HOURS=48
WEATHER_SELF_HEAL_ENABLED=true
WEATHER_SELF_HEAL_COOLDOWN=300
WEATHER_SELF_HEAL_MAX_PER_REQUEST=2

ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=ضع-كلمة-مرور-قوية-وطويلة

لن يقبل التثبيت الجديد كلمة المرور الافتراضية أو كلمة أقصر من 12 محرفًا.

إن كان الموقع تجاريًا أو يعرض إعلانات، استخدم نقطة API وخطة تناسب شروط الاستخدام التجاري لمزوّد البيانات، ولا تعتمد على افتراض أن النقطة المجانية مناسبة لكل استعمال.
4

التخزين والصلاحيات

عند عدم وجود storage/ ينشئه السكربت، ويُنشئ داخله قاعدة البيانات والكاش والجلسات والسجلات. يجب أن يملك مستخدم PHP صلاحية الكتابة في جذر المشروع أو في مسار التخزين المحدد.

cd /home/USERNAME/public_html/joweather
mkdir -p storage storage/cache storage/sessions storage/logs
chmod -R 775 storage

قد تعمل صلاحية 755 إذا كان PHP يعمل بنفس مالك الملفات. استخدم 775 فقط عند الحاجة، ولا تستخدم 777.

بعد إنشاء القاعدة، تأكد أن الملف غير قابل للوصول عبر الويب وأن .htaccess يحمي مجلد التخزين.

5

جدولة المهام الدورية

استبدل المسار بما يناسب حساب الاستضافة:

# كل 30 دقيقة: الحالة الحالية والتوقعات اليومية
17 */2 * * * /usr/local/bin/php /home/USERNAME/public_html/joweather/cron/refresh_weather.php >> /home/USERNAME/joweather-weather.log 2>&1

# يوميًا 23:45 بتوقيت الخادم: النظرة الإقليمية لأربعة أسابيع
45 23 * * * /usr/local/bin/php /home/USERNAME/public_html/joweather/cron/refresh_seasonal.php >> /home/USERNAME/joweather-seasonal.log 2>&1

# يوميًا 00:20: خريطة الموقع
20 0 * * * /usr/local/bin/php /home/USERNAME/public_html/joweather/cron/generate_sitemap.php >> /home/USERNAME/joweather-sitemap.log 2>&1

تأكد من توقيت الخادم. إن كان UTC فاضبط وقت المهمة بما يعادل توقيت عمّان.

6

التحقق بعد الرفع

  1. شغّل php cron/refresh_weather.php. يجب أن ينتهي برمز خروج 0، وألا تظهر أي منطقة بحالة failed أو unhealthy.
  2. شغّل php cron/refresh_seasonal.php ثم php cron/generate_sitemap.php.
  3. افتح صفحة مراقبة الكاش من لوحة الإدارة، وتأكد أن جميع المواقع خضراء. استخدم زر «تحديث المواقع الناقصة والقديمة» إن ظهر أي صف قديم أو مفقود.
  4. افتح عمّان والعقبة وإربد وتأكد أن وقت القراءة قريب من الوقت الحالي، وأن 24 ساعة تبدأ من الساعة الحالية.
  5. افتح /robots.txt و/sitemap.xml وتأكد أن الروابط تستخدم الدومين الحقيقي.
  6. افحص الموقع من نافذة خاصة بلا إضافات متصفح حتى لا تتداخل الإضافات مع Lighthouse.
7

حل المشاكل الشائعة

خطأ 500 عند أول تشغيل

راجع سجل PHP. أكثر الأسباب شيوعًا: غياب pdo_sqlite، عدم قابلية مسار التخزين للكتابة، أو كلمة مرور مدير غير صالحة في التثبيت الجديد.

الرئيسية تعمل والروابط الفرعية 404

تأكد من رفع ملفات .htaccess المخفية، وتفعيل rewrite، وأن BASE_PATH يطابق المسار الحقيقي دون شرطة مائلة أخيرة.

الطقس لا يتحدث

افتح صفحة مراقبة الكاش في لوحة الإدارة أولًا؛ ستعرض كل موقع وعمر بياناته وآخر خطأ. ثم شغّل ملف الكرون يدويًا دون تحويل المخرجات إلى /dev/null. يحفظ السكربت ملخص التشغيل في storage/logs/weather-refresh-summary.json ويعيد رمز خروج غير صفري إذا بقي أي موقع غير سليم.

تعذر تسجيل الدخول بعد تغيير .env

تغيير ADMIN_PASSWORD لا يعدل مستخدمًا موجودًا. استخدم:

php bin/reset_admin.php --email=you@example.com --password='A-Strong-New-Password'
ترقية الموقع مع وجود قاعدة بيانات

لا تحذف القاعدة. أعد النسخة الاحتياطية عند الحاجة، ثم أعد رفع ملفات الكود فقط. الحزمة المعدلة لا تستبدل بيانات المستخدمين أو إعدادات الموقع.