فن آوری ها و زیرساخت → 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 цели: «آرایش»، «ساختن»، «ساختن سیاهههای مربوط»، «بازسازی»، «ساختن بذر».
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 را بازتولید کنید.