GH GambleHub

Teknolojiler ve Altyapı - Docker Compose ve Dev Ortamı

Docker Besle ve Dev ortamı

1) Neden oluşturmak

Docker Compose, yerel/CI'daki üretim yığınının bir kopyasını yükseltmenin hızlı bir yoludur: uygulamalar, veritabanları, kuyruklar, önbellekler, ters proxy, ioc hizmetleri. Hedefler:
  • Satışlarla parite (resimler, değişkenler, ağlar) - daha az'benim için çalışıyor ".
  • Yeni başlayanlar için hızlı başlangıç - 'makyaj've savaşa.
  • Geliştirici/şube başına izole standlar - çakışmalar olmadan paralel çalışma.
  • Gerçek bağımlılıklar üzerinde entegrasyon testleri.

2) Temel depo yapısı


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 (опционально)
Öneriler:
  • beste. yaml - dev/CI için aynı "iskelet" (hizmetler, ağlar, hacimler) açıklar.
  • Override - sadece yerel düzenlemeler: dizin eşlemeleri, bağlantı noktaları, hata ayıklama bayrakları.
  • .env Örnek - geliştirici '.env'e kopyalar ve değerleri değiştirir.

3) Çerçeve oluşturmak. yaml (örnek)

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: {}
Önemli noktalar:
  • Ağ geçidi olarak Traefik/NGINX: yönlendirme şemasını satış şemasına yaklaştırır.
  • Healthcheck ve 'condition ile depends_on: service_healthy' (bekleyen komut dosyaları aracılığıyla v3'te) - düzenli bir başlangıç.
  • Kalıcılık için birimler (DB/cache) ve kod için bind-mount (hot-reload).

4) Profiller ve çoklu dosyalar

Profiller ('profiller: [dev, ci, extras]') servisleri içerir/hariç tutar ('docker compose --profile extras up -d').

Birden çok dosya:
  • 'docker compose -f compose. yaml -f beste. Dev. yaml up '- birleştirme konfigürasyonları.
Tipik set:
  • 'beste. Yaml 'temel.
  • 'beste. Dev. yaml '- bağlama-binekler, debaglar, phicheflags.
  • 'beste. ekstralar. yaml '- enstrümantal (Grafana, pgAdmin, Kafdrop).
  • 'beste. Ci. yaml '- "grafiksiz kafa", bağlama bağlantıları olmadan.

5) Değişkenler, sırlar ve ayarlar

.env - değişkenlerin ortak kaynağı: hosts, test veritabanı kredileri, bayraklar.

Açıkça dev'de sır saklamıyoruz; Kullanıyoruz:
  • Yerel kukla sırları (stub anahtarları),
  • Ekstra hassas için skinny-vault/sop ile entegrasyon.
  • İlke: Minimum gerekli veri. PAN/PII - belirteçler/düzeltmeler.

6) Montajlar ve hız

6. 1 Çok aşamalı + BuildKit

'Temel', 'dev', 'prod' hedefleri ile Dockerfile; bağımlılıklar için paylaşılan önbellek katmanı.
BuildKit'i dahil edin: 'DOCKER _ BUILDKIT = 1' (veya yapılandırmada).
Önbelleğe alma: '--mount = type = cache, target =/root/.cache/...' pip/npm/maven için.

6. 2 Hızlı döngü

Bind-mount кода + hot-reload (nodemon, uvicorn --reload, Spring Devtools).
Sadece istenen bir montaj ile ayrı bir dev hedef.
Makefile цели: "Make up", "make down", "make logs", "make rebuild", "make seed".

Makefile örneği:
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, göçler, siding

Geçişler (Flyway/Liquibase/Alembic/Prisma) 'db' başlangıcından sonra bir kanca komut dosyası ile başlatılır (sağlık kontrolü için beklenir).
Siding: armatürlü ayrı bir 'tohum' kabı; tekrarlanabilir ve idempotent.
Veri anlık görüntüleri: 'pgdata' birimi 'reset-db komut dosyası ile sıfırlanabilir/geri yüklenebilir. sh '.


8) Brokerler, Önbellekler, CDC

Kafka/Tavşan/Redpanda - prod'da olduğu gibi (minimum yapılandırmalar).
Gerçekçilik için AOF ile Redis dahil.
CDC konektörleri (isteğe bağlı): Entegrasyon analizi testleri için ayrı bir serviste debezium.


9) Dış Tedarikçi Mocks

REST için WireMock/Prism, karmaşık senaryolar için MockServer.
Mektuplar için Mailhog/SMTP4Dev.
Bulut mağazaları ve S3 uyumluluğu için Localstack/MinIO.
Politika: Tüm harici PSP/KYC/KMS - sözleşmeler altındaki sahte merkez (OpenAPI) aracılığıyla ve "internette'değil.


10) Ters proxy ve TLS

