Cloud, Docker ו-DevOps — פריסה מהירה ואמינה
אנו עוטפים את כל האפליקציות בקונטיינרים של Docker, מתזמרים אותן עם Docker Compose (או Kubernetes לפרויקטי enterprise), מגדירים את Caddy כ-reverse proxy עם SSL אוטומטי ומאטמטים את כל מחזור הפריסה דרך GitHub Actions — מ-commit ועד פרודקשן.
קונטיינריזציה עם Docker ו-Docker Compose
לכל שירות יש Dockerfile משלו בשלבים (multi-stage): שלב build שמתקין תלויות ומקמפל, ושלב סופי מינימלי (distroless או alpine) שמכיל רק את הארטיפקטים הנחוצים. image טיפוסי של Next.js יוצא קטן מ-150MB, ושל FastAPI קטן מ-80MB. ה-images נבנים מחדש בכל מיזוג ל-main ומתויגים סמנטית (`v1.2.3` + `latest`).
Docker Compose מגדיר את כל הסטאק: פרונטאנד, API, DB, Redis, worker. משתנים רגישים (סיסמת DB, מפתחות API, סוד Stripe) נמצאים ב-`.env` שאינו נכנס ל-git — לעולם לא מוטמעים ב-image. Health checks ב-Compose מבטיחים שהתלויות מוכנות לפני ההפעלה (DB מוכן → הפעלת API → הפעלת הפרונטאנד).
- Build cache עם `--mount=type=cache` — לשימוש חוזר בתלויות ב-CI
- סדר שכבות מותאם: תלויות יציבות → קוד מקור
- ניהול סודות עם Docker secrets או HashiCorp Vault בפרויקטי enterprise
- `restart: unless-stopped` + `docker compose up --no-deps` לפריסה אטומית
Caddy — reverse proxy מודרני עם SSL אוטומטי
Caddy 2.8 מנהל SSL/TLS אוטומטית דרך ACME (Let's Encrypt או ZeroSSL) — בלי תעודות שפג תוקפן ובלי קונפיגורציה ידנית. HTTP/2 ו-HTTP/3 (QUIC) מופעלים כברירת מחדל. Security headers (HSTS, X-Frame-Options, CSP) מוגדרים גלובלית דרך snippets לשימוש חוזר. קונפיגורציית Caddyfile הדקלרטיבית ניתנת ל-diff ומנוהלת בגרסאות ב-git.
Rate limiting, דחיסת gzip/brotli ולוגים מובנים ב-JSON מופעלים דרך הוראות Caddy מובנות — בלי מודולים של nginx או קונפיגורציית Apache מורכבת. גישה לנתיבים רגישים (`/admin`, `.env`, `.git`) מחזירה 444 (בלי תגובה), כ-snippet אבטחה גלובלי.
- TLS 1.3 בלבד עם cipher suites מודרניים
- On-demand TLS ל-SaaS מרובה דיירים עם תת-דומיינים דינמיים
- Reload — `caddy reload` לא מפסיק חיבורים פעילים
- Caddy logging → Loki → Grafana — ניתוח תעבורה והתראות על חריגות
CI/CD ב-GitHub Actions ומוניטורינג
צינור ה-CI רץ בכל PR: lint, type check, בדיקות יחידה, בניית Docker image וסריקת פגיעויות (Trivy). אם הכול עובר, ה-image נדחף ל-registry והפריסה ל-staging מתבצעת אוטומטית. מיזוג ל-main = פריסה אוטומטית לפרודקשן עם healthcheck אחרי הפריסה. Rollback אוטומטי אם ה-healthcheck נכשל תוך 60 שניות.
מוניטורינג עם Grafana + Prometheus למדדי אפליקציה (השהיה, שיעור שגיאות, גודל תור) ו-Loki לאגרגציית לוגים. התראות מוגדרות ל-Slack/אימייל: שיעור שגיאות >1%, השהיית P95 >500ms, דיסק >85%. מוניטורינג uptime חיצוני עם Better Uptime — דשבורד SLA ציבורי זמין לפי בקשה.
- סריקת פגיעויות Trivy על images — חסימה ב-CVE קריטי
- Dependabot + auto-merge לעדכוני patch (נדרש CI ירוק)
- גיבוי DB אוטומטי לאחסון תואם S3 (מדי לילה, שמירה ל-30 יום)
יתרונות וחסרונות
יתרונות
- פריסה עם rollback אוטומטי כשה-healthcheck נכשל.
- SSL/TLS אוטומטי דרך Caddy — בלי תעודות שפג תוקפן ידנית.
- סביבה ניתנת לשחזור: אותו Docker image ב-dev, ב-staging ובפרודקשן.
- מוניטורינג והתראות (Grafana, Loki) — רואים בעיות לפני המשתמשים.
מגבלות
- Docker Compose לא מסתקל כמו Kubernetes בסביבת enterprise מרובת צמתים.
- הקמה ראשונית של CI/CD דורשת זמן ומומחיות DevOps.
- images ולוגים צורכים שטח דיסק — נדרש ניקוי תקופתי.
- מוניטורינג מלא (Prometheus + Grafana) מוסיף שירותים לתחזוקה.
סיכום קצר
Docker + Caddy + GitHub Actions הוא הקומבינציה האידיאלית לפריסה אמינה על VPS או על מספר צמתים. לעשרות צמתים עם auto-scaling אגרסיבי, עוברים ל-Kubernetes.
טבלת מפרט
| יכולת | מגבלה / סף | שימוש טיפוסי | |
|---|---|---|---|
| תזמור | Docker Compose, כל הסטאק | צומת יחיד; ריבוי צמתים דורש Swarm/K8s | VPS, פרויקטים קטנים עד בינוניים |
| Reverse proxy | Caddy 2.8, HTTP/3, SSL אוטומטי | כללים מורכבים מאוד דורשים קונפיגורציה מורחבת | ריבוי דומיינים, ריבוי דיירים |
| CI/CD | GitHub Actions, פריסה אוטומטית | דקות CI מחויבות מעבר למסגרת החינמית | מ-commit לפרודקשן אוטומטית |
| עלות טיפוסית | VPS מ-~€5 לחודש | מוניטורינג + גיבוי מוסיפים עלות | מאתר בודד ועד ריבוי מותגים |
Docker Compose לעומת Kubernetes
| קריטריון | Docker Compose | Kubernetes |
|---|---|---|
| מורכבות הקמה | נמוכה | גבוהה |
| ריבוי צמתים / auto-scaling | מוגבל (צומת אחד) | מצוין |
| הטוב ביותר עבור | VPS, פרויקטים קטנים עד בינוניים | צי גדול, enterprise |
שאלות נפוצות
למה Caddy ולא Nginx?
Caddy מנהל SSL/TLS אוטומטית דרך ACME, מפעיל HTTP/2 ו-HTTP/3 כברירת מחדל ויש לו קונפיגורציה דקלרטיבית קצרה. Nginx דורש certbot וקונפיגורציה ידנית רבה יותר לאותה תוצאה.
האם צריך Kubernetes?
לא ברוב האתרים. Docker Compose על VPS מטפל באתר או במספר שירותים באמינות. Kubernetes הופך שימושי רק בעשרות צמתים עם auto-scaling אגרסיבי.
איך עובדת פריסה לצד הגרסה הקיימת?
GitHub Actions בונה image חדש, מפעיל אותו לצד הישן, מריץ healthcheck ואז מעביר את התעבורה. אם ה-healthcheck נכשל תוך 60 שניות, מתבצע rollback אוטומטי לגרסה הקודמת.
איזה מוניטורינג אתם ממליצים?
Grafana + Prometheus למדדים (השהיה, שיעור שגיאות) ו-Loki ללוגים מאוגדים, עם התראות ב-Slack/אימייל. ל-uptime חיצוני אנו מוסיפים שירות עצמאי כמו Better Uptime.