प्रौद्योगिकी और बुनियादी ढांचा - डॉकर रचना और देव पर्यावरण
डॉकर कम्पोज और देव वातावरण
1) कंपोज क्यों करें
डॉकर कम्पोज़स्थानों/सीआई में उत्पादन स्टैक की प्रतिकृति को बढ़ाने का एक त्वरित तरीका है: एप्लिकेशन, डेटाबेस, कतारें, कैश, रिवर्स प्रॉक्सी, आईओसी सेवाएं। उद्देश्य:- बिक्री (छवियों, चर, नेटवर्क) के साथ समानता → कम "मेरे लिए काम करता है।"
- शुरुआती लोगों के लिए तेजी से शुरुआत - 'मेकअप' और लड़ाई में।
- डेवलपर/शाखा के प्रति पृथक स्टैंड - संघर्ष के बिना समानांतर काम।
- वास्तविक निर्भरता पर एकीकरण परीक्षण।
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 - देव/CI के लिए "कंकाल" (सेवाओं, नेटवर्क, संस्करणों) का वर्णन करता है।
- ओवरराइड - केवल स्थानीय संपादन: निर्देशिका मैपिंग, पोर्ट, डिबग फ्लैग्स।
- .env। उदाहरण → डेवलपर '.env' की प्रतिलिपि बनाता है और मूल्यों को विकल्प देता है।
3) फ्रेमवर्क रचना। यमल (उदाहरण)
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 और 'condition के साथ: (v3 में प्रतीक्षा स्क्रिप्ट के माध्यम से) - एक व्यवस्थित शुरुआत।
- दृढ़ ता के लिए वॉल्यूम (DB/cache) और कोड (हॉट-रीलोड) के लिए बाइंड-माउंट।
4) प्रोफाइल और कई फाइलें
प्रोफाइल ('प्रोफाइल: [dev, ci, extras]') में शामिल हैं/बाहर सेवाएं ('डॉकर रचना --profile extras up -d').
एकाधिक फ़ाइलें:- 'डॉकर रचना -f रचना। yaml -f compose। देव। yaml अप '- विलय विन्यास।
- 'compose। yaml 'बुनियादी है।
- 'compose। देव। yaml '- bind-mounts, debags, phicheflags।
- 'compose। एक्स्ट्रा। yaml '- वाद्य (Grafana, pgAdmin, Kafdrop)।
- 'compose। ci। यमल '- "ग्राफिक्स के बिना सिर", बांध-माउंट के बिना।
5) चर, रहस्य और सेटिंग्स
.env - चर का सामान्य स्रोत: मेजबान, परीक्षण डेटाबेस क्रेडिट, झंडे।
हम स्पष्ट रूप से देव में रहस्य नहीं रखते हैं; हम उपयोग करते हैं:- स्थानीय डमी रहस्य (स्टब कुंजी),
- अतिरिक्त संवेदनशील के लिए पतली-तिजोरी/सॉप के साथ एकीकरण।
- सिद्धांत: न्यूनतम आवश्यक डेटा। पैन/पीआईआई - टोकन/फिक्स।
6) विधानसभाएँ और गति
6. 1 मल्टी-स्टेज + बिजनेसकिट
लक्ष्य 'आधार', 'देव', 'प्रोड' के साथ डॉकरफाइल; निर्भरता के लिए साझा कैश-परत।
BRAINKIT शामिल करें: 'DOCKER _ BUILDKIT = 1' (या कॉन्फिग में)।
कैशिंग: '-- mount = type = cache, targe =/root/.cache/...' के लिए pip/npm/maven.
6. 2 तेज चक्र
बाइंड-माउंट кода + हॉट-रीलोड (नोडेमॉन, यूविकॉर्न --रीलोड, स्प्रिंग डेवोल्स)।
केवल वांछित की एक सभा के साथ एक अलग देव लक्ष्य।
मेकफाइल цели: 'मेकअप', 'मेक डाउन', 'मेक लॉग', 'मेक रिबिल्ड', 'बीज बनाओ'।
मेकफाइल उदाहरण: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) डीबी, माइग्रेशन, साइडिंग
प्रवासन (फ्लाईवे/लिक्विबेस/एलेम्बिक/प्रिस्मा) को 'डीबी' (हेल्थचेक की प्रतीक्षा) की शुरुआत के बाद एक हुक स्क्रिप्ट द्वारा लॉन्च किया जाता है।
साइडिंग: जुड़ नार के साथ एक अलग 'बीज' कंटेनर; दोहराने योग्य और पहचानने योग्य।
डेटा स्नैपशॉट: 'pgdata' वॉल्यूम को रीसेट/रीसेट-डीबी स्क्रिप्ट के साथ रीसेट किया जा सकता है। श '।
8) ब्रोकर्स, कैश, सीडीसी
काफ्का/खरगोश/रेडपांडा - जैसा कि प्रोड (न्यूनतम कॉन्फ्रेंस) में है।
यथार्थवाद के लिए शामिल एओएफ के साथ रेडिस।
सीडीसी कनेक्टर्स (वैकल्पिक): एकीकरण एनालिटिक्स परीक्षणों के लिए एक अलग सेवा में डेबेजियम।
9) बाहरी आपूर्तिकर्ता मॉक्स
REST के लिए वायरमॉक/प्रिज्म, जटिल परिदृश्यों के लिए मॉकसर्वर।
Mailhog/SMTP4Dev अक्षरों के लिए।
क्लाउड स्टोर और S3 संगतता के लिए Localstack/MinIO।
राजनीति: सभी बाहरी PSP/KYC/KMS - अनुबंधों (OpenAPI) के तहत मॉक हब के माध्यम से, और "इंटरनेट पर नहीं।"
10) रिवर्स प्रॉक्सी और टीएलएस
Traefik/NGINX स्थानीय डोमेन ('.test', '.local') को सेवाएं वितरित करता है:- 'आपी। स्थानीय। परीक्षण ',' मॉकप्स। स्थानीय। परीक्षण '।
- TLS: HSTS/सुरक्षित-कुकीज़का परीक्षण करने के लिए एक विश्वसनीय स्थानीय प्रमाणपत्र जारी करने के लिए mkcer
- केवल उन मामलों के लिए चिपचिपा सत्र चालू करें जहां यह वास्तव में महत्वपूर्ण है।
11) डेवलपर प्रोफाइल: नोड/पायथन/जावा
नोड: संस्थापन को गति देने के लिए 'नोड _ मॉड्यूल' को कैश (वॉल्यूम) के रूप में माउंट करें; Windows/WSL पर 'CHOKIDAR _ USEPOLING = 1'।
पायथन: 'पाइप कैश' как वॉल्यूम, 'वॉचफाइल्स '/' uvicorn --reload'।
जावा: JRebel/Devtools, 'mvn -T 1C-o' + निर्भरता के साथ परत।
12) परीक्षण और गुणवत्ता
Compose नेटवर्क के अंदर एकीकरण परीक्षण दौड़: 'डॉकर कंपोज रन टेस्ट'।
Testconteners (JVM/Node/Python/.NET के लिए) एक पूर्ण स्टैक के बिना इकाई एकीकरण के लिए एक अच्छा विकल्प है।
सीआई में → गेट मॉक हब के साथ अनुबंध परीक्षण।
लिंटर्स/प्री-कमिट: दोहराव के लिए कंटेनर में चलाएं।
13) Devconteners और "IDE-as-code"
'devcontener। json 'डेवलपर (CLI, SDK, लिंटर्स) की छवि को ठीक करता है, परियोजना को माउंट करता है,' पोस्टकमांड 'चलाता है।
लाभ: एक ही उपकरण, मेजबान को "बंद" न करें, नई मशीन मिनटों में तैयार है।
14) देव में सुरक्षा
अनुप्रयोग छवियों में जड़ के बिना; जब संभव हो तो 'ReadeOnlRootFilesystem'।
कोई लड़ाई कुंजी/रहस्य, यहां तक कि अस्थायी रूप से।
लॉग - पीआईआई/पैन के बिना; प्रारूपण स्तर पर मास्किंग।
पोर्ट और नेटवर्क अलगाव: केवल गेटवे के माध्यम से बाहरी पहुंच।
15) लोकेल में FinOps/प्रदर्शन
संसाधनों को सीमित करें: 'तैनात करें। संसाधन। सीमा '(कम्पोज़आंशिक रूप से पढ़ ता है, लेकिन अनुशासन में मदद करता है)।
फैन-आउट कम करें (कम डिफ़ॉल्ट सेवाएं; एक्स्ट्रा - प्रोफाइल)।
पैकेज प्रबंधकों के लिए बिल्डकिट कैश और वॉल्यूम कैश।
16) सीआई с कंपोज़
उसी 'compose का उपयोग करें। yaml '+' रचना। ci। यमल 'बिना बांधे माउंट के।
निर्भरता कैश नौकरियों/परतों के बीच संलग्न मात्रा की तरह हैं।
समानांतर जैब: 'नाम:' कम्पोज़में अलग है (या शाखा द्वारा उपसर्ग) ताकि स्टैंड संघर्ष न करें।
17) ट्रेबलशूटिंग
'डॉकर कंपोज ps '/' logs -f '/' exec' - बेसिक डायग्नोस्टिक्स।
Compose नेटवर्क पर DNS जाँचें (नाम के अनुसार सेवा)।
यदि macOS/Windows पर बांध-माउंट "धीमा हो जाता है" - ': कैश्ड '/': डेलिगेटेड' या Mutagen/virtiofs।
हेल्थचेक "ग्रीन" है, लेकिन सेवा "मृत" है: अपने uppka की 'तत्परता' और प्रवास के क्रम की जांच करें।
18) कार्यान्वयन चेकलिस्ट
1. रचना में बेस स्टैक (गेटवे, एपी, डीबी, कैश, कतार)। yaml।
2. स्थानीय संपादन - ओवरराइड में (v.gitignore)।
3. .env। उदाहरण पूर्ण और वर्तमान 'मेक बूटस्ट्रैप' इसे '.env' पर कॉपी करता है।
4. हेल्थचेक और डेटाबेस/माइग्रेशन प्रतीक्षा स्क्रिप्ट।
5. बाहरी प्रदाताओं के लिए WireMock/Localstack/MinIO।
6. साइडिंग और माइग्रेशन के रूप में 'बीज/माइग्रेट' cmdlets बनाते हैं।
7. बिल्डकिट + मल्टी-स्टेज, डिपेंडेंसी कैश।
8. तेजी से शुरुआत के लिए Devconteners/Makefile।
9. उपकरण के लिए 'एक्स्ट्रा' प्रोफाइल (Grafana/pgAdmin/Kafdrop)।
10. सीआई एक ही रचना (+ ci-ओवरलाइड) का उपयोग करता है।
19) एंटी-पैटर्न
40 सेवाओं के लिए "मॉन्स्टर-कंपोज़", हमेशा चल रहा है: प्रोफाइल चालू करें।
हार्ड-नेल्ड पोर्ट जो डेवलपर्स के बीच संघर्ष करते
Git या '.env में रहस्य/कुंजी। उदाहरण '।
परीक्षणों के लिए "इंटरनेट" पर निर्भरता (वास्तविक पीएसपी/केवाईसी)।
हेल्थचेक/अपेक्षा की कमी - प्रवास और दौड़ शुरू।
कोई साइडिंग → परतदार एकीकरण परीक्षण नहीं।
20) नीचे की रेखा
रचना विकास गति का इंजन है: एक फ़ाइल आपकी सेवाओं की दुनिया का वर्णन करती है, और प्रोफाइल/ओवरराइड लचीलापन देते हैं। बिक्री, स्वचालित साइडिंग और माइग्रेशन के साथ समानता बनाए रखें, मोकी और टीएलएस को "युद्ध की तरह रखें", बिल्डकिट बनाता है - और आपके पास एक स्थानीय वातावरण है जिसमें काम करना सुविधाजनक है, परीक्षण करना आसान है/फिनहीं।