GH GambleHub

טכנולוגיות ותשתיות * Docker Compose and Dev Environment

Docker Compose and Dev Environment

1) מדוע להרכיב

Docker Compose היא דרך מהירה להעלות העתק של ערימת הייצור בלוקלס/CI: יישומים, בסיסי נתונים, תורים, מטמונים, פרוקסי הפוך, שירותי ioc. מטרות:
  • זוגיות עם מכירות (תמונות, משתנים, רשתות) = פחות ”עובד בשבילי”.
  • התחלה מהירה למתחילים ”איפור” אל הקרב.
  • דוכנים מבודדים לכל מפתח/ענף * עבודה מקבילה ללא קונפליקטים.
  • בדיקות אינטגרציה על תלויות אמיתיות.

2) מבנה מאגר בסיסי


project/
docker/
app/# Dockerfile, web/# Nginx/Traefik scripts and seed/# siders/compose fixes. yaml # common base stack compose. override. yaml # local overrides (v.gitignore)
compose. ci. yaml # for CI
.env. example # environment template
Makefile # convenient goals devcontainer. json # VS Code Dev Containers (optional)
המלצות:
  • Compose. yaml - מתאר את ”השלד” (שירותים, רשתות, כרכים) זהה עבור Dev/CI.
  • עריכה מקומית בלבד: מפות ספריות, נמלים, דגלי מנופים.
  • .Env. לדוגמה, המפתחת מעתיקה ל- ”env” ומחליפה את הערכים.

3) הלחנת מסגרת. yaml (דוגמה)

yaml name: project services:
gateway:
image: traefik:v3 command:
- "--providers. docker=true"
- "--entrypoints. web. address=:80"
- "--entrypoints. websecure. address=:443"
- "--certificatesresolvers. dev. acme. tlschallenge=true"
ports: ["80:80", "443:443"]
volumes:
- /var/run/docker. sock:/var/run/docker. sock:ro networks: [edge, core]

api:
build:
context:.
dockerfile: docker/app/Dockerfile target: dev env_file: [.env]
command:./scripts/dev-start. sh volumes:
-./:/app:cached depends_on: [db, redis, kafka]
labels:
- "traefik. http. routers. api. rule=Host(`${API_HOST}`)"
- "traefik. http. services. api. loadbalancer. server. port=8080"
networks: [core]

db:
image: postgres:16 environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASS}
POSTGRES_DB: ${DB_NAME}
volumes:
- pgdata:/var/lib/postgresql/data healthcheck: {test: ["CMD-SHELL","pg_isready -U $$POSTGRES_USER"], interval: 5s, timeout: 3s, retries: 20}
networks: [core]

redis:
image: redis:7 command: ["redis-server","--appendonly","yes"]
volumes: [ "redisdata:/data" ]
networks: [core]

kafka:
image: bitnami/kafka:3 environment:
KAFKA_ENABLE_KRAFT: "yes"
KAFKA_CFG_PROCESS_ROLES: "controller,broker"
KAFKA_CFG_NODE_ID: 1
KAFKA_CFG_LISTENERS: PLAINTEXT://:9092
KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092 networks: [core]

mailhog:
image: mailhog/mailhog ports: ["8025:8025"]
networks: [core]

mock-psp:
image: wiremock/wiremock:3 command: ["--verbose","--global-response-templating"]
volumes: ["./docker/mocks/psp:/home/wiremock"]
labels:
- "traefik. http. routers. mockpsp. rule=Host(`${PSP_HOST}`)"
networks: [core]

volumes:
pgdata: {}
redisdata: {}

networks:
edge: {}
core: {}
נקודות מפתח:
  • TRAEFIK/NGINX כשער כניסה: מקרב את מערך הניתוב למכירות.
  • צ 'ק בריא depends_on בתנוחה: service_healthy' (ב-v3 באמצעות תסריטי המתנה) - התחלה מסודרת.
  • כרכים להתמדה (DB/cache) וקוד (hot-reload).

4) פרופילים וקבצים מרובים

פרופילים (”פרופילים: [ dev, ci, extras ]”) כוללים שירותי docker compose - profile up - d'.

קבצים מרובים:
  • 'Docker Compose - f Compose. הלחנה yaml-f. דב. מתמזגים בתצורות.
