GH GambleHub

Технология және инфрақұрылым → Docker Compose және Dev-орта

Docker Compose және Dev-орта

1) Неге Compose

Docker Compose - жергілікті/CI: қосымшалар, ДҚ, кезектер, кэштер, кері прокси, мок-сервистер прод-стек репликасын көтерудің жылдам тәсілі. Мақсаттары:
  • Азық-түлікпен паритет (бейнелер, айнымалылар, желілер) → «менде жұмыс істейді».
  • Жаңа бастаушылар үшін жылдам бастау → 'make up' және ұрысқа.
  • Әзірлеушіге/тармаққа арналған оқшауланған стендтер → қақтығыссыз параллельді жұмыс.
  • Нақты тәуелділіктегі интеграциялық тестілер.

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 (опционально)
Ұсынымдар:
  • compose. yaml - dev/CI үшін бірдей «скелетті» (сервистер, желілер, томдар) сипаттайды.
  • override - тек жергілікті түзетулер: каталогтар маппингтері, порттар, debug-жалаушалар.
  • .env. example → жасаушы '.env' дегенге көшіріп, мәндерді орналастырады.

3) compose қаңқасы. yaml (мысал)

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 gateway ретінде: роутинг схемасын азық-түлікке жақындатады.
  • Healthcheck және depends_on с 'condition: service_healthy' (v3-те waiting-скрипттер арқылы) - реттелген бастау.
  • Тұрақты (ДҚ/кэш) үшін volumes және (hot-reload) үшін bind-mount.

4) Профильдер және бірнеше файлдар

Profiles ('profiles: [dev, ci, extras]') қызметтерін қамтиды/болдырмайды ('docker compose --profile extras up -d').

Бірнеше файл:
  • `docker compose -f compose. yaml -f compose. dev. yaml up '- конфигурацияларды біріктіру.
Үлгі жиынтығы:
  • `compose. yaml '- негізгі.
  • `compose. dev. yaml '- bind-mounts, дебаг, фичефлагтар.
  • `compose. extras. yaml '- аспаптық (Grafana, pgAdmin, Kafdrop).
  • `compose. ci. yaml '- «кестесіз бас», bind-mountсыз.

5) Айнымалылар, құпиялар және баптаулар

.env - ауыспалылардың ортақ көзі: хосттар, тестілік БД кредтері, жалаулар.

Dev құпияларды ашық түрде сақтамаймыз; пайдаланамыз:
  • жергілікті dummy-құпиялар (бұғаттау кілттері),
  • аса сезімтал үшін skinny-Vault/SOPS біріктіру.
  • Қағидаты: ең аз қажетті деректер. PAN/PII - токендер/фикстуралар.

6) Құрастыру және жылдамдық

6. 1 Multi-stage + BuildKit

Dockerfile 'base', 'dev', 'prod' мақсаттарымен; тәуелділіктер үшін жалпы cache-layer.
BuildKit қосу: 'DOCKER _ BUILDKIT = 1' (немесе конфигада).
Кэштеу: '--mount = type = cache, target =/root/.cache/...' үшін pip/npm/maven.

6. 2 Жылдам цикл

Bind-mount кода + hot-reload (nodemon, uvicorn --reload, Spring Devtools).
Тек қажеттісін жинай отырып, жеке dev таргеті.
Makefile цели: `make up`, `make down`, `make logs`, `make rebuild`, `make seed`.

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) ДБ, көші-қон, сидинг

Көші-қон (Flyway/Liquibase/Alembic/Prisma) 'db' (healthcheck күту) басталғаннан кейін хук-скрипт арқылы іске қосылады.
Сидинг: фикстуралары бар жеке 'seed' контейнері; қайталанатын және іспеттес.
Деректер snapshots: 'pgdata' томын 'reset-db' скриптімен ысырып тастауға/қалпына келтіруге болады. sh`.


8) Брокерлер, кэштер, CDC

Kafka/Rabbit/Redpanda - өнімдегідей (минималды конфигтер).
Realistics үшін қосылған AOF бар Redis.
CDC-коннекторлар (қосымша): Debezium аналитиканың интеграциялық тесттеріне арналған жеке сервисте.


9) Сыртқы жеткізушілердің мойындары

REST үшін WireMock/Prism, күрделі сценарийлер үшін MockServer.
Хаттар үшін Mailhog/SMTP4Dev.
Бұлттарға арналған Localstack/MinIO және S3 үйлесімділігі.
Саясат: барлық сыртқы PSP/KYC/KMS - «интернетке» емес, келісімшарттар бойынша мок-хаб (OpenAPI) арқылы.


10) Кері прокси және TLS

Traefik/NGINX жергілікті домендер бойынша сервистерді таратады ('.test', '.local'):
  • `api. local. test`, `mockpsp. local. test`.
  • TLS: HSTS/secure-cookies тестілеу үшін сенімді жергілікті куәлікті беру үшін mkcert.
  • Sticky сессияларын тек шын мәнінде маңызды кейстерге қосыңыз.