Traefik/NGINX hizmetleri yerel alanlara ('.test', '.local') dağıtır:
  • 'api. yerel. Test ',' mockpsp. yerel. test '.
  • TLS: mkcert to issue a trusted local certificate to test HSTS/secure-cookies. - HSTS/güvenli çerezleri test etmek için güvenilir bir yerel sertifika vermek için mkcert.
  • Yapışkan oturumları yalnızca gerçekten önemli olduğu durumlarda açın.

11) Geliştirici Profilleri: Düğüm/Python/Java

Node: Kurulumu hızlandırmak için önbellek (birim) olarak 'node _ modules' mount; 'CHOKIDAR _ USEPOLLING = 1' Windows/WSL üzerinde.
Python: Hacim как 'pip cache', 'watchfiles'/' uvicorn --reload'.
Java: JRebel/Devtools, bağımlılıkları olan 'mvn -T 1C -o' + katmanı.


12) Testler ve kalite

Entegrasyon testleri Compose ağı içinde yarış: 'docker compose run test'.
Testcontainers (JVM/Node/Python/.NET için) tam bir yığın olmadan birim entegrasyonu için iyi bir seçenektir.
Gate mock hub ile CI sözleşme testleri.
Linters/Pre-commit: Tekrarlanabilirlik için konteynerde çalıştırın.


13) Devcontainers ve "IDE-as-code"

'devcontainer. json 'geliştiricinin (CLI, SDK, linters) imajını düzeltir, projeyi monte eder,' postCreateCommand'ı çalıştırır.
Kâr: Aynı araçlar, ana bilgisayarı "tıkamayın", yeni makine dakikalar içinde hazır.


14) Dev'de güvenlik

Uygulama görüntülerinde kök olmadan; Mümkünse 'readOnlyRootFilesystem'.
Savaş anahtarları/sırları yok, geçici olarak bile.
Günlükler - PII/PAN olmadan; Biçimlendirici düzeyinde maskeleme.
Bağlantı noktası ve ağ ayrımı: yalnızca ağ geçidi üzerinden harici erişim.


15) FinOps/yerelde performans

Kaynakları sınırla: 'konuşlandırın. kaynakları. Limits '(Beste kısmen okur, ancak disipline yardımcı olur).
Fan çıkışını azaltın (daha az varsayılan hizmet; ekstralar - profiller).
Paket yöneticileri için BuildKit önbellek ve birim önbellekleri.


16) CI с Compose

Aynı 'oluştur'u kullan. yaml '+' beste. Ci. Bağlama bağları olmadan yaml '.
Bağımlılık önbellekleri, işler/katmanlar arasında eklenebilir hacimler gibidir.
Paralel jabs: 'name:' In Compose, standların çakışmaması için farklıdır (veya şubeye göre önek).


17) Trableshooting

'docker compose ps'/' logs -f'/' exec' - temel tanılama.
Compose ağında DNS'yi kontrol edin (isme göre hizmet).
MacOS/Windows'ta bind-mount "yavaşlarsa" - ': cached'/': delegated' veya Mutagen/virtiofs.
Sağlık kontrolü'yeşil ", ancak hizmet" ölü ": uppka'nızın" hazır olup olmadığını've göç sırasını kontrol edin.


18) Uygulama kontrol listesi

1. Temel yığın (gateway, api, db, cache, queue) oluşturulur. Yaml.
2. Yerel düzenlemeler - geçersiz kılma (v.gitignore).
3. .env Örnek tam ve güncel; 'make bootstrap' bunu '.env'e kopyalar.
4. Healthcheckler ve veritabanı/migrasyon bekleme betiği.
5. Dış sağlayıcılar için WireMock/Localstack/MinIO.
6. Siding ve 'make seed/migrate' cmdlets olarak göçler.
7. BuildKit + çok aşamalı, bağımlılık önbellekleri.
8. Hızlı bir başlangıç için Devcontainers/Makefile.
9. Araçlar için 'ekstralar' profilleri (Grafana/pgAdmin/Kafdrop).
10. CI aynı kompozisyonu kullanır (+ ci-overlide).


19) Anti-desenler

Her zaman çalışan 40 hizmet için "Monster-compose": profilleri açın.
Geliştiriciler arasında çelişen sert çivili bağlantı noktaları.
Git veya '.env'deki sırlar/anahtarlar Örnek '.
Testler için "İnternet'e bağımlılık (gerçek PSP/KYC).
Sağlık kontrolü/beklenti eksikliği - göç ve başlangıç yarışları.
Siding yok - lapa lapa entegrasyon testleri.


20) Alt satır

Compose, geliştirme hızının motorudur: bir dosya hizmet dünyanızı tanımlar ve profiller/geçersiz kılmalar esneklik sağlar. Satışlarla pariteyi koruyun, siding ve göçleri otomatikleştirin, moki ve TLS'yi "savaşta olduğu gibi" tutun, BuildKit yapılarını hızlandırın - ve iGaming/fintech satış senaryolarını test etmenin ve güvenli bir şekilde yeniden üretmenin kolay olduğu, çalışmanın uygun olduğu yerel bir ortama sahipsiniz.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.