GH GambleHub

فن آوری ها و زیرساخت → Docker نوشتن و توسعه محیط زیست

داکر محیط نوشتن و توسعه

1) چرا نوشتن

Docker Compose یک راه سریع برای بالا بردن یک کپی از پشته تولید در locales/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 (опционально)
توصیه ها:
  • آهنگسازی کنید. yaml - «اسکلت» (خدمات، شبکه ها، حجم) را برای dev/CI توصیف می کند.
  • override - فقط ویرایشهای محلی: نگاشت فهرست راهنما، پورتها، پرچمهای اشکالزدایی.
  • در مقابل. مثال → توسعه دهنده کپی به «.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 و depends_on with 'condition: service_healthy' (در v3 از طریق اسکریپت انتظار) - شروع منظم.
  • Volumes for persistence (DB/cache) و bind-mount for code (hot-reload).

4) پروفایل ها و فایل های متعدد

پروفایل ها («پروفایل ها: [dev، ci، اضافی]») شامل/حذف خدمات («docker compose --profile extras up -d»).

فایل های متعدد:
  • 'docker compose -f compose. یامل -F آهنگسازی. توسعه دهنده. YAML تا '- ترکیب تنظیمات.
مجموعه معمولی:
  • آرام باش. «يامل» اساسي ـه.
  • آرام باش. توسعه دهنده. یامل - اتصال، debags، phicheflags.
  • آرام باش. اضافی. yaml '- instrumental (Grafana, pgAdmin, Kafdrop).
  • آرام باش. سی آی. yaml '- «سر بدون گرافیک»، بدون اتصال-مانت.

5) متغیرها، اسرار و تنظیمات

.env - منبع مشترک متغیرها: میزبان، اعتبار پایگاه داده تست، پرچم ها.

ما اسرار را به صراحت در dev حفظ نمی کنیم ؛ ما استفاده می کنیم:
  • اسرار ساختگی محلی (کلید خرد)،
  • ادغام با skinny-vault/sops برای حساسیت فوق العاده.
  • اصل: حداقل اطلاعات مورد نیاز. PAN/PII - نشانه/رفع.

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

6. 1 چند مرحله ای + BuildKit

Dockerfile با اهداف «پایه»، «توسعه دهنده»، «تولید» ؛ لایه کش مشترک برای وابستگی ها.
شامل BuildKit: 'DOCKER _ BUILDKIT = 1' (یا در پیکربندی).
Caching: '- mount = type = cache, target =/root/.cache/...' برای pip/npm/maven.

6. 2 چرخه سریع

اتصال کوه кода + داغ بارگذاری (nodemon, uvicorn --reload, بهار Devtools).
یک هدف توسعه جداگانه با مونتاژ تنها یک مورد نظر.
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» را می توان با اسکریپت «reset-db» بازنشانی کرد. هیس.


8) کارگزاران، انبارها، CDC

Kafka/Rabbit/Redpanda - همانطور که در prod (پیکربندی حداقل).
Redis با AOF شامل واقع گرایی است.
اتصالات CDC (اختیاری): Debezium در یک سرویس جداگانه برای تست های تجزیه و تحلیل ادغام.


9) Mocks تامین کننده خارجی

WireMock/Prism برای REST، MockServer برای سناریوهای پیچیده.

Mailhog/SMTP4Dev برای نامه ها

Localstack/MinIO برای فروشگاه های ابر و سازگاری S3.
سیاست: تمام PSP/KYC/KMS خارجی - از طریق مرکز ساختگی تحت قرارداد (OpenAPI)، و نه «در اینترنت».


10) پروکسی معکوس و TLS

Traefik/NGINX خدمات را به دامنه های محلی («.test»، «.local») توزیع می کند:
  • عزيزم. محلی. آزمایش، mockpsp. محلی. آزمایش کنید.
  • TLS: mkcert برای صدور یک گواهی محلی قابل اعتماد برای تست HSTS/secure-cookies.
  • جلسات چسبنده را فقط در مواردی که واقعاً مهم است روشن کنید.

11) پروفایل های توسعه دهنده: گره/پایتون/جاوا

گره: سوار 'node _ modules' به عنوان حافظه پنهان (حجم) برای سرعت بخشیدن به نصب ؛ 'CHOKIDAR _ USEPOLLING = 1' در ویندوز/WSL.
پایتون: 'pip cache' как volume, 'watchfiles '/' uvicorn -- reload'.
جاوا: JRebel/Devtools، 'mvn -T 1C -o' + لایه با وابستگی.


