آخر تحديث 2026-07-15
النشر والبيئة
لمن هذه الصفحة
هذه الصفحة لمن ينشرون meridian. الزوار العاديون لا يحتاجون هذه الإعدادات. العرض التجريبي يعمل بـ OPENWEATHER_API_KEY فقط؛ الباقي stretch اختياري.
البيئة المطلوبة
OPENWEATHER_API_KEY — مطلوب للطقس وgeocode. DATABASE_PATH — ملف SQLite (افتراضي ./data/meridian.db)؛ حجم دائم في الإنتاج حتى تبقى الذاكرة والاشتراكات بعد إعادة التشغيل. NEXT_PUBLIC_SHOW_HOME_STRETCH=0 يخفي إعلان لوحة التحكم + Journal (مفعّل افتراضيًا). NEXT_PUBLIC_SHOW_DEMO_POPULAR_SEARCHES=0 يعطّل مدن البحث الشائع التجريبية عند فراغ API.
بيئة صورة البطل
UNSPLASH_ACCESS_KEY — اختياري؛ أول مزود صور لأبطال المواقع (خادم فقط، مخزّن في hero_image_cache). PEXELS_API_KEY — مزود ثالث اختياري بعد Unsplash وWikimedia Commons. NEXT_PUBLIC_CITY_HERO_OSM — اضبطه 0 لتعطيل ترويسة الخريطة الفضائية (مفعّل افتراضيًا). NEXT_PUBLIC_CITY_HERO_STREET_VIEW=1 — opt-in Google Street View عند إيقاف OSM. NEXT_PUBLIC_GOOGLE_MAPS_API_KEY — مفتاح Maps Embed API اختياري لإطارات Street View.
بيئة البريد
Multi-ESP عبر الموصل النشط في platform_settings (اختيار الإدارة): Resend (RESEND_API_KEY، RESEND_FROM_EMAIL)، SendGrid (SENDGRID_API_KEY، SENDGRID_FROM_EMAIL)، Amazon SES (AWS_ACCESS_KEY_ID، AWS_SECRET_ACCESS_KEY، AWS_SES_REGION، AWS_SES_FROM_EMAIL)، أو SMTP (SMTP_HOST، SMTP_PORT، SMTP_USER، SMTP_PASSWORD، SMTP_FROM_EMAIL، SMTP_SECURE). NEXT_PUBLIC_APP_URL — عنوان أساس لروابط إلغاء الاشتراك في البريد (مدرج في .env.example؛ مطلوب في الإنتاج).
Cron والإدارة
CRON_SECRET — Bearer لـ /api/cron/* (يُرفض عند unset في الإنتاج). ADMIN_SECRET — يوقّع cookie جلسة الإدارة ويشفّر أسرار الموصلات. ADMIN_PASSWORD — دخول root لـ ADMIN_EMAIL فقط. تجاوز dev فقط عند NODE_ENV=development وALLOW_DEV_ADMIN_BYPASS=1 وADMIN_SECRET unset. راجع docs/SECURITY.md. جدولة cron خارجيًا: weekly-digests (مثل صباح الاثنين)، weather-alerts (مثل كل 15–30 دقيقة).
بيئة AdSense
GOOGLE_ADSENSE_CLIENT_ID (ca-pub-…). GOOGLE_ADSENSE_SLOT_DASHBOARD وSLOT_HERO وSLOT_RECENT وSLOT_CITY_DETAIL وSLOT_DEFAULT — معرفات وحدات العرض. OAuth AdSense Management API: GOOGLE_ADSENSE_OAUTH_CLIENT_ID وGOOGLE_ADSENSE_OAUTH_CLIENT_SECRET وGOOGLE_ADSENSE_OAUTH_REDIRECT_URI اختياري (افتراضي ${NEXT_PUBLIC_APP_URL}/api/admin/adsense/oauth/callback). أبقِ معرف العميل في أسرار المضيف فقط. /ads.txt يُولَّد وقت التشغيل من معرف العميل.
بيئة Analytics
NEXT_PUBLIC_GA_MEASUREMENT_ID — محمّل GA4 اختياري عند تفعيل consent.analytics. NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION — وسم meta لـ Search Console.
سكربتات npm
dev وbuild وstart — Next.js. lint وtest وtest:watch وverify — بوابة الجودة (verify = lint + test + build). copy:icons — Meteocons إلى public (أيضًا postinstall). seed:checks — لقطات تجريبية North England. backfill:city-slugs — ملء city_slug على locations الموجودة. email — خادوم معاينة React Email. audit:deps — npm audit --omit=dev.
جداول SQLite
الطقس الأساسي: weather_snapshots وapi_call_log. المواقع والفحوص: locations وlocation_weather_checks وweather_observations وweather_forecast_archive. الاشتراكات: subscriptions وsubscription_send_log. المنصة: platform_settings (singleton). الأبطال: hero_image_cache. تحقيق الدخل: adsense_report_snapshots. Analytics: site_analytics_events. البريد/CMS: email_templates وcms_pages. الإدارة: admin_users وadmin_invites وadmin_password_resets وadmin_audit_log. المخطط في src/lib/db/index.js. الفتح الأول يزرع platform_settings بـ refresh 1h وstale 2h وحد يومي 1000 وsoft block 950 وwarning 800 وper-minute 60.
Middleware
src/middleware.js يعيد كتابة مضيف docs.localhost إلى /docs لنطاق الوثائق المحلي. لا middleware مصادقة على مسارات التطبيق الرئيسية.
مفاتيح تخزين المتصفح
من storage-keys.js: meridian:client-id وmeridian:saved-cities وmeridian:checked-cities وmeridian:user-location وmeridian:weather-cache وmeridian:theme وmeridian:cookie-consent وmeridian:subscriptions وmeridian:tier (محجوز) وmeridian:consent وmeridian:accessibility وmeridian:city-detail-accordion وmeridian:temperature-unit وmeridian:preferred-locale وmeridian:weather-refresh-mode. sessionStorage meridian_analytics_sid — معرف جلسة analytics من الطرف الأول. cookie الإدارة meridian_admin_session (HttpOnly، يضبطه الخادم). حدث مخصص meridian:storage يزامن hooks بعد الكتابة.