GH GambleHub

Տեխնոլոգիան և ենթակառուցվածքը Docker Compose և Dev-միջավայրը

Docker Compose և Dev-միջավայրը

1) Ինչու՞ Compose-ը

Docker Compose-ը արագ միջոց է բարձրացնելու prod-ապակու կրկնօրինակը locali/CI-ում 'ծրագրեր, BD, հերթեր, cashi, հակառակը։ Նպատակները

Հավասարումը երկարությամբ (պատկերներ, կոդեր, ցանցեր) ավելի քիչ «աշխատում է իմ հետ»։

Արագ մեկնարկը նորեկների համար «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 - միայն տեղական ուղղություններ 'ածխաջրածինների մապինգներ, 108, debug դրոշներ։

.env. example ռուսական մշակողը պատճենում է «.env» և սահմանում է արժեքները։


3) Campose-ը։ 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-ը 'condect: բանաձև _ healthy "(v3-ի միջոցով waiting-ջութակի միջոցով) - պատվիրված սկիզբը։

Volumes-ի համար (BD/kash) և bind-mount կոդի համար (hot-reload)։


4) Պրոֆիլներ և մի քանի ֆայլեր

Profiles («profiles: [dev, ci, extras]») ներառում են/բացառում ծառայություններ («docker compose ---- profile extras up-d»)։

Մի քանի ֆայլեր

`docker compose -f compose. yaml -f compose. dev. yamp up '- բողոքարկման։

Տիպիկ հավաքածու

`compose. yaml '- հիմնականը։

`compose. dev. yaml '- bind-mounta, deble, ficheflagy։

`compose. extras. yaml '- գործիքային (Grafana, pgAdmin, Kafdrop)։

`compose. ci. yaml '- «գլուխ առանց գրաֆիկայի», առանց bind-mounts։


5) Մոսկվա, գաղտնիքներ և բանալիներ։

.env - փոփոխականների ընդհանուր աղբյուրը 'հոստեր, թեստային BD, դրոշներ։

Dev-ի գաղտնիքները հստակ չեն պահում։ օգտագործում ենք

տեղական dummy գաղտնիքները (հալման բանալիներ),

ինտեգրումը skinny-Vox/SOPS-ի հետ հատկապես զգայուն համար։

Սկզբունքը 'նվազագույն անհրաժեշտ տվյալները։ PAN/PII - հոսանքներ/ֆիքսթեր։


6) Հավաքում և արագություն

6. 1 Multi-stage + BuildKit

Dockerfile նպատակներով 'big', «dev», «dev», «dockerfile»; ընդհանուր cache-layer կախվածության համար։

Միացրեք BuildKit: «DODKER _ BUILDKIT = 1» (կամ եզրին)։

Քեշինգը '--mount = type = cache, target =/root/.cache/... "pip/npm/maven համար։

6. 2 Արագ ցիկլ

Առանձին target dev, որը միայն անհրաժեշտ է հավաքելու համար։

Bind-mount кода + hot-reload (nodemon, uvicorn --reload, Spring Devtools).
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) ԲԴ, 108, սիդինգ

Express (Flyway/Liquib.ru/Alembic/Prisma) սկսում են հուկ-ջութակը «db» (սպասելով healtheck) սկսելուց հետո։

Սիդինգը 'առանձին «seed» բեռնարկղը ֆիքսթուրներով։ կրկնվող և համակցված։

Տվյալների դիպուկահարները 'tom' pgdata 'կարելի է նետել/վերականգնել ջութակը' reset-db։ sh`.


8) Բրոկերներ, քաշներ, CDC

Kafka/Rabbit/Redpanda - ինչպես վաճառքում (նվազագույն եզրերը)։

Redis-ի հետ AOF-ը ներառվել է իրատեսության համար։

CDC կոնեկտորները (oporations) 'Debez.ru առանձին ծառայության մեջ վերլուծության ինտեգրալ թեստերի համար։


9) Արտաքին մոծակները

WireMock/Prism-ի համար, MockServer-ը բարդ գործողությունների համար։

Mailhog/SMTP4Dev նամակների համար։

Altalstack/MinIO ամպային հոսքերի և S3-2019 համար։

Քաղաքականությունը 'բոլոր արտաքին PFC/KYC/KTS-ը' պայմանագրերով (OpenAPI), ոչ թե «ինտերնետում»։


10) Հակադարձ ֆորումը և TFC-ը

Traefik/NGINX-ը բաժանում է տեղական ծառայություններ («test», «.local»)

`api. local. test`, `mockpsp. local. test`.

TFC: mkc.ru-ը վստահելի ռուսական ձեռնարկության համար փորձարկելու HSTS/secure-cookies-ը։

Sticky-նստաշրջանները միացրեք միայն այն դեպքերի համար, որտեղ դա իսկապես կարևոր է։


11) Զարգացողի պրոֆիլները ՝ Node/Python/Java

Node: mount 'node _ modules' ինչպես cash (volume), որպեսզի արագացնի install;

