מדריך פריסה
מערכת BT Management מתוכננת לפריסה מלאה באמצעות Docker Containers. כל השירותים מתוזמרים דרך docker-compose.yml.
סטאק תשתית
שירותים עיקריים
המערכת כוללת את השירותים הבאים:
- server-nest: שרת Backend ראשי (Node.js 20, NestJS).
- client: לוח בקרת React (מבנה סטטי מוגש דרך Nginx).
- mongodb: מסד נתונים ראשי (MongoDB v6.0).
- redis: מטמון ו-Pub/Sub (Redis v7.0).
- mosquitto: Broker MQTT לתקשורת מכשירים (Eclipse Mosquitto v2.0).
- nginx-proxy: Reverse Proxy לניהול SSL וניתוב (פורטים 80/443).
- monitoring: סטאק Grafana + Prometheus לניטור מערכת.
דרישות מערכת
חומרה מינימלית (למערכת בינונית)
- CPU: 4 ליבות (מומלץ 8).
- RAM: 8GB (מומלץ 16GB).
- Storage: 50GB (SSD מומלץ).
- Network: חיבור אינטרנט יציב עם פס רוחב סביר.
תוכנה
- Docker Engine: גרסה 20+ (הוראות התקנה).
- Docker Compose: גרסה 2.0+ (בדרך כלל נכלל עם Docker Desktop).
- Git: לשכפול הקוד.
שלבי הפריסה
1. שכפול הקוד
git clone https://github.com/bt-management/Project-BTmanegment.git
cd Project-BTmanegment
2. הגדרת משתני סביבה
העתק את קובץ הדוגמה ליצירת .env:
cp .env.example .env
ערוך את הקובץ והגדר את המשתנים הבאים:
# MongoDB
MONGO_ROOT_PASSWORD=your_strong_password
# Redis
REDIS_PASSWORD=your_redis_password
# JWT
JWT_SECRET=your_jwt_secret_key_minimum_32_chars
# MQTT
MQTT_USERNAME=mqtt_user
MQTT_PASSWORD=mqtt_password
# Grafana
GRAFANA_ADMIN_PASSWORD=grafana_admin_pass
# Cloudinary (להעלאת תמונות)
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
3. בנייה והרצה
docker-compose up -d --build
פקודה זו תבנה את כל התמונות (Images) ותעלה את כל הקונטיינרים ברקע.
4. בדיקת סטטוס השירותים
docker-compose ps
וודא שכל השירותים במצב Up (פעילים).
5. גישה למערכת
- Admin Dashboard (Client):
http://localhostאוhttps://your-domain.com - API Swagger:
http://localhost:5000/api/docs - Grafana Monitoring:
http://localhost:3000(שם משתמש:admin, סיסמה:GRAFANA_ADMIN_PASSWORD) - Prometheus:
http://localhost:9090
פריסה ב-Railway
לצורך אתרי התיעוד במיוחד, אנו משתמשים ב-Railway.
אתר התיעוד הציבורי (Public Docs)
מופץ כאתר סטטי (build output):
- הרץ
npm run buildבתיקייתdocs/public. - העלה את תיקיית ה-
build/ל-Railway כשירות סטטי.
אתר התיעוד הפנימי (Internal Docs)
מופץ כקונטיינר Docker עם אימות Basic Auth:
- השתמש ב-
docs/internal/deploy/Dockerfile. - הדוקרפייל כולל Nginx עם הגנת סיסמה.
- הגדר משתני סביבה ב-Railway:
BASIC_AUTH_USER: שם משתמש.BASIC_AUTH_PASS: סיסמה (מוצפנת ב-htpasswd).
משתני סביבה חיוניים לייצור
| משתנה | תיאור | דוגמה |
|---|---|---|
DATABASE_URL | מחרוזת חיבור MongoDB | mongodb://user:pass@host:27017/bt?authSource=admin |
REDIS_URL | מחרוזת חיבור Redis | redis://:password@host:6380 |
JWT_SECRET | מפתח חתימה לטוקנים | supersecretkey123456789 |
MQTT_BROKER_URL | כתובת פנימית של ה-Broker | mqtt://mosquitto:1883 |
CLOUDINARY_* | פרטי API של Cloudinary להעלאות | (מתקבל מ-Cloudinary Dashboard) |
NODE_ENV | סביבת הרצה | production |
גיבוי ושחזור
גיבוי אוטומטי
הגיבויים רצים יומית באופן אוטומטי:
- מסד נתונים:
mongodumpרץ בקונטיינר של cron job (או על ידי תסריט בשרת). - קונפיגורציה: הגדרות המערכת מיוצאות ל-JSON בתיקייה
server-nest/backups/.
גיבויים נשמרים בתיקייה: server-nest/backups/automated/.
שחזור ידני
# עבור MongoDB
docker exec -i mongodb mongorestore --uri="mongodb://root:PASS@localhost:27017" /path/to/backup
# עבור הגדרות
# העתק את קובץ ה-JSON חזרה לתיקייה והשתמש בממשק הניהול לייבוא.
עדכוני מערכת
עדכון שרת
-
משוך את הקוד העדכני:
git pull origin main -
בנה מחדש את הקונטיינרים:
docker-compose up -d --build server-nest
עדכון Client
docker-compose up -d --build client
עדכון מלא
docker-compose down
git pull origin main
docker-compose up -d --build
ניטור וביצועים
Grafana Dashboards
הגישה ל-Grafana ב-http://localhost:3000 ויש לך לוחות מחוונים מוכנים:
- System Overview: מצב כללי של השרת (CPU, RAM, Network).
- Device Metrics: סטטיסטיקות על מכשירים מחוברים.
- MQTT Traffic: נפח הודעות MQTT וזמני תגובה.
Prometheus Metrics
Prometheus אוסף מדדים מהשרת. ניתן לגשת אליו ב-http://localhost:9090.
דוגמאות לשאילתות:
process_cpu_seconds_total: זמן CPU שנצרך על ידי התהליך.http_requests_total: מספר בקשות HTTP.mqtt_messages_received_total: הודעות MQTT שנתקבלו.
פתרון תקלות
קונטיינר לא עולה
בדוק לוגים:
docker-compose logs -f server-nest
MongoDB לא נגיש
וודא שהקונטיינר פעיל:
docker ps | grep mongodb
אם הוא לא פעיל, הרץ:
docker-compose up -d mongodb
MQTT Broker לא פעיל
בדוק את הקונטיינר:
docker-compose logs mosquitto
וודא שפורט 1883 פתוח ב-Firewall.
אבטחה
SSL/TLS
ה-Nginx Proxy מטפל ב-SSL. השתמש ב-Let's Encrypt ליצירת תעודות בחינם:
-
התקן
certbot:sudo apt-get install certbot -
יצר תעודה:
sudo certbot certonly --standalone -d your-domain.com -
עדכן את תצורת Nginx להצביע על התעודות (
nginx/nginx.conf).
Firewall
וודא שרק הפורטים הדרושים פתוחים:
- 80: HTTP (redirect ל-HTTPS).
- 443: HTTPS.
- 1883: MQTT (רק לרשת פנימית, אם אפשר).
- 9001: MQTT WebSockets (אם נדרש).
עדכונים
עדכן באופן קבוע את Docker Images לגרסאות האחרונות:
docker-compose pull
docker-compose up -d --build
תמיכה
במקרה של בעיות:
- בדוק את תיעוד הפרויקט ב-GitHub.
- צור Issue בעמוד הפרויקט.
- צור קשר עם צוות הפיתוח.