GH GambleHub

Технология жана инфраструктура → Docker Compose жана Dev-чөйрө

Docker Compose жана Dev-чөйрө

1) Эмне үчүн Compose

Docker Compose - жергиликтүү/CI прод-стек репликасын көтөрүүнүн тез жолу: тиркемелер, DD, кезектер, кэштер, тескери прокси, мок кызматтары. Максаттары:
  • Азык-түлүк менен паритет (сүрөттөр, өзгөрмөлүүлөр, тармактар) → азыраак "мен үчүн иштейт".
  • Тез башталгыч → '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 - бир гана жергиликтүү түзөтүүлөр: каталогдордун mappings, порттор, 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' (waiting скрипттери аркылуу v3) - иреттүү башталышы.
  • Туруктуу үчүн Volumes (DB/кэш) жана код үчүн bind-mount (hot-reload).

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-mounty, debag, phicheflagy.
  • `compose. extras. yaml '- аспаптык (Grafana, pgAdmin, Kafdrop).
  • `compose. ci. yaml '- "графикасыз баш", bind-mount жок.

5) Өзгөрмөлүү, сырлар жана жөндөөлөрү

.env - өзгөрмөлөрдүн жалпы булагы: хосттар, тесттик маалымат каражаттары, желектер.

Биз дөө сырларды ачык сактабайбыз; колдонобуз:
  • жергиликтүү dummy-сырлар (баскычтар),
  • өзгөчө сезимтал үчүн skinny-Vault/SOPS менен бириктирүү.
  • Принцип: минималдуу зарыл маалыматтар. PAN/PII - токендер/фикстуралар.

6) чогултуу жана ылдамдыгы

6. 1 Multi-stage + BuildKit

Dockerfile 'base', 'dev', 'prod' максаттары менен; көз карандылык үчүн жалпы cache-layer.
BuildKit киргизүү: 'DOCKER _ BUILDKIT = 1' (же config).
Кэш: '--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 күтүү) башталгандан кийин хук-скрипт менен башталат.
Siding: бекиткичтер менен өзүнчө контейнер 'seed'; кайталануучу жана идемпотенттик.
Snapshot берилиштер: том 'pgdata' 'reset-db скрипти менен кайра/калыбына келтирилиши мүмкүн. sh`.


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

Kafka/Rabbit/Redpanda - тамак-аш сыяктуу (минималдуу config).
Redis AOF реалдуулук үчүн киргизилген.
CDC Connectors (кошумча): Debezium интеграциялык аналитикалык тесттер үчүн өзүнчө кызматта.


9) Моки тышкы берүүчүлөр

WireMock/Prism үчүн REST, MockServer үчүн татаал жагдайлар.
Mailhog/SMTP4Dev каттар үчүн.
Cloud Stores жана S3 шайкештиги үчүн Localstack/MinIO.
Саясат: бардык тышкы PSP/KYC/KMS - "Интернетке" эмес, контракттар боюнча мок-хаб (OpenAPI) аркылуу.


10) тескери прокси жана TLS

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

11) Иштеп профилдери: Node/Python/Java

Node: mount 'node _ modules' орнотууну тездетүү үчүн кэш катары (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 үчүн) - толук топтому жок бирдиктүү интеграция үчүн жакшы вариант.
Контракты-тесттер менен МОК-хаб → СИде gate.
Linters/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 кэш жана пакет менеджерлери үчүн көлөмдүү кэш.


16) CI с Compose

Ошол эле 'compose' колдонуңуз. yaml` + `compose. ci. yaml 'bind-mountes жок.
Caches көз карандылыгы - джобдор/катмарларынын ортосундагы attachable volumes сыяктуу.
Параллель Jobs: 'name:' ар түрдүү Compose (же бутагы боюнча префикс), ошондуктан стенддер карама-каршы келбейт.


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

'docker compose ps '/' logs -f '/' exec' - негизги диагностика.
Compose тармагында DNS текшерүү (аты-жөнү боюнча кызмат).
Эгерде bind-mount macOS/Windows боюнча "тормозит" - ': cached '/': delegated' же Mutagen/virtiofs.
Healthcheck "жашыл", ал эми кызмат "өлгөн": текшерүү 'readiness' сиздин appki жана көчүрүү тартиби.


18) Киргизүү чек-тизмеси

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


19) Анти-үлгүлөрү

"Monster compose" боюнча 40 кызматтар, ар дайым иштеп жатат: Profiles киргизүү.
Иштеп чыгуучулардын ортосунда карама-каршы келген катуу чөмүлгөн порттор.
Сырлар/Git же '.env. example`.
тесттер үчүн "Интернет" көз карандылык (чыныгы PSP/KYC).
Healthcheck/күтүүнүн жоктугу - миграция жана баштоо жарышы.
Сидинг жоктугу → flaky интеграциялык тесттер.


20) Жыйынтык

Compose иштеп чыгуу ылдамдыгы кыймылдаткычы болуп саналат: бир файл сиздин кызмат дүйнөсүн сүрөттөйт, ал эми профилдер/оверрайддар ийкемдүүлүктү берет. Азык-түлүк менен паритетти сактаңыз, сидингди жана миграцияны автоматташтырыңыз, мокторду жана TLSди "согушкандай" сактаңыз, BuildKit 'тин жыйындыларын тездетиңиз - жана сиз иштөөгө ыңгайлуу, тестирлөө оңой жана iGaming/Fintech азык-түлүк сценарийлерин коопсуз ойнотуучу жергиликтүү чөйрөгө ээ болосуз.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.