סט טיפוסי:
  • 'Compose. יאמל הוא בסיסי.
  • 'Compose. דב. יאמל - קשירות, חובות, פישפלאגים.
  • 'Compose. ניצבים. Yaml' - אינסטרומנטלי (Grafana, FirgAdmin, Kafdrop).
  • 'Compose. מודיע. ”ראש בלי גרפיקה”, בלי קשרים.

5) משתנים, סודות והגדרות

מקור משותף למשתנים: פונדקאים, קרדיטים לבסיס הנתונים, דגלים.

אנחנו לא שומרים סודות בדב במפורש; אנחנו משתמשים:
  • סודות דמה מקומיים (מפתחות יתדות),
  • אינטגרציה עם כספת רזה/סופרים עבור רגיש במיוחד.
  • עיקרון: מידע נדרש מינימלי. PAN/PII - אסימונים/תיקונים.

6) כינוסים ומהירות

6. 1 ערכת ריבוי שלבים + StreamComment

Dockerfile עם מטרות 'base', 'dev', 'prod'; שכבת מטמון משותפת לתלות.
כלל ערכת צילום: ”DOCKER _ BUILDKIT = 1” (או בהגדרה).
מטמון: '- ספירה = סוג מטמון, מטרה =/שורש/מטמון/...' עבור pip/npm/maven.

6. 2 מחזור מהיר

Mondemon, uvicorn-reload, Spring Devtools).
יעד dev נפרד עם הרכבה של רק אחד רצוי.
Makefile = ”להשלים”, ”לעשות למטה”, ”לעשות בולי עץ”, ”לבנות מחדש”, ”לעשות זרעים”.

Makefile דוגמה:
make
ENV?= dev up:
docker compose --profile $(ENV) up -d down:
docker compose down -v logs:
docker compose logs -f --tail=200 rebuild:
DOCKER_BUILDKIT=1 docker compose build --pull --no-cache api seed:
docker compose run --rm api./scripts/seed. sh migrate:
docker compose run --rm api./scripts/migrate. sh test:
docker compose -f compose. yaml -f compose. ci. yaml run --rm api./scripts/test. sh

7) DB, נדידה, ציפוי

נדודים (Flyway/Liquibase/Alembic/Prisma) מושקים על ידי תסריט וו לאחר תחילת 'db' (מחכה לצ 'ק בריא).
ציפוי: מיכל 'זרע' נפרד עם אבזרים; חוזר על עצמו וחסר אונים.
תצלומי נתונים: נפח ה- ”pgdata” ניתן לאתחל/לשחזר עם ”repet-db script”. sh '.

8) ברוקרים, מטמונים, המרכז לבקרת מחלות

קפקא/ארנב/רדפנדה - כמו בתצורה (מינימלית).
Redis עם AOF כלול לריאליזם.
חיבורי CDC (אופציונלי): Debezium בשירות נפרד לבדיקות אינטגרציה אנליטית.

9) לועג לספק חיצוני

SarlDock/Prism עבור REST, MockServer עבור תרחישים מורכבים.
Mailhog/SMTP4Dev למכתבים.
LocalStack/MINLO לחנויות ענן ותאימות S3.
פוליטיקה: כל ה ־ PSP/KYC/KMS החיצוני - דרך המוקד המדומה תחת חוזים (OpenAPI), ולא דרך ”באינטרנט”.

10) מתווך הפוך ו ־ TLS

Traefik/NGINX מפיצה שירותים לתחומים מקומיים (".test'," .local "):
  • 'אפי. מקומי. מבחן, 'mockpsp. מקומי. מבחן ".
  • מקרט להנפיק תעודה מקומית אמינה לבדיקת HSTS/עוגיות מאובטחות.
  • תדליק פגישות דביקות רק למקרים שבהם זה באמת חשוב.

11) פרופילי מפתח: Node/Python/Java

צומת: mount 'node _ modules' כמטמון (נפח) כדי להאיץ את ההתקנה; ”CHOKIDAR _ USEPOLLING = 1” על חלונות/WSL.
פייתון: ”פיפ מטמון” נפח, ”watchfiles ”/” uvicorn' - לטעון”.
Java: SIMBEL/Devtools, "mvn - T 1C - O '+ שכבה עם תלויות.

