# نشر تطبيق ومراقبته على غيمة (Ghaymah Containers) حل كامل لنشر واجهة برمجية (API) بسيطة على منصة الحاويات في `ghaymah.systems`، مع سكربت مراقبة ولوحة تحكم مباشرة. ## محتويات المشروع ``` . ├── Dockerfile ├── requirements.txt ├── .dockerignore ├── .ghaymah.json ├── app/ │ └── main.py # تطبيق Flask + /health + /metrics ├── demo/ ├── health-check.sh # سكربت مراقبة بلغة bash (فحص كل 30 ثانية) ├── health-check.py └── dashboard.html # لوحة مراقبة (HTML/CSS/JS) تعمل من المتصفح مباشرة ``` ## 1) بناء واختبار الصورة محليًا ```bash docker build -t sample-api:latest . docker run --rm -p 8080:8080 sample-api:latest # في نافذة أخرى curl http://localhost:8080/health curl http://localhost:8080/metrics ``` ## 2) تشغيل سكربت المراقبة بعد النشر، شغّل سكربت المراقبة موجّهًا إلى الرابط العام للتطبيق: ```bash # Python (الخيار الموصى به) python health-check.py --url https://sample-api-xxxx.ghaymah.systems --interval 30 # أو bash chmod +x health-check.sh ./health-check.sh https://sample-api-xxxx.ghaymah.systems 30 ``` السكربت يقوم بـ: - فحص `/health` كل 30 ثانية. - تسجيل الحالة وزمن الاستجابة في `monitor.log`. - كتابة آخر نتيجة في `status.json`. - إطلاق تنبيه (`ALERT`) في السجل بعد 3 فحوصات فاشلة متتالية. يمكن تشغيله كخدمة نظام دائمة (systemd) أو كحاوية منفصلة (sidecar) بجانب التطبيق نفسه. ## 3) لوحة المراقبة (Dashboard) افتح `dashboard.html` مباشرة في المتصفح (لا يحتاج خادمًا، ملف ثابت واحد): 1. أدخل الرابط العام للتطبيق في حقل الاتصال، مثل: `https://sample-api-xxxx.ghaymah.systems` 2. اضغط **اتصال**. تعرض اللوحة: - **الحالة**: مؤشر أخضر (يعمل) / أحمر (متوقف)، مع نبض حي عند التشغيل السليم. - **زمن الاستجابة**: آخر قيمة + رسم بياني لآخر 30 قراءة. - **عدد الطلبات**: القيمة الإجمالية القادمة من `/metrics`. - **مدة التشغيل** وسجل مباشر لكل عملية فحص. اللوحة تستدعي `/metrics` كل 5 ثوانٍ عبر `fetch()` مباشرة من المتصفح؛ التطبيق (`main.py`) يضيف ترويسة `Access-Control-Allow-Origin: *` لذلك لا حاجة لخادم وسيط. ## 4) ملاحظات إنتاجية (Production Notes) - التطبيق يعمل بمستخدم غير جذري (`non-root user`) داخل الحاوية. - يُستخدم `gunicorn` كخادم WSGI إنتاجي بدلاً من خادم التطوير المدمج في Flask. - `HEALTHCHECK` مضمّن في الـ Dockerfile نفسه، بالإضافة إلى فحص خارجي (`health-check.py`) — طبقتا مراقبة مستقلتان. - للتوسع: يمكن رفع عدد النسخ (replicas) من إعدادات الخدمة في Ghaymah دون تعديل الكود.