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 конфиги seed/      # сидеры/фикстуры compose.yaml       # общий базовый стек compose.override.yaml   # локальные оверрайды (в.gitignore)
compose.ci.yaml      # для CI
.env.example       # шаблон окружения
Makefile         # удобные цели devcontainer.json     # VS Code Dev Containers (опционально)
التوصيات:
  • (). يام - يصف «الهيكل العظمي» (الخدمات والشبكات والأحجام) نفسه بالنسبة للتطوير/CI.
  • تجاوز - التعديلات المحلية فقط: خرائط الدليل، الموانئ، أعلام التنقية.
  • . على سبيل المثال → يقوم المطور بنسخ «.env» ويحل محل القيم.

3) تكوين الإطار. يامل (مثال)

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 كبوابة: يقرب مخطط التوجيه من مخطط المبيعات.
  • Healthcheck and depends_on with 'condition: service_healthy' (in v3 عبر نصوص الانتظار) - بداية منظمة.
  • أحجام الثبات (DB/cache) و bind-mount for code (hot-reload).

4) ملامح وملفات متعددة

الملفات الشخصية ('profiles: [dev, ci, extras]') تشمل/تستبعد الخدمات ('docker compose - profile extras up -d').

ملفات متعددة:
  • "docker compose -f compose. yaml-f compose. dev. yaml up - دمج التكوينات.
المجموعة النموذجية:
  • 'اقترح. يامل هو الأساسي.
  • 'اقترح. dev. yaml' - bind-mounts، debags، phicheflags.
  • 'اقترح. إضافات. yaml' - آلات (Grafana، pgAdmin، Kafdrop).
  • 'اقترح. ci. yaml' - «رأس بدون رسومات»، بدون ربط التماثيل.

5) المتغيرات والأسرار والإعدادات

.env - المصدر المشترك للمتغيرات: المضيفون، أرصدة قاعدة بيانات الاختبار، الأعلام.

نحن لا نحتفظ بالأسرار في التطوير صراحة ؛ نستخدم:
  • الأسرار الوهمية المحلية (مفاتيح الكعب)،
  • التكامل مع القبو النحيف/السوبس لمزيد من الحساسية.
  • المبدأ: الحد الأدنى من البيانات المطلوبة. PAN/PII - الرموز/الإصلاحات.

6) التجمعات والسرعة

6. 1 متعدد المراحل + BuildKit

Dockerfile with targets' base ',' dev ',' prod'; طبقة مخبأ مشتركة للتبعيات.
قم بتضمين BuildKit: «DOCKER _ BUILDKIT = 1» (أو في كونفيج).
Caching: '-mount = type = cache، target =/root/.cache/...' for pip/npm/maven.

6. 2 دورة سريعة

Bind-mount кода + hot-reload (nodemon، uvicorn - reload، Spring Devtools).
هدف تطوير منفصل بتجميع واحد فقط من المرغوب فيه.
Makefile цели: «make up»، «make down'،» make lows'، «make logs'،» make logs «،» make rebuild'، «make seed».

مثال 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» بنص «reset-db». sh '.


8) الوسطاء، كاش، مركز السيطرة على الأمراض

Kafka/Rabbit/Redpanda - كما هو الحال في prod (الحد الأدنى من التكوينات).
تم تضمين Redis مع AOF للواقعية.
موصلات CDC (اختياري): Debezium في خدمة منفصلة لاختبارات تحليلات التكامل.


9) سخرية المورد الخارجي

WireMock/Prism for REST، MockServer للسيناريوهات المعقدة.

Mailhog/SMTP4Dev للرسائل

Localstack/MinIO للمتاجر السحابية وتوافق S3.
السياسة: جميع PSP/KYC/KMS الخارجية - من خلال المركز الوهمي بموجب العقود (OpenAPI)، وليس «على الإنترنت».


10) الوكيل العكسي و TLS

توزع Traefik/NGINX الخدمات على المجالات المحلية (".test' و" .local "):
  • 'api. المحلية. اختبار '،' mockpsp. المحلية. '.
  • TLS: mkcert لإصدار شهادة محلية موثوقة لاختبار HSTS/ملفات تعريف الارتباط الآمنة.
  • قم بتشغيل الجلسات اللاصقة فقط للحالات التي تكون فيها مهمة حقًا.

11) ملفات تعريف المطورين: عقدة/بايثون/جاوة

