التكنولوجيات والبنية التحتية → 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».
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 بأمان.