الملفات

72 أسطر
3.3 KiB
Markdown

# نشر تطبيق ومراقبته على غيمة (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 دون تعديل الكود.