GH GambleHub

Tehnologiýalar we infrastruktura → Docker Compose we Dev-gurşaw

Docker Compose we Dev-gurşaw

1) Näme üçin Compose

Docker Compose - lokal/CI: programmalar, DB, nobatlar, nagt pullar, ters proxy, mok hyzmatlarynda prod-stekiň nusgasyny ýokarlandyrmagyň çalt usuly. Maksatlar:
  • Iýmit bilen deňlik (şekiller, üýtgeýjiler, torlar) → az "mende işleýär".
  • Täze başlanlar üçin çalt başlamak → 'make up' we söweşe.
  • Işläp düzüjiniň/şahanyň izolirlenen stendleri → gapma-garşylyksyz paralel iş.
  • Hakyky endiklerde integrasiýa synaglary.

2) Repozitoryň esasy gurluşy


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 (опционально)
Teklipler:
  • compose. yaml - dev/CI üçin birmeňzeş "skeleti" (hyzmatlary, torlary, jildleri) suratlandyrýar.
  • override - diňe ýerli düzedişler: kataloglaryň mappingleri, portlar, debug-baýdaklar.
  • .env. example → dörediji '.env' -ni göçürýär we bahalary goýýar.

3) compose çarçuwasy. yaml (mysal)

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: {}
Esasy nokatlar:
  • Traefik/NGINX gateway hökmünde: routing shemasyny azyk shemasyna ýakynlaşdyrýar.
  • Healthcheck we depends_on c 'condition: service_healthy' (waiting-skriptlar arkaly v3-de) - tertipli başlangyç.
  • Üýtgewsizlik üçin (DB/keş) we kod üçin bind-mount (hot-reload).

4) Profiller we birnäçe faýllar

Profiles ('profiles: [dev, ci, extras]') hyzmatlary öz içine alýar/aýyrýar ('docker compose --profile extras up -d').

Birnäçe faýl:
  • `docker compose -f compose. yaml -f compose. dev. yaml up '- konfigurasiýalary boşatmak.
Adaty toplumy:
  • `compose. yaml '- esasy.
  • `compose. dev. yaml '- bind-mounty, debag, ficheflagy.
  • `compose. extras. yaml '- instrumental (Grafana, pgAdmin, Kafdrop).
  • `compose. ci. yaml '- "grafiksiz kelle", bind-mountsyz.

5) Üýtgeýjiler, syrlar we sazlamalar

.env - üýtgeýjileriň umumy çeşmesi: hostlar, synag DB kreddleri, baýdaklar.

Dev-de syrlary aç-açan saklamaýarys; ulanýarys:
  • lokal dummy-syrlar (düwmeler),
  • aýratyn duýgur üçin skinny-Vault/SOPS bilen integrasiýa.
  • Prinsip: iň az zerur maglumatlar. PAN/PII - bellikler/fiksturalar.

6) Gurnama we tizlik

6. 1 Multi-stage + BuildKit

Dockerfile 'base', 'dev', 'prod' maksatlary bilen; garaşlylyk üçin umumy cache-layer.
BuildKit goşuň: 'DOCKER _ BUILDKIT = 1' (ýa-da konfigada).
Kesmek: '--mount = type = cache, target =/root/.cache/...' pip/npm/maven üçin.

6. 2 Çalt aýlaw

Bind-mount кода + hot-reload (nodemon, uvicorn --reload, Spring Devtools).
Diňe zerur zatlary ýygnamak bilen aýratyn dev nyşany.
Makefile цели: `make up`, `make down`, `make logs`, `make rebuild`, `make seed`.

Makefile mysaly:
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, migrasiýa, siding

Göçmek (Flyway/Liquibase/Alembic/Prisma) 'db' (healthcheck garaşmak) başlanandan soň huk-script tarapyndan başlaýar.
Siding: fiksturalary bolan aýratyn 'seed' konteýni; gaýtalanýan we idempotent.
Data snapshots: tom 'pgdata' 'reset-db' skripti bilen täzeden/dikeldilip bilner. sh`.


8) Brokerler, nagt pullar, CDC

Kafka/Rabbit/Redpanda - önümdäki ýaly (iň az konfigi).
Realizm üçin AOF bilen Redis.
CDC-konnektorlar (goşmaça): Debezium analitikanyň integrasiýa synaglary üçin aýratyn hyzmatda.


9) Daşarky üpjün edijileriň moki

REST üçin WireMock/Prism, çylşyrymly ssenariler üçin MockServer.
Hatlar üçin Mailhog/SMTP4Dev.
Bulutlar we S3-gabat gelmek üçin Localstack/MinIO.
Syýasat: ähli daşarky PSP/KYC/KMS - "internete" däl-de, şertnamalar boýunça mok-hub (OpenAPI) arkaly.


10) Ters proxy we TLS