12) تست و کیفیت

Integration tests race inside the Compose network: 'docker compose run test'.
Testcontainers (برای JVM/Node/Python/.NET) گزینه خوبی برای ادغام واحد بدون پشته کامل است.
تست قرارداد با → دروازه مرکز ساختگی در CI.
Linters/Pre-commit: برای تکرارپذیری در ظرف اجرا می شود.


13) سازندگان و «IDE-as-code»

دو تا دربان. json 'تصویر توسعهدهنده (CLI, SDK, linters) را اصلاح میکند، پروژه را نصب میکند،' postCreateCommand 'را اجرا میکند.
سود: همان ابزار، میزبان را «مسدود» نکنید، دستگاه جدید در عرض چند دقیقه آماده است.


14) امنیت در توسعه پایدار

بدون ریشه در تصاویر برنامه ؛ 'readOnlyRootFilesystem' در صورت امکان.
بدون کلید نبرد/اسرار، حتی به طور موقت.
سیاهههای مربوط - بدون PII/PAN ؛ پوشش در سطح قالب بندی.
تفکیک پورت و شبکه: دسترسی خارجی فقط از طریق دروازه.


15) FinOps/عملکرد در محل

منابع را محدود کنید: "deploy. منابع. محدودیت ها (نوشتن بخشی از خواندن، اما به نظم و انضباط کمک می کند).
کاهش فن (خدمات پیش فرض کمتر ؛ اضافی - پروفایل).
کش BuildKit و کش حجم برای مدیران بسته.


16) CI с نوشتن

از همان compose استفاده کنید. yaml '+' آهنگسازی کنید. سی آی. yaml 'بدون پایه های اتصال.
انبارهای وابستگی مانند حجم قابل اتصال بین کارها/لایه ها هستند.
Jabs موازی: «نام:» در Compose متفاوت است (یا پیشوند با شاخه) به طوری که غرفه ها درگیری نیست.


17) راه اندازی کامیون

'docker نوشتن ps '/' logs -f '/' exec' - تشخیص پایه.
DNS را در شبکه Compose (سرویس با نام) بررسی کنید.
If bind-mount «slows down» on macOS/Windows - ': cached '/': delegated' or Mutagen/virtiofs.
Healthcheck «سبز» است، اما خدمات «مرده» است: «آمادگی» uppka خود و ترتیب مهاجرت را بررسی کنید.


18) چک لیست پیاده سازی

1. پشته پایه (دروازه، API، DB، کش، صف) در نوشتن. يامل.
2. ویرایشهای محلی - در لغو) v.gitignore (.
3. اطلاعات. مثال کامل و در حال حاضر ؛ 'make bootstrap' آن را به '.env' کپی می کند.
4. Healthchecks و پایگاه داده/مهاجرت اسکریپت صبر کنید.
5. WireMock/Localstack/MinIO برای ارائه دهندگان خارجی.
6. جانبداری و مهاجرت به عنوان 'make seed/migrate' cmdletها.
7. BuildKit + چند مرحله ای، حافظه های وابسته.
8. سازندگان/Makefile برای شروع سریع.
9. پروفایل های 'اضافی' برای ابزارها (Grafana/pgAdmin/Kafdrop).
10. CI از همان ترکیب (+ ci-overlide) استفاده می کند.


19) ضد الگوهای

فقدان بررسی سلامت/انتظار - مهاجرت و شروع نژادها

«هیولا آهنگسازی» برای خدمات 40، همیشه در حال اجرا: روشن کردن پروفایل.
پورت های سخت گیر که بین توسعه دهندگان درگیری دارند.
اسرار/کلید در Git or ".env. به عنوان مثال '.
وابستگی به «اینترنت» برای آزمایش (PSP/KYC واقعی).
بدون جانبداری → آزمون یکپارچه سازی پوسته پوسته.


20) خط پایین

Compose موتور سرعت توسعه است: یک فایل دنیای خدمات شما را توصیف می کند و پروفایل ها/لغو انعطاف پذیری را ارائه می دهند. حفظ برابری با فروش، خودکار سازی سایدینگ و مهاجرت، حفظ moki و TLS «مانند در نبرد»، سرعت بخشیدن به BuildKit ایجاد می کند - و شما یک محیط محلی دارید که در آن کار راحت است، آسان برای آزمایش و با خیال راحت سناریوهای فروش iGaming/fintech را بازتولید کنید.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.