Τεχνολογίες και υποδομές - Σύνθεση Docker και Dev Περιβάλλον
Περιβάλλον Docker Compose και Dev
1) Γιατί συνθέτουν
Το Docker Compose είναι ένας γρήγορος τρόπος για να ανεβάσετε ένα αντίγραφο της στοίβας παραγωγής σε τοπικό/CI: εφαρμογές, βάσεις δεδομένων, ουρές, κρύπτες, αντίστροφο διαμεσολαβητή, υπηρεσίες ioc. Στόχοι:- Ισοτιμία με τις πωλήσεις (εικόνες, μεταβλητές, δίκτυα) → λιγότερο «λειτουργεί για μένα».
- Γρήγορη εκκίνηση για αρχάριους → «μακιγιάζ» και στη μάχη.
- Απομονωμένα περίπτερα ανά προγραμματιστή/κλάδο → παράλληλη εργασία χωρίς συγκρούσεις.
- Δοκιμές ενσωμάτωσης σε πραγματικές εξαρτήσεις.
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 (опционально)
Συστάσεις:
- συνθέτη. yaml - περιγράφει το «σκελετό» (υπηρεσίες, δίκτυα, όγκοι) το ίδιο για dev/CI.
- παράκαμψη - μόνο τοπικές επεξεργασίες: χαρτογραφήσεις καταλόγων, θύρες, σημαίες αποσφαλμάτωσης.
- .env. παράδειγμα → ο προγραμματιστής αντιγράφει το «.env» και αντικαθιστά τις τιμές.
3) Σύνθεση πλαισίου. 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 ως πύλη: φέρνει το σύστημα δρομολόγησης πιο κοντά στις πωλήσεις.
- Healthcheck and depends_on with 'condition: service_healthy' (σε v3 μέσω σεναρίων αναμονής) - μια εύτακτη αρχή.
- Όγκοι για ανθεκτικότητα (DB/cache) και δέσμευση-τοποθέτηση για κωδικό (επαναφόρτωση εν θερμώ).
4) Προφίλ και πολλαπλά αρχεία
Τα προφίλ ("προφίλ: [dev, ci, extras]") περιλαμβάνουν/αποκλείουν τις υπηρεσίες ("docker compose --profile extras up - ).
Πολλαπλά αρχεία:- 'docker σύνθεση -f σύνθεση. yaml -f σύνθεση. dev. yaml up '- συγχωνευμένες διαμορφώσεις.
- 'compose. yaml 'είναι βασική.
- 'compose. dev. yaml '- bind-mounts, debags, phicheflags.
- 'compose. extras. yaml '- instrumental (Grafana, pgAdmin, Kafdrop).
- 'compose. ci. yaml '- «κεφαλή χωρίς γραφικά», χωρίς πρόσδεση.
5) Μεταβλητές, μυστικά και ρυθμίσεις
κοινή πηγή μεταβλητών: ξενιστές, μονάδες βάσης δεδομένων δοκιμών, σημαίες.
Δεν κρατάμε μυστικά σε dev ρητά? χρησιμοποιούμε:- τοπικά εικονικά μυστικά (κλειδιά),
- ενσωμάτωση με κοκαλιάρικο θησαυροφυλάκιο/sops για εξαιρετικά ευαίσθητα.
- Αρχή: ελάχιστα απαιτούμενα δεδομένα. PAN/PII - μάρκες/διορθώσεις.
6) Σύνολα και ταχύτητα
6. 1 Multi-stage + BuildKit
Dockerfile με στόχους «βάση», «dev», «prod», κοινό στρώμα μνήμης για εξαρτήσεις.
Συμπεριλάβετε το BuildKit: 'DOCKER _ BUILDKIT = 1' (ή σε ρύθμιση).
Caching: '-mount = type = cache, target =/root/.cache/...' for pip/npm/maven.
6. 2 Ταχύς κύκλος
кода + επαναφόρτωση εν θερμώ (nodemon, uvicorn-reload, Spring Devtools).
Ένας ξεχωριστός στόχος dev με μια συναρμολόγηση μόνο του επιθυμητού.
Makefile : 'make up', 'make down', 'make log ,' make rebuilding ',' make speed '.
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, μετανάστευση, sideing
Οι μεταναστεύσεις (Flyway/Liquibase/Alembic/Prisma) ξεκινούν από ένα σενάριο γάντζων μετά την έναρξη του 'db' (αναμονή για τον έλεγχο υγείας).
Πλαϊνά: ξεχωριστό δοχείο «σπόρων» με εξαρτήματα. επαναλαμβανόμενο και ευδιάκριτο.
Στιγμιότυπα δεδομένων: ο όγκος 'pgdata' μπορεί να επαναρυθμιστεί/αποκατασταθεί με το σενάριο 'reset-db. sh '.
8) Μεσίτες, Caches, CDC
Kafka/Rabbit/Redpanda - όπως στο prod (ελάχιστες ρυθμίσεις).
Redis με AOF συμπεριλαμβάνονται για ρεαλισμό.
Συνδέσεις CDC (προαιρετικά): Debezium σε ξεχωριστή υπηρεσία για δοκιμές ανάλυσης ολοκλήρωσης.
9) Εξωτερικός προμηθευτής Mocks
WireMock/Prism for REST, MockServer για σύνθετα σενάρια.
για γράμματα.
Localstack/MinIO για αποθήκες νεφών και συμβατότητα S3.
Πολιτική: όλα τα εξωτερικά PSP/KYC/KMS - μέσω του κομβικού σημείου των συμβάσεων (OpenAPI) και όχι «στο Διαδίκτυο».
10) Αντίστροφη πληρεξούσια και TLS
Το Traefik/NGINX διανέμει υπηρεσίες σε τοπικούς τομείς ('.test', '.local'):- 'api. τοπικά. δοκιμή ',' mockpsp. τοπικά. δοκιμή '.
- TLS: mkcert για την έκδοση αξιόπιστου τοπικού πιστοποιητικού για τη δοκιμή HSTS/ασφαλών cookies.
- Ενεργοποιήστε τις κολλώδεις συνεδρίες μόνο για περιπτώσεις όπου είναι πραγματικά σημαντικό.
11) Προφίλ προγραμματιστών: κόμβος/Python/Java
Κόμβος: mount 'node _ modules' ως cache (όγκος) για να επιταχύνει την εγκατάσταση? 'CHOKIDAR _ USEPOLLING = 1' στα Windows/WSL.
Python: 'pip cache' как volume, 'watchfiles '/' uvicorn-reload'.
Ιάβα: JRebel/Devtools, 'mvn -T 1C -o' + στρώμα με εξαρτήσεις.
12) Δοκιμές και ποιότητα
Αγώνας δοκιμών ενσωμάτωσης εντός του δικτύου Compose: 'docker compose run test'.
Testcontainers (για JVM/Node/Python/.NET) είναι μια καλή επιλογή για ενσωμάτωση μονάδας χωρίς πλήρη στοίβα.
Δοκιμές σύναψης σύμβασης με τον κόμβο της → πύλης στον ΚΚΠ.
Χιτώνια/Προ-δέσμευση: εκτελείται σε δεξαμενή για επαναληψιμότητα.
13) Devcontainers και «IDE-as-code»
"devontainer. json 'fixes the image of the developer (CLI, SDK, linters), mounts the project, runs' postCreedCommand '.
Κέρδος: τα ίδια εργαλεία, μην «μπλοκάρετε» τον ξενιστή, το νέο μηχάνημα είναι έτοιμο σε λίγα λεπτά.
14) Ασφάλεια σε dev
Χωρίς ρίζα σε εικόνες εφαρμογής. 'readLongRootFilesystem' όταν είναι δυνατόν.
Δεν υπάρχουν πλήκτρα μάχης/μυστικά, ακόμη και προσωρινά.
Αρχεία καταγραφής - χωρίς PII/PAN· κάλυψη σε επίπεδο μορφοτροπέα.
Διαχωρισμός λιμένων και δικτύων: εξωτερική πρόσβαση μόνο μέσω πύλης.
15) FinOps/επιδόσεις σε τοπικό επίπεδο
Περιορισμός των πόρων: "ανάπτυξη. τους πόρους. όρια "(η σύνθεση διαβάζει εν μέρει, αλλά βοηθά στην πειθαρχία).
Μείωση του ανεμιστήρα (λιγότερες προκαθορισμένες υπηρεσίες· extras - προφίλ).
Κρύπτες BuildKit και κρύπτες όγκου για διαχειριστές πακέτων.
16) CI с Σύνθεση
Χρησιμοποιήστε το ίδιο 'compuse. yaml '+' σύνθεση. ci. yaml 'χωρίς δεσμευτικά στηρίγματα.
Οι κρύπτες εξάρτησης είναι σαν προσαρμόσιμοι όγκοι μεταξύ θέσεων εργασίας/στρωμάτων.
Παράλληλα jabs: 'name:' in Compose is different (ή πρόθεμα by branch) έτσι ώστε οι εξέδρες να μην συγκρούονται.
17) Διαδρομή
'docker compose p /' logs -f '/' exec' - βασικά διαγνωστικά.
Ελέγξτε το DNS στο δίκτυο σύνθεσης (ονομαστική υπηρεσία).
Εάν το δέσιμο «επιβραδύνει» σε macOS/Windows - ': cached '/': κατ' εξουσιοδότηση 'ή Mutagen/virtiofs.
Το Healthcheck είναι «πράσινο», αλλά η υπηρεσία είναι «νεκρή»: ελέγξτε την «ετοιμότητα» του άνω μέρους σας και τη σειρά των μεταναστεύσεων.
18) Κατάλογος ελέγχου εφαρμογής
1. Βασική στοίβα (πύλη, api, db, cache, σειρά αναμονής) σε σύνθεση. yaml.
2. Τοπικές επεξεργαστές - σε παράκαμψη (v.gitignore).
3. .env. παράδειγμα πλήρους και τρέχοντος· Το «make bootstrap» το αντιγράφει στο «.env».
4. Υγειονομικοί έλεγχοι και σενάριο αναμονής βάσης δεδομένων/μετανάστευσης.
5. WireMock/Localstack/MinIO για εξωτερικούς παρόχους.
6. Siding and migration as 'make sport/migrate' cmdlets.
7. BuildKit + κρύπτες εξάρτησης σε πολλαπλά στάδια.
8. Devcontainers/Makefile για γρήγορη εκκίνηση.
9. Προφίλ εργαλείων «extras» (Grafana/pgAdmin/Kafdrop).
10. Το CI χρησιμοποιεί την ίδια σύνθεση (+ ci-overide).
19) Αντι-μοτίβα
«Τέρας-σύνθεση» για 40 υπηρεσίες, πάντα τρέχει: ενεργοποιήστε προφίλ.
Λιμένες με σκληρά καρφιά που συγκρούονται μεταξύ των προγραμματιστών.
Μυστικά/κλειδιά σε Git ή '.env. παράδειγμα ".
Εξάρτηση από το «Διαδίκτυο» για δοκιμές (πραγματικό PSP/KYC).
Έλλειψη υγειονομικού ελέγχου/προσδοκίας - μετανάστευση και έναρξη αγώνων.
Δεν υπάρχουν πλαϊνές → φανταχτερές δοκιμές ολοκλήρωσης.
20) Η τελική γραμμή
Η σύνθεση είναι ο κινητήρας των στροφών ανάπτυξης: ένα αρχείο περιγράφει τον κόσμο των υπηρεσιών σας και τα προφίλ/υπερβάσεις παρέχουν ευελιξία. Διατηρήστε την ισοτιμία με τις πωλήσεις, αυτοματοποιημένη πλευρά και μετανάστευση, κρατήστε moki και TLS «όπως στη μάχη», επιταχύνει BuildKit χτίζει - και έχετε ένα τοπικό περιβάλλον στο οποίο είναι βολικό να λειτουργήσει, εύκολο να δοκιμαστεί και να αναπαραχθεί με ασφάλεια iGaming/fintech σενάρια πωλήσεων.