GH GambleHub

Texnologiya və infrastruktur → Docker Compose və Dev-mühit

Docker Compose və Dev-mühit

1) Niyə Kompozit

Docker Compose - yerli/CI prod yığının replikasını artırmaq üçün sürətli bir yoldur: proqramlar, DD, növbələr, caches, əks proxy, mok xidmətləri. Məqsədlər:
  • Qida ilə paritet (şəkillər, dəyişənlər, şəbəkələr) → daha az «mənim üçün işləyir».
  • Yeni başlayanlar üçün sürətli start → 'make up' və döyüş.
  • Tərtibatçı/filialda təcrid olunmuş stendlər → münaqişəsiz paralel iş.
  • Real asılılıq inteqrasiya testləri.

2) Anbarın əsas strukturu


project/
docker/
app/# Dockerfile, web/# Nginx/Traefik scripts and seed/# siders/compose fixes. yaml # common base stack compose. override. yaml # local overrides (v.gitignore)
compose. ci. yaml # for CI
.env. example # environment template
Makefile # convenient goals devcontainer. json # VS Code Dev Containers (optional)
Tövsiyələr:
  • compose. yaml - dev/CI üçün eyni «skelet» (xidmətlər, şəbəkələr, cildlər) təsvir edir.
  • override - yalnız yerli düzəlişlər: kataloq mappinqləri, limanlar, debug bayraqları.
  • .env. example → developer '.env' kopyalamaq və dəyərləri əvəz edir.

3) Kompozit çərçivə. yaml (nümunə)

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: {}
Əsas məqamlar:
  • Traefik/NGINX gateway kimi: marşrutlaşdırma sxemini ərzaq sxeminə yaxınlaşdırır.
  • Healthcheck və depends_on ilə 'condition: service_healthy' (v3-də waiting skriptləri vasitəsilə) - nizamlı başlanğıc.
  • Persistentlik üçün volumes (BD/cache) və kod üçün bind-mount (hot-reload).

4) Profillər və bir neçə fayl

Profiles ('profiles: [dev, ci, extras]') xidmətlərini daxil edir/istisna edir ('docker compose --profile extras up -d').

Bir neçə fayl:
  • `docker compose -f compose. yaml -f compose. dev. yaml up '- konfiqurasiya birləşməsi.
Tipik dəsti:
  • `compose. yaml '- əsas.
  • `compose. dev. yaml '- bind-mounts, debag, ficheflages.
  • `compose. extras. yaml '- instrumental (Grafana, pgAdmin, Kafdrop).
  • `compose. ci. yaml '- «qrafiksiz baş», bind-mountsuz.

5) Dəyişənlər, sirləri və parametrləri

.env dəyişənlərin ümumi mənbəyidir: hostlar, test DB-lər, bayraqlar.

Dev sirləri açıq şəkildə saxlamırıq; istifadə:
  • yerli dummy sirləri (kilid açarları),
  • xüsusilə həssas üçün skinny-Vault/SOPS ilə inteqrasiya.
  • Prinsip: minimum tələb olunan məlumatlar. PAN/PII - tokenlər/fiksturlar.

6) Montaj və sürət

6. 1 Multi-stage + BuildKit

Dockerfile 'base', 'dev', 'prod' məqsədləri ilə; asılılıq üçün ümumi cache-layer.
BuildKit daxil edin: 'DOCKER _ BUILDKIT = 1' (və ya konfiqada).
Caching: '--mount = type = cache, target =/root/.cache/...' üçün pip/npm/maven.

6. 2 Sürətli dövr

Bind-mount кода + hot-reload (nodemon, uvicorn --reload, Spring Devtools).
Yalnız lazım olan montaj ilə ayrı hədəf dev.
Makefile цели: `make up`, `make down`, `make logs`, `make rebuild`, `make seed`.

Makefile nümunəsi:
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, miqrasiya, sidinq

Miqrasiya (Flyway/Liquibase/Alembic/Prisma) 'db' (healthcheck gözləmə) başladıqdan sonra huk script tərəfindən başlayır.
Siding: fiksturlarla ayrı bir 'seed' konteyneri; təkrarlanan və idempotent.
Data snapshot: tom 'pgdata' reset-db ilə sıfırlana/bərpa edilə bilər. sh`.

8) Brokerlər, caches, CDC

Kafka/Rabbit/Redpanda - prodda olduğu kimi (minimal konfiqlər).
Realizm üçün daxil AOF ilə Redis.
CDC konnektorları (isteğe bağlı): Debezium inteqrasiya analitikası testləri üçün ayrı bir xidmətdə.

9) Xarici təchizatçı moki

REST üçün WireMock/Prism, mürəkkəb ssenarilər üçün MockServer.
Mailhog/SMTP4Dev məktublar üçün.
Localstack/MinIO cloud stors və S3-uyğunluq üçün.
Siyasət: bütün xarici PSP/KYC/KMS - «İnternetə» deyil, müqavilələr üzrə mok-hub (OpenAPI) vasitəsilə.