12) בדיקות ואיכות

מבחני אינטגרציה מתחרים בתוך רשת Compose: "docker compose run test'.
Testcontainers (ראשי תיבות של JVM/Node/Python/.NET) היא אפשרות טובה לאינטגרציה של יחידות ללא ערימה מלאה.
בדיקות חוזה עם מרכז הדמה של השער מס '2 במודיעה.
לינטרס/התחייבות מראש: לרוץ במיכל ליכולת חזרה.

13) משתמטים ו ”IDE-as-code”

'Devcontainer. ג 'סון מתקן את התמונה של המפתחת (CLI, SDK, linters), בונה את הפרויקט, מפעיל את' post CareCound'.
רווח: אותם כלים, לא ”לסתום” המארח, המכונה החדשה מוכנה בדקות.

14) ביטחון בדב

ללא שורש בתמונות יישומים; ”לקרוא מערכת קבצים” כאשר זה אפשרי.
אין מפתחות קרב/סודות, אפילו באופן זמני.
יומנים - ללא PII/PAN; מסווה ברמת הפורמט.
הפרדת יציאה ורשת: גישה חיצונית דרך שער בלבד.

15) FinOps/Performation in locale

להגביל משאבים: "לפרוס. משאבים. גבולות '(Compose קורא באופן חלקי, אבל עוזר משמעת).
הפחתת מאוורר (פחות שירותי ברירת מחדל; ניצבים - פרופילים).
מטמון קיט ומטמונים נפחים עבור מנהלי החבילות.

16) Compose CI

השתמש באותו הלחנה. yaml' + "להלחין. מודיע. יאמל 'בלי לקשור רכבות.
פנקסי תלות הם כמו כרכים מצורפים בין עבודות/שכבות.
דקירות מקבילות: 'שם:' בקומפוזיציה שונה (או קידומת על ידי ענף) כך שהיציעים לא מתנגשים.

17) הצגת טרנספר

דוקר מחבר אבחון בסיסי.
בדוק DNS ברשת Compose (שירות לפי שם).
אם מאגד-מאונט ”מאט” על MacOS/Windows': 'cashed '/':' Mutagen 'או Mutagen/virtiops.
צ 'ק בריא הוא ”ירוק”, אבל השירות הוא ”מת”: בדוק את ”מוכנות” של אופקה שלך ואת סדר הנדודים.

18) רשימת מימושים

1. ערימת בסיס (שער, api, db, מטמון, תור) בהרכבה. יאמל.
2. עריכה מקומית - בעקיפה (v.gitignore).
3. env. דוגמה מלאה ועכשווית; 'Make bootstrap' מעתיק אותו ל '.
4. צ 'קים בריאים ותסריט המתנה/מסד נתונים.
5. SarlMock/LocalStack/MINLO עבור ספקים חיצוניים.
6. ציפוי ונדידה כמו "לעשות זרעים/לנדוד 'cmdlets.
7. ערכת ריבוי שלבים, מטמון תלות.
8. משחיתים/Makefile להתחלה מהירה.
9. 'תוספות' פרופילים לכלים (Grafana/FirgAdmin/Kafdrop).
10. CI משתמש באותה קומפוזיציה (+ ci-overlide).

19) אנטי דפוסים

”קומפוזיציה מפלצתית” עבור 40 שירותים, תמיד פועל: להפעיל פרופילים.
נמלים קשיחים שסוכסכים בין מפתחים.
סודות/מפתחות בג 'יט או'. דוגמא ".
תלות ב ”אינטרנט” למבחנים (PSP/KYC אמיתי).
היעדר צ 'ק בריא/ציפייה - נדידה והתחלת גזעים.
אין בדיקות אינטגרציה מקושקשות.

20) השורה התחתונה

חיבור הוא המנוע של מהירות הפיתוח: קובץ אחד מתאר את עולם השירותים שלכם, ופרופילים/מעקפים נותנים גמישות. לשמור על זוגיות עם מכירות, ציפוי אוטומטי ונדידה, לשמור על מוקי ו-TLS ”כמו בקרב”, להאיץ את בניית Streefice Kit - ויש לך סביבה מקומית שבה נוח לעבוד, קל לבחון ולשכפל בבטחה את תרחישי המכירות של iGaming/fintech.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.