Технологияҳо ва инфрасохтор → Docker Compose ва Dev Environment
Муҳити Docker Compose ва Dev
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 (опционально)
Тавсияҳо:
- таркиб ёфтааст. yaml - "скелет" -ро (хидматҳо, шабакаҳо, ҳаҷмҳо) барои dev/CI якхела тавсиф мекунад.
- override - танҳо таҳрирҳои маҳаллӣ: харитасозии феҳристҳо, бандарҳо, парчамҳои debug.
- .env. мисол → таҳиякунанда ба '.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 бо 'condition: service_healthy' (бо v3 тавассути скриптҳои интизорӣ) - оғози ботартиб.
- Ҳаҷмҳо барои истодагарӣ (DB/кэш) ва васл кардани рамз (аз нав бор кардан).
4) Профилҳо ва якчанд файлҳо
Профилҳо ('профилҳо: [dev, ci, extras]') хидматҳоро дар бар мегиранд/истисно мекунанд ('docker compose --profile extras up -d').
Якчанд файл:- 'docker compose -f таркиб. yaml -f эҷод мекунад. дев. yaml up '- конфигуратсияҳои якҷоякунӣ.
- 'compose. yaml 'асосӣ аст.
- 'compose. дев. yaml '- бандҳо, debags, phicheflags.
- 'compose. изофа. yaml '- инструменталӣ (Grafana, pgadmin, Kafdrop).
- 'compose. ci. yaml '- "сар бе графика", бе пайвандҳо.
5) Тағирёбандаҳо, асрори ва танзимот
.env - манбаи маъмули тағйирёбандаҳо: соҳибҳо, қарзҳои пойгоҳи додаҳо, парчамҳо.
Мо сирри девро ба таври возеҳ нигоҳ намедорем; мо истифода мебарем:- асрори dummy маҳаллӣ (калидҳои stub),
- ҳамгироӣ бо пӯсти лоғар/sops барои ҳассосияти иловагӣ.
- Принсип: маълумоти ҳадди ақали талабшаванда. PAN/PII - нишонаҳо/ислоҳҳо.
6) Маҷлисҳо ва суръат
6. 1 Бисёрқабата + Сохтани маҷмӯа
Dockerfile бо ҳадафҳо 'base', 'dev', 'prod'; қабати муштараки кэш барои вобастагӣ.
Илова кардани Building-Kit: 'DOCKER _ BUILDDKIT = 1' (ё дар конфигуратсия).
Кэшкунӣ: '--mount = type = cache, target =/root/.cache/...' барои pip/npm/maven.
6. 2 Давраи тез
Bind-mount koda + hot-reload (nodemon, uvicorn --- сарборӣ, Devtools баҳорӣ).
Ҳадафи алоҳидаи dev бо монтажи танҳо як чизи дилхоҳ.
Цели макефилӣ: 'созед', 'созед', 'гузоришҳо созед', 'барқарор кунед', 'насл созед'.
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, муҳоҷират, siding
Муҳоҷират (Flyway/Liquibase/Alembic/Prisma) бо скрипти қалмоқе пас аз оғози 'db' оғоз мешавад (интизори саломатӣ).
Siding: як контейнери алоҳидаи "тухмӣ" бо асбобҳо; такроршаванда ва idempotent.
Суратҳои маълумот: Ҳаҷми 'pgdata' метавонад бо скрипти 'reset-db' барқарор/барқарор карда шавад. ш '.
8) брокерҳо, кэшҳо, CDC
Кафка/Харгӯш/Редпанда - тавре ки дар prod (конфигуратсияҳои ҳадди аққал).
Редис бо AOF барои реализм дохил карда шудааст.
Пайвасткунакҳои CDC (ихтиёрӣ): Debezium дар хидмати алоҳида барои санҷишҳои таҳлили ҳамгироӣ.
9) Масхараҳои таъминкунандаи беруна
Wire Mock/Prism for REST, Mock-Server барои сенарияҳои мураккаб.
Mailhog/SMTP4Dev барои мактубҳо.
Localstack/Min-IO барои мағозаҳои абрӣ ва мутобиқати S3.
Сиёсат: ҳама PSP/KYC/KMS - тавассути маркази масхара тибқи қарордодҳо (Open
10) Прокси баръакс ва TLS
Traefik/NGINX хидматҳоро ба доменҳои маҳаллӣ тақсим мекунад ('.test', '.local'):- 'апи. маҳаллӣ. озмоиш ',' mockpsp. маҳаллӣ. озмоиш '.
- TLS: mkcert барои додани шаҳодатномаи боэътимоди маҳаллӣ барои санҷиши HSTS/secure-cookies.
- Танҳо барои ҳолатҳое, ки дар ҳақиқат муҳим аст, ҷаласаҳои часпандаро фаъол созед.
11) Профилҳои таҳиякунанда: гиреҳ/Python/Java
Гиреҳ: васл кардани 'гиреҳ _ модулҳо' ҳамчун кэш (ҳаҷм) барои суръат бахшидан; 'CHOKIDAR _ USEPOLLING = 1' дар Windows/WSL.
Python: 'cache pip' ҳаҷми kak, 'watchfiles '/' uvicorn --- бор кардан'.
Java: JRebel/Devtools, қабати 'mvn -T 1C -o' + бо вобастагӣ.
12) Санҷишҳо ва сифат
Санҷишҳои интегратсионӣ дар дохили шабакаи Compose мусобиқа мекунанд: 'docker compose run test'.
Testcontainers (барои JVM/Node/Python/.NET) як варианти хуб барои ҳамгироии воҳид бидуни стек мебошад.
Озмоишҳои шартномавӣ бо маркази mock mock дар CI.
Linters/Пеш аз супориш: дар контейнер барои такрорӣ кор кунед.
13) Созандагон ва "IDE-as-code"
'devcontainer. json 'тасвири таҳиягарро ислоҳ мекунад (CLI, SDK, linters), лоиҳаро ҷобаҷо мекунад,' post
Фоида: ҳамон асбобҳо, соҳибро "банд" накунед, мошини нав дар дақиқаҳо омода аст.
14) Амният дар дев
Бе реша дар тасвирҳои барнома; 'Агар имкон бошад, танҳо системаи файлии Root'.
Ягон калид/асрори ҷанг, ҳатто муваққатан.
Гузоришҳо - бе PII/PAN; ниқоб дар сатҳи форматчӣ.
Ҷудосозии порт ва шабака: дастрасии беруна танҳо тавассути дарвоза.
15) Нишондиҳандаҳо/иҷро дар маҳал
Маҳдудияти захираҳо: 'ҷойгиркунӣ. захираҳо. маҳдудиятҳо '(Эҷод қисман мехонад, аммо ба интизом кӯмак мекунад).
Кам кардани мухлиси (камтар хидматҳои пешфарз; изофа - профилҳо).
Кэш ва кэшҳои ҳаҷм барои менеҷерони бастаҳо.
16) CI с Композитсия
Ҳамон 'compose -ро истифода баред. yaml '+' эҷод мекунад. ci. yaml 'бе болҳои баста.
Кэшҳои вобастагӣ ба монанди ҳаҷми замимашаванда дар байни ҷойҳои корӣ/қабатҳо мебошанд.
Ҷабҳаҳои параллелӣ: 'ном:' дар Композитсия гуногун аст (ё префикси шоха), то ки деворҳо ихтилоф накунанд.
17) Траблотинг
'docker compose ps '/' logs -f '/' exec' - ташхиси асосӣ.
DNS-ро дар шабакаи Compose санҷед (хидмат бо ном).
Агар васл кардани васл дар mac-OS/Windows - ': cached '/': супоридашуда' ё Mutagen/virtiofs.
Healthcheck "сабз" аст, аммо хидмат "мурда" аст: "омодагии" уппка ва тартиби муҳоҷиратро санҷед.
18) Рӯйхати назорати амалисозӣ
1. Пойгоҳи асосӣ (дарвоза, api, db, кэш, навбат) дар таркиб. ямл.
2. Таҳрирҳои маҳаллӣ - аз ҳад зиёд (v.gitignore).
3. .env. мисоли пурра ва ҷорӣ; 'bootstrap make' онро ба '.env' нусхабардорӣ мекунад.
4. Санҷишҳо ва пойгоҳи додаҳо/интизории муҳоҷират.
5. WIRE Mock/Localstack/MIN IO барои провайдерҳои беруна.
6. Siding ва муҳоҷират ҳамчун 'насл/migrate' cmdlets.
7. Сохтани Kit + кэшҳои бисёрзинагӣ, вобастагӣ.
8. Devontainers/Makefile барои оғози зуд.
9. Профилҳои 'Extras' барои асбобҳо (Grafana/pg-Admin/Kafdrop).
10. CI ҳамон композитсияро истифода мебарад (+ ci-overide).
19) Анти-намунаҳо
"Monster-compose" барои 40 хидмат, ҳамеша кор мекунад: профилҳоро фаъол кунед.
Бандарҳои сахт мехкӯбшуда, ки байни таҳиягарон ихтилоф доранд.
Асрҳо/калидҳо дар Git ё '.env. намуна '.
Вобастагӣ аз "Интернет" барои санҷишҳо (PSP/KYC воқеӣ).
Набудани санҷиши саломатӣ/интизорӣ - муҳоҷират ва нажодҳо.
Не siding → озмоишҳои ҳамгироии ҳамвор.
20) Сатри поён
Compose муҳаррики суръати рушд аст: як файл ҷаҳони хидматҳои шуморо тавсиф мекунад ва профилҳо/overrides чандирӣ медиҳанд. Баробариро бо фурӯш нигоҳ доред, siding ва муҳоҷиратро автоматӣ кунед, moki ва TLS-ро "ба мисли ҷанг" нигоҳ доред, Build