Python: `pip cache` как volume, `watchfiles`/`uvicorn --reload`.

Java: JRebel/Devtoope, «mvn-T 1C -o» + շերտը կախվածությամբ։


12) Թեստեր և որակներ

Ինտեգրացիոն թեստերը հետապնդում ենք Compose-ի ցանցում '«docker compose run test»։

Testcontainers (JVM/Node/Python/.NET) - լավ տարբերակ unit կոդերի համար առանց ամբողջական ապակու։

Պայմանագիր-թեստերը թոքթ-հի հետ CI-ում։

Linters/Pre-commit: Նորից սկսել բեռնարկղում։


13) Devcontainers և «IDE-ի կոդը»

`devcontainer. Json '- ը գրանցում է ստրուկի պատկերը (CLI, SDK, linters), տեղադրում է նախագիծը, քշում է «PostCrement Command»։

Podit: Նույն գործիքները, մենք չենք «սայթաքում», նոր մեքենան պատրաստ է րոպեում։


14) Dev-ի անվտանգությունը

Առանց root դիմումների պատկերներում; «readOnlyRootem System», երբ հնարավոր է։

Ոչ մի ռազմական գործողություն/գաղտնիքներ, նույնիսկ ժամանակավորապես։

Լոգները 'առանց PII/PAN; դիմակավորում կերամիկական մակարդակում։

Ցանցերի և ցանցերի սեգրեգացիան 'արտաքին հասանելիությունը միայն gateway-ի միջոցով։


15) FinOps/լոկալի արտադրողականությունը

Սահմանափակեք ռեսուրսները 'deploy։ resources. limits '(Compose կարդում է մասամբ, բայց օգնում է կարգապահությանը)։

Նվազեցրեք ֆան-աուտը (ավելի քիչ ծառայություններ լռելյայն; extras - պրոֆիլներ)։

Քաշ BuildKit-ը և volume-cashi-ը ձեռնարկության ղեկավարների համար։


16) CI с Compose

Օգտագործեք նույն «compose» -ը։ yaml` + `compose. ci. yaml 'առանց bind-mounts։

Կախվածության քեշները որպես attachable volumes ջոբների/շերտերի միջև։

Զուգահեռ ջոբները ՝ «name: » Compose-ում տարբեր (կամ նախածանց ճյուղով), որպեսզի սթենդները չանդրադառնան։


17) Տրաբլշուտինգը

«docker compose pose ps »/« logs -f/' exec» - ռուսական ախտորոշիչ։

Ստուգեք RF-ը Compose ցանցում (անունով ծառայություն)։

Եթե bind-mount-ը «դանդաղեցնում» է OS/Windows-ի վրա '«: cached ': winegated» կամ Mutagen/virtiom։

Healthcheck-ը «կանաչ» է, բայց ծառայությունը «մեռած» է 'wwww.readiness' ձեր գլխարկը և միգրացիայի կարգը։


18) Ներդրման թուղթ

1. Հիմնական հոսքը (gateway, api, db, cache, queue) compose-ում։ yaml.

2. Տեղական աջերը override (v.gitignore)։

3..env. example ամբողջական և իրական, «make bootstrap» -ը պատճենում է այն «.env» -ում։

4. Healthchecks-ը և BD/խմբակցությունների սպասման ջութակը։

5. WireMock/Winalstack/MinIO արտաքին պրովայդերների համար։

6. Սիդինգը և կոմպոզիցիան որպես «make seed/migrate» թիմեր։

7. BuildKit + multi-stage, կախվածության քեշներ։

8. Devcontainers/Makefile արագ սկսելու համար։

9. Ավելցուկ «extras» գործիքների համար (Grafana/pgaDmin/Kafdrop)։

10. CI-ն օգտագործում է նույն compose (+ ci-verraid)։


19) Anti-patterna

«Monstr-compose» -ը 40 ծառայությունների վրա, միշտ գործարկվել է 'միացրեք պրոֆիլները։

Կոպիտ ստեղնաշարեր, որոնք բախվում են զարգացողների միջև։

«Ինտերնետից» կախվածությունը թեստերի համար (իրական PFC/KYC)։

Healthcheck/սպասման բացակայությունը միգրացիաների և սկսնակների մրցավազքն է։

Գաղտնիքները/բանալիները Git-ում կամ '.env. example`.

Սիդինգի բացակայությունը flaky ինտեգրացիոն թեստեր է։


20) Արդյունքը

Compose-ը զարգացող արագության շարժիչ է, մի ֆայլ նկարագրում է ձեր ծառայության աշխարհը, իսկ պրոֆիլները/werraids տալիս են ճկունություն։ Աջակցեք պարիտետին վաճառքով, ավտոմատիզացրեք նստատեղը, պահեք կամուրջները և TRC-ը «ինչպես մարտում», արագացրեք BuildKit-ի հավաքումները, և դուք կունենաք տեղական միջավայր, որտեղ հարմար է աշխատել, հեշտությամբ փորձարկել և անվտանգ վերարտադրել iGaming/fintech-ը։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։