11) Әзірлеуші профильдер: Node/Python/Java

Node: mount 'node _ modules' install жылдамдату үшін кэш (volume) ретінде; 'CHOKIDAR _ USEPOLLING = 1' Windows/WSL.
Python: `pip cache` как volume, `watchfiles`/`uvicorn --reload`.
Java: JRebel/Devtools, 'mvn -T 1C -o' + тәуелділік қабаты.


12) Тесттер және сапа

Интеграциялық тестілерді Compose желісі ішінде жүргіземіз: 'docker compose run test'.
Testcontainers (JVM/Node/Python/.NET үшін) - толық стексіз unit-интеграция үшін жақсы нұсқа.
СІ-де → gate мок-хабымен келісім-тест.
Линтерлер/Pre-commit: қайталануы үшін контейнерде іске қосу.


13) Devcontainers және «IDE-код ретінде»

`devcontainer. json 'кен жасаушының бейнесін (CLI, SDK, linters) тіркейді, жобаны құрастырады,' postCreateCommand 'ұшырып жібереді.
Профит: бірдей құралдар, хостты «қоқыстамаймыз», жаңа машина - минуттар ішінде дайын.


14) Dev қауіпсіздік

Қолданбалар суреттерінде root жоқ; 'readOnlyRootFilesystem' мүмкін болғанда.
Жауынгерлік кілттер/құпиялар жоқ, тіпті уақытша да.
Логи - PII/PAN жоқ; пішім деңгейінде жасыру.
Порттар мен желілерді сегрегациялау: сыртқы қатынас тек gateway арқылы.


15) FinOps/жергілікті өнімділігі

'deploy. resources. limits '(Compose ішінара оқиды, бірақ пәнге көмектеседі).
Фан-аутты азайтыңыз (әдепкі қызметтер аз; extras - профильдер).
Бума менеджерлері үшін BuildKit кэші және volume кэштер.


16) CI с Compose

Сол 'compose' пайдаланыңыз. yaml` + `compose. ci. yaml 'bind-mountсыз.
Тәуелділік кэштері - джобтар/қабаттар арасындағы attachable volumes сияқты.
Қатарлас джобтар: 'name:' стенділер қайшылыққа ұшырамауы үшін әртүрлі (немесе бұтақ бойынша префикс).


17) Трабшутинг

'docker compose ps '/' logs -f '/' exec' - негізгі диагностика.
Compose желісінде DNS-ті тексеріңіз.
Егер bind-mount macOS/Windows жүйесінде тежелсе - ': cached '/': delegated' немесе Mutagen/virtiofs.
Healthcheck «жасыл», бірақ «өлі» қызметі: 'readiness' аппка және көші-қон тәртібін тексеріңіз.


18) Енгізу чек-парағы

1. Негізгі стек (gateway, api, db, cache, queue) compose. yaml.
2. Жергілікті түзетулер - override (в.gitignore).
3..env. example толық және өзекті; 'make bootstrap' оны '.env' -ге көшіреді.
4. Healthchecks және ДБ/көші-қонды күту скрипті.
5. Сыртқы провайдерлер үшін WireMock/Localstack/MinIO.
6. 'make seed/migrate' командлеттері ретінде сидинг және көші-қон.
7. BuildKit + multi-stage, тәуелділік кэштері.
8. Тез бастау үшін Devcontainers/Makefile.
9. Құралдар үшін 'extras' профильдері (Grafana/pgAdmin/Kafdrop).
10. CI сол compose (+ ci-оверрайд) қолданады.


19) Қарсы үлгілер

40 сервистік «Монстр-compose» әрқашан іске қосылған: профильдерді қосыңыз.
Әзірлеушілер арасында қайшы келетін қатты шегеленген порттар.
Git немесе '.env. example`.
Тестілеуге арналған «интернетке» тәуелділік (нақты PSP/KYC).
healthcheck/күту жоқтығы - көші-қон және старт жарыстары.
Сидингтің жоқтығы → flaky интеграциялық тесттер.


20) Қорытынды

Compose - бұл жылдамдық қозғалтқышы: бір файл сіздің қызмет әлеміңізді сипаттайды, ал профильдер/оверрайдтар икемділікті береді. Азық-түлікпен тепе-теңдікті сақтаңыз, сидинг пен көші-қонды автоматтандырыңыз, моктар мен TLS-ті «ұрысдағыдай» ұстаңыз, BuildKit-пен құрастыруды жылдамдатыңыз - және сізде жұмыс істеуге, оңай тестілеуге және iGaming/fintech азық-түлік сценарийлерін қауіпсіз ойнатуға ыңғайлы жергілікті орта болады.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.