דלגו לתוכן

פריסת Docker

‏Docker Compose היא הדרך המומלצת להריץ את RedCloud על מארח יחיד.

ה-docker-compose.yml בשורש מגדיר ארבעה שירותים:

שירותתמונה / בנייהפורט מפורסם
postgrespostgres:16-alpine${DB_PORT:-5432}
redcloudבונה Dockerfile (backend + frontend)${PORT:-9900}
license-serverבונה Dockerfile.license${LICENSE_PORT:-7700}
schedulerבונה scheduler/Dockerfileאין

לכל שירות יש בדיקת בריאות (pg_isready,‏ curl /health,‏ curl /, ובדיקת תהליך ל-scheduler). נתונים קבועים משתמשים ב-volume בשם pgdata, פלט הסריקה ממופה מ-./out, ואישורי ענן ממופים בקריאה-בלבד מ-./credentials.

Terminal window
# 1. הגדרת סביבה
cp .env.example .env
# ערכו את .env — הגדירו HMAC_KEY, API_KEY, ENCRYPTION_KEY, DB_PASSWORD, רישיון וכו'.
# 2. אספקת אישורי ענן
mkdir -p credentials
# הניחו את מפתח ה-Service Account של GCP ב-credentials/sa-key.json
# 3. הפעלה
docker compose up -d
docker compose logs -f
# עצירה (שמירת נתונים):
docker compose down
# עצירה ומחיקת volume בסיס הנתונים:
docker compose down -v

פתחו http://<host>:9900 כשבדיקת הבריאות של redcloud עוברת.

  • Dockerfile — רב-שלבי: שלב node:20-alpine בונה את ה-frontend, שלב python:3.12-slim מתקין את gcloud CLI ותלויות Python, מעתיק את ה-frontend הבנוי לתיקיית ה-static של ה-backend, רץ כמשתמש redcloud שאינו root, חושף 9900, ומפעיל uvicorn api.app:app עם שני workers. פקודת ההפעלה מכבדת $PORT דינמי (כך שהיא רצה ב-Cloud Run ללא שינוי).
  • Dockerfile.production — וריאנט מוקשח שמהדר את Python ל-bytecode ושולח .pyc בלבד (ללא מקור). התנהגות הריצה זהה.
  • Dockerfile.license — שרת הרישוי העצמאי על 7700.
נקודת קצהמטרה
GET /healthLiveness (בשימוש בבדיקת הבריאות של הקונטיינר)
GET /health?deep=trueאבחון בסיס נתונים, דיסק, gcloud ועמדת אבטחה
GET /metricsמטריקות Prometheus
GET /api/versionsמידע גרסת API

גבו את PostgreSQL בתזמון (ה-runbook מציע cron לילי של backup.sh) ושחזרו עם סקריפט השחזור המצורף.