10) Ters proxy və TLS

Traefik/NGINX yerli domenlər üzrə xidmətlər paylayır ('.test', '.local'):
  • `api. local. test`, `mockpsp. local. test`.
  • TLS: HSTS/secure-cookies test etmək üçün etibarlı yerli sertifikat vermək üçün mkcert.
  • Sticky seansları yalnız həqiqətən vacib olan hallarda daxil edin.

11) Developer profilləri: Node/Python/Java

Node: mount 'node _ modules' install sürətləndirmək üçün cache (volume) kimi; 'CHOKIDAR _ USEPOLLING = 1' Windows/WSL-də.
Python: `pip cache` как volume, `watchfiles`/`uvicorn --reload`.
Java: JRebel/Devtools, 'mvn -T 1C -o' + asılılıq təbəqəsi.

12) Testlər və keyfiyyət

Compose şəbəkəsi daxilində inteqrasiya testləri: 'docker compose run test'.
Testcontainers (JVM/Node/Python/.NET üçün) tam yığınsız vahid inteqrasiya üçün yaxşı seçimdir.
CI-də mok-hub → gate ilə müqavilə testləri.
Linters/Pre-commit: təkrarlanabilirlik konteynerində işə salın.

13) Devcontainers və «IDE-kimi-kod»

`devcontainer. json 'inkişaf imicini qeyd edir (CLI, SDK, linters), layihəni quraşdırır,' postCreateCommand 'qovur.
Profit: eyni alətlər, host «zibil» deyil, yeni maşın - dəqiqələrdə hazırdır.

14) Təhlükəsizlik in dev

Tətbiq şəkillərində root yoxdur; 'readOnlyRootFilesystem' mümkün olduqda.
Heç bir döyüş açarları/sirləri, hətta müvəqqəti.
Log - PII/PAN olmadan; format səviyyəsində maskalama.
Portların və şəbəkələrin bölünməsi: yalnız gateway vasitəsilə xarici giriş.

15) FinOps/yerli performans

Resursları məhdudlaşdırın: 'deploy. resources. limits '(Compose qismən oxuyur, lakin intizama kömək edir).
Fan-out azaldın (default daha az xidmət; extras - profillər).
Paket menecerləri üçün BuildKit cache və volume cache.

16) CI с Compose

Eyni 'compose istifadə edin. yaml` + `compose. ci. yaml 'heç bir bind-mounts.
Asılılıq caches - cob/qatlar arasında attachable volumes kimi.
Paralel joblar: 'name:' Kompozitdə stendlərin toqquşmaması üçün fərqli (və ya filialda prefiks).

17) Trablshuting

'docker compose ps '/' logs -f '/' exec' - əsas diaqnostika.
Kompozit şəbəkədə DNS-ni yoxlayın.
bind-mount macOS/Windows-da «yavaşlayırsa» - ': cached '/': delegated' və ya Mutagen/virtiofs.
Healthcheck «yaşıl», lakin xidmət «ölü»: appki və miqrasiya qaydası 'readiness' yoxlayın.

18) Giriş çek siyahısı

1. compose baza yığını (gateway, api, db, cache, queue). yaml.
2. Yerli düzəlişlər - override (v.gitignore).
3..env. example tam və aktual; 'make bootstrap' onu '.env' -ə köçürür.
4. Healthchecks və DB/miqrasiya gözləmə skripti.
5. Xarici provayderlər üçün WireMock/Localstack/MinIO.
6. Syding və miqrasiya kimi komandlet 'make seed/migrate'.
7. BuildKit + multi-stage, asılılıq caches.
8. Devcontainers/Makefile sürətli başlanğıc üçün.
9. Alətlər üçün 'extras' profilləri (Grafana/pgAdmin/Kafdrop).
10. CI eyni compose (+ ci-overrayd) istifadə edir.

19) Anti-nümunələr

«Monster-compose» 40 xidmətlər, həmişə çalışır: profilləri daxil edin.
Tərtibatçılar arasında ziddiyyət yaradan bərk döyülmüş limanlar.
Sirləri/açarları Git və ya '.env. example`.
Testlər üçün «İnternet» asılılığı (real PSP/KYC).
Healthcheck/gözləməyin olmaması - miqrasiya və başlanğıc yarışları.
Sidinq yoxluğu → flaky inteqrasiya testləri.

20) Yekun

Compose bir sürət mühərrikidir: bir fayl xidmət dünyasını təsvir edir və profillər/overradlar çeviklik verir. Qida paritetini saxlayın, sidinq və miqrasiyanı avtomatlaşdırın, moki və TLS-i «döyüşdə olduğu kimi» saxlayın, BuildKit-in montajlarını sürətləndirin - və iGaming/fintech-in qida ssenarilərini rahat, asan sınaqdan keçirmək və təhlükəsiz şəkildə oynatmaq üçün yerli mühit əldə edəcəksiniz.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.