العقدة: تركيب 'العقدة _ الوحدات' كذاكرة تخزين مؤقت (حجم) لتسريع التركيب ؛ «CHOKIDAR _ USEPOLLING = 1» على Windows/WSL.
Python: "pip cache" как volume، "watchfiles "/" uvicorn -reload'.
جافا: JRebel/Devtools، 'mvn -T 1C -o' + طبقة ذات تبعيات.


12) الاختبارات والجودة

سباق اختبارات التكامل داخل شبكة Compose: «يقوم docker بتأليف اختبار التشغيل».
Testcontainers (لـ JVM/Node/Python/.NET) هو خيار جيد لتكامل الوحدة بدون كومة كاملة.
اختبارات العقد مع المحور الوهمي للبوابة → في CI.
الخطوط/الالتزام المسبق: تشغيل في حاوية للتكرار.


13) Devcontainers و «IDE-as-code»

'devcontainer. يصلح json صورة المطور (CLI، SDK، البطانات)، ويصعد المشروع، ويدير "PostCreateCommand'.
الربح: نفس الأدوات، لا «تسد» المضيف، الآلة الجديدة جاهزة في دقائق.


14) الأمن في التطوير

بدون جذور في صور التطبيق ؛ "ReadOnlyRootFilesystem' عندما يكون ذلك ممكنًا.
لا مفاتيح معركة/أسرار، حتى مؤقتًا.
الجذوع - بدون PII/PAN ؛ إخفاء على مستوى الشكل.
الفصل بين الموانئ والشبكات: الوصول الخارجي عبر البوابة فقط.


15) FinOps/الأداء في الموقع

الحد من الموارد: 'نشر. الموارد. (يقرأ التكوين جزئيًا، ولكنه يساعد في الانضباط).
تقليل المروحة (عدد أقل من الخدمات الافتراضية ؛ إضافات - نبذات).
بناء مخبأ Kit ومخابئ الحجم لمديري الطرود.


16) CI с Compose

استخدم نفس الشيء. yaml' + 'تأليف. ci. يامل 'دون ارتباط التماثيل.
مخابئ التبعية مثل الأحجام القابلة للتعلق بين الوظائف/الطبقات.
اللكمات المتوازية: «الاسم:» في المؤلف مختلف (أو البادئة حسب الفرع) بحيث لا تتعارض المدرجات.


17) استكشاف المسافات

"docker compose ps'/" logs -f "/" exec" - التشخيص الأساسي.
تحقق من DNS على شبكة Compose (الخدمة بالاسم).
إذا «تباطأ» تركيب الارتباط على نظام التشغيل macOS/Windows - «: مخبأ »/«: مفوض» أو Mutagen/virtiofs.
Healthcheck هو «أخضر»، لكن الخدمة «ميتة»: تحقق من «استعداد» uppka الخاص بك وترتيب الهجرات.


18) قائمة التنفيذ المرجعية

1. كومة قاعدة (بوابة، api، db، cache، قائمة انتظار) في التكوين. يامل.
2. التعديلات المحلية - في التجاوز (v.gitignore).
3. env. القدوة الكاملة والحالية ؛ «make bootstrap» نسخها إلى «.env».
4. شيكات صحية وقاعدة بيانات/نصوص انتظار الهجرة.
5. WireMock/Localstack/MinIO لمقدمي الخدمات الخارجيين.
6. الانحياز والهجرات باعتبارها «تصنع البذور/تهاجر».
7. BuildKit + مخابئ التبعية متعددة المراحل.
8. Devcontainers/Makefile لبداية سريعة.
9. ملفات تعريف «إضافات» للأدوات (Grafana/pgAdmin/Kafdrop).
10. CI يستخدم نفس التركيب (+ ci-overide).


19) الأنماط المضادة

«Monster-compose» لـ 40 خدمة، تعمل دائمًا: تشغيل الملفات الشخصية.
الموانئ الصلبة التي تتعارض بين المطورين.
Secrets/keys in Git or '. مثال ".
الاعتماد على «الإنترنت» للاختبارات (حقيقي PSP/KYC).
نقص الصحة/التوقعات - الهجرة وبدء السباقات.
لا انحياز → اختبارات التكامل غير المستقرة.


20) خلاصة القول

التكوين هو محرك سرعة التطوير: يصف ملف واحد عالم خدماتك، وتعطي الملفات الشخصية/التجاوزات المرونة. حافظ على التكافؤ مع المبيعات، وأتمتة الجوانب والهجرات، والحفاظ على moki و TLS «كما هو الحال في المعركة»، وتسريع بناء BuildKit - ولديك بيئة محلية يكون العمل فيها مناسبًا، وسهل الاختبار وإعادة إنتاج سيناريوهات مبيعات iGaming/fintech بأمان.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.