GH GambleHub

Технологияҳо ва инфрасохтор → 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 бо монтажи танҳо як чизи дилхоҳ.
Цели макефилӣ: 'созед', 'созед', 'гузоришҳо созед', 'барқарор кунед', 'насл созед'.

Намунаи 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, муҳоҷират, 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

Contact

Тамос гиред

Барои саволҳо ё дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Оғози интегратсия

Email — муҳим аст. Telegram ё WhatsApp — ихтиёрӣ.

Номи шумо ихтиёрӣ
Email ихтиёрӣ
Мавзӯъ ихтиёрӣ
Паём ихтиёрӣ
Telegram ихтиёрӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиёрӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.