Traefik/NGINX lokal domenler boýunça hyzmatlary paýlaýar ('.test', '.local'):
  • `api. local. test`, `mockpsp. local. test`.
  • TLS: HSTS/secure-cookies-i barlamak üçin ygtybarly ýerli şahadatnama bermek üçin mkcert.
  • Sticky sessiýalary diňe möhüm bolan ýagdaýlar üçin açyň.

11) Dörediji profilleri: Node/Python/Java

Node: mount 'node _ modules' install çaltlaşdyrmak üçin keş (volume) hökmünde; 'CHOKIDAR _ USEPOLLING = 1' Windows/WSL-de.
Python: `pip cache` как volume, `watchfiles`/`uvicorn --reload`.
Java: JRebel/Devtools, 'mvn -T 1C -o' + garaşly gatlak.


12) Synaglar we hili

Integrasiýa synaglaryny Compose: 'docker compose run test' ulgamynyň içinde kowýarys.
Testcontainers (JVM/Node/Python/.NET üçin) - unit-integrasiýa üçin gowy wariant.
CI-de mok-hub → gate bilen şertnama-synaglar.
Linterler/Pre-commit: gaýtalanmak üçin konteýnerde başla.


13) Devcontainers we "IDE-kod"

`devcontainer. json 'usr (CLI, SDK, linters) şekilini düzedýär, taslamany redaktirleýär,' postCreateCommand '-i kowýar.
Girdeji: birmeňzeş gurallar, hosteri "zaýalamaýarys", täze maşyn - minutlarda taýýar.


14) Dev-de howpsuzlyk

Programma şekillerinde kök ýok; 'readOnlyRootFilesystem' mümkin bolanda.
Söweş açarlary/syrlary ýok, hatda wagtlaýyn.
Logi - PII/PAN bolmasa; format derejesinde gizlemek.
Portlary we torlary bölmek: daşarky giriş diňe gateway arkaly.


15) FinOps/lokal öndürijilik

Resurslary çäklendiriň: 'deploy. resources. limits '(Compose bölekleýin okaýar, ýöne tertip-düzgüne kömek edýär).
Janköýerligi azaldyň (az standart hyzmatlar; extras - profiller).
Paket dolandyryjylary üçin "BuildKit" we "volume" keş.


16) CI с Compose

Şol 'compose' -ni ulanyň. yaml` + `compose. ci. yaml 'bind-mountsyz.
Garaşlylyk keseleri - joblaryň/gatlaklaryň arasynda attachable volumes ýaly.
Paralel joblar: 'name:' stendler gapma-garşy bolmazlygy üçin Compose-da dürli (ýa-da şahanyň prefiksi) bar.


17) Trablshuting

'docker compose ps '/' logs -f '/' exec' - esasy diagnostika.
"Compose" ulgamynda DNS-i barlaň.
bind-mount macOS/Windows-da "haýallasa" - ': cached '/': delegated' ýa-da Mutagen/virtiofs.
Healthcheck "ýaşyl", ýöne "öli" hyzmaty: appkaňyzyň 'readiness' -ini we migrasiýa tertibini barlaň.


18) Girizmegiň çek-sanawy

1. Esasy yığını (gateway, api, db, cache, queue) compose. yaml.
2. Lokal düzedişler - override (v.gitignore).
3..env. example doly we aktual; 'make bootstrap' ony '.env' -e göçürýär.
4. Healthchecks we DB/migrasiýa garaşmak skripti.
5. WireMock/Localstack/MinIO daşarky üpjün edijiler üçin.
6. 'make seed/migrate' komandletleri hökmünde siding we göçmek.
7. BuildKit + multi-stage, garaşlylyk keşleri.
8. Çalt başlamak üçin Devcontainers/Makefile.
9. Gurallar üçin 'extras' profilleri (Grafana/pgAdmin/Kafdrop).
10. CI şol bir compose (ci-overreid) ulanýar.


19) Anti-patternler

Elmydama işe girizilen 40 hyzmat üçin "Monster-compose": profilleri açyň.
Işläp düzüjileriň arasynda gapma-garşylykly gaty çüýlenen portlar.
Git ýa-da '.env. example`.
Synaglar üçin "internete" garaşlylyk (hakyky PSP/KYC).
Healthcheck/garaşmagyň ýoklugy - migrasiýa we başlangyç ýaryşlary.
Sidingiň ýoklugy → flaky integrasiýa synaglary.


20) Jemleýji

Compose, ösüş tizliginiň hereketlendirijisidir: bir faýl hyzmat dünýäsiňizi suratlandyrýar we profiller/overradlar çeýeligi berýär. Azyk bilen deňligi saklaň, siding we migrasiýany awtomatlaşdyryň, mok we TLS-i "söweşdäki ýaly" saklaň, BuildKit-iň gurnamalaryny çaltlaşdyryň - we iGaming/fintech-iň azyk ssenarilerini işlemek, synagdan geçirmek we howpsuz oýnamak üçin amatly ýerli gurşaw alarsyňyz.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.