mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-05 16:53:29 +08:00
Add Turkish (tr) docs and update README (#744)
* Add Turkish (tr) docs and update README Add a full set of Turkish documentation under docs/tr (agents, changelog, CLAUDE guide, contributing, code of conduct, and many agents/commands/skills/rules files). Update README to include a link to the Turkish docs and increment the supported language count from 5 to 6. This commit adds localized guidance and references to help Turkish-speaking contributors and users. * Update docs/tr/TROUBLESHOOTING.md Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * Update docs/tr/README.md Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * docs(tr): fix license link and update readmes Update Turkish docs: change license badge link to point to repository root (../../LICENSE), increment displayed language count from 5 to 6, and remove two outdated related links from docs/tr/examples/README.md to keep references accurate. * Update docs/tr/commands/instinct-import.md Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * Update docs/tr/commands/checkpoint.md Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> --------- Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
bb1efad7c7
commit
fd2a8edb53
364
docs/tr/skills/docker-patterns/SKILL.md
Normal file
364
docs/tr/skills/docker-patterns/SKILL.md
Normal file
@@ -0,0 +1,364 @@
|
||||
---
|
||||
name: docker-patterns
|
||||
description: Yerel geliştirme, konteyner güvenliği, ağ, volume stratejileri ve multi-servis orkestrasyon için Docker ve Docker Compose kalıpları.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Docker Kalıpları
|
||||
|
||||
Konteynerize edilmiş geliştirme için Docker ve Docker Compose en iyi uygulamaları.
|
||||
|
||||
## Ne Zaman Aktifleştirmeli
|
||||
|
||||
- Yerel geliştirme için Docker Compose kurarken
|
||||
- Çok konteynerli mimariler tasarlarken
|
||||
- Konteyner ağ veya volume sorunlarını giderirken
|
||||
- Dockerfile'ları güvenlik ve boyut için incelerken
|
||||
- Yerel geliştirmeden konteynerize iş akışına geçerken
|
||||
|
||||
## Yerel Geliştirme için Docker Compose
|
||||
|
||||
### Standart Web Uygulaması Stack'i
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
services:
|
||||
app:
|
||||
build:
|
||||
context: .
|
||||
target: dev # Multi-stage Dockerfile'ın dev aşamasını kullan
|
||||
ports:
|
||||
- "3000:3000"
|
||||
volumes:
|
||||
- .:/app # Hot reload için bind mount
|
||||
- /app/node_modules # Anonim volume -- konteyner bağımlılıklarını korur
|
||||
environment:
|
||||
- DATABASE_URL=postgres://postgres:postgres@db:5432/app_dev
|
||||
- REDIS_URL=redis://redis:6379/0
|
||||
- NODE_ENV=development
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_started
|
||||
command: npm run dev
|
||||
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
ports:
|
||||
- "5432:5432"
|
||||
environment:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: app_dev
|
||||
volumes:
|
||||
- pgdata:/var/lib/postgresql/data
|
||||
- ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init.sql
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||
interval: 5s
|
||||
timeout: 3s
|
||||
retries: 5
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
ports:
|
||||
- "6379:6379"
|
||||
volumes:
|
||||
- redisdata:/data
|
||||
|
||||
mailpit: # Yerel email testi
|
||||
image: axllent/mailpit
|
||||
ports:
|
||||
- "8025:8025" # Web UI
|
||||
- "1025:1025" # SMTP
|
||||
|
||||
volumes:
|
||||
pgdata:
|
||||
redisdata:
|
||||
```
|
||||
|
||||
### Geliştirme vs Üretim Dockerfile
|
||||
|
||||
```dockerfile
|
||||
# Aşama: bağımlılıklar
|
||||
FROM node:22-alpine AS deps
|
||||
WORKDIR /app
|
||||
COPY package.json package-lock.json ./
|
||||
RUN npm ci
|
||||
|
||||
# Aşama: dev (hot reload, debug araçları)
|
||||
FROM node:22-alpine AS dev
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
EXPOSE 3000
|
||||
CMD ["npm", "run", "dev"]
|
||||
|
||||
# Aşama: build
|
||||
FROM node:22-alpine AS build
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
RUN npm run build && npm prune --production
|
||||
|
||||
# Aşama: production (minimal image)
|
||||
FROM node:22-alpine AS production
|
||||
WORKDIR /app
|
||||
RUN addgroup -g 1001 -S appgroup && adduser -S appuser -u 1001
|
||||
USER appuser
|
||||
COPY --from=build --chown=appuser:appgroup /app/dist ./dist
|
||||
COPY --from=build --chown=appuser:appgroup /app/node_modules ./node_modules
|
||||
COPY --from=build --chown=appuser:appgroup /app/package.json ./
|
||||
ENV NODE_ENV=production
|
||||
EXPOSE 3000
|
||||
HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost:3000/health || exit 1
|
||||
CMD ["node", "dist/server.js"]
|
||||
```
|
||||
|
||||
### Override Dosyaları
|
||||
|
||||
```yaml
|
||||
# docker-compose.override.yml (otomatik yüklenir, sadece dev ayarları)
|
||||
services:
|
||||
app:
|
||||
environment:
|
||||
- DEBUG=app:*
|
||||
- LOG_LEVEL=debug
|
||||
ports:
|
||||
- "9229:9229" # Node.js debugger
|
||||
|
||||
# docker-compose.prod.yml (üretim için açıkça)
|
||||
services:
|
||||
app:
|
||||
build:
|
||||
target: production
|
||||
restart: always
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: "1.0"
|
||||
memory: 512M
|
||||
```
|
||||
|
||||
```bash
|
||||
# Geliştirme (override'ı otomatik yükler)
|
||||
docker compose up
|
||||
|
||||
# Üretim
|
||||
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
## Ağ (Networking)
|
||||
|
||||
### Servis Keşfi
|
||||
|
||||
Aynı Compose ağındaki servisler servis adıyla çözümlenir:
|
||||
```
|
||||
# "app" konteynerinden:
|
||||
postgres://postgres:postgres@db:5432/app_dev # "db" db konteynerine çözümlenir
|
||||
redis://redis:6379/0 # "redis" redis konteynerine çözümlenir
|
||||
```
|
||||
|
||||
### Özel Ağlar
|
||||
|
||||
```yaml
|
||||
services:
|
||||
frontend:
|
||||
networks:
|
||||
- frontend-net
|
||||
|
||||
api:
|
||||
networks:
|
||||
- frontend-net
|
||||
- backend-net
|
||||
|
||||
db:
|
||||
networks:
|
||||
- backend-net # Sadece api'den erişilebilir, frontend'den değil
|
||||
|
||||
networks:
|
||||
frontend-net:
|
||||
backend-net:
|
||||
```
|
||||
|
||||
### Sadece Gereklileri Açığa Çıkarma
|
||||
|
||||
```yaml
|
||||
services:
|
||||
db:
|
||||
ports:
|
||||
- "127.0.0.1:5432:5432" # Sadece host'tan erişilebilir, ağdan değil
|
||||
# Üretimde port'ları tamamen çıkar -- sadece Docker ağı içinden erişilebilir
|
||||
```
|
||||
|
||||
## Volume Stratejileri
|
||||
|
||||
```yaml
|
||||
volumes:
|
||||
# İsimli volume: konteyner yeniden başlatmalarında kalıcı, Docker tarafından yönetilir
|
||||
pgdata:
|
||||
|
||||
# Bind mount: host dizinini konteynere eşler (geliştirme için)
|
||||
# - ./src:/app/src
|
||||
|
||||
# Anonim volume: bind mount override'ından konteyner tarafından oluşturulan içeriği korur
|
||||
# - /app/node_modules
|
||||
```
|
||||
|
||||
### Yaygın Kalıplar
|
||||
|
||||
```yaml
|
||||
services:
|
||||
app:
|
||||
volumes:
|
||||
- .:/app # Kaynak kodu (hot reload için bind mount)
|
||||
- /app/node_modules # Konteyner'ın node_modules'ünü host'tan koru
|
||||
- /app/.next # Build cache'ini koru
|
||||
|
||||
db:
|
||||
volumes:
|
||||
- pgdata:/var/lib/postgresql/data # Kalıcı veri
|
||||
- ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql # Init scriptleri
|
||||
```
|
||||
|
||||
## Konteyner Güvenliği
|
||||
|
||||
### Dockerfile Sıkılaştırma
|
||||
|
||||
```dockerfile
|
||||
# 1. Belirli tag'ler kullanın (:latest asla)
|
||||
FROM node:22.12-alpine3.20
|
||||
|
||||
# 2. Root olmayan kullanıcı olarak çalıştır
|
||||
RUN addgroup -g 1001 -S app && adduser -S app -u 1001
|
||||
USER app
|
||||
|
||||
# 3. Capability'leri düşür (compose'da)
|
||||
# 4. Mümkün olduğunda salt okunur kök dosya sistemi
|
||||
# 5. Image layer'larında secret yok
|
||||
```
|
||||
|
||||
### Compose Güvenliği
|
||||
|
||||
```yaml
|
||||
services:
|
||||
app:
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
read_only: true
|
||||
tmpfs:
|
||||
- /tmp
|
||||
- /app/.cache
|
||||
cap_drop:
|
||||
- ALL
|
||||
cap_add:
|
||||
- NET_BIND_SERVICE # Sadece < 1024 port'lara bind için
|
||||
```
|
||||
|
||||
### Secret Yönetimi
|
||||
|
||||
```yaml
|
||||
# İYİ: Ortam değişkenleri kullanın (runtime'da enjekte edilir)
|
||||
services:
|
||||
app:
|
||||
env_file:
|
||||
- .env # .env'i asla git'e commit etmeyin
|
||||
environment:
|
||||
- API_KEY # Host ortamından miras alır
|
||||
|
||||
# İYİ: Docker secrets (Swarm modu)
|
||||
secrets:
|
||||
db_password:
|
||||
file: ./secrets/db_password.txt
|
||||
|
||||
services:
|
||||
db:
|
||||
secrets:
|
||||
- db_password
|
||||
|
||||
# KÖTÜ: Image'de hardcode
|
||||
# ENV API_KEY=sk-proj-xxxxx # ASLA BUNU YAPMAYIN
|
||||
```
|
||||
|
||||
## .dockerignore
|
||||
|
||||
```
|
||||
node_modules
|
||||
.git
|
||||
.env
|
||||
.env.*
|
||||
dist
|
||||
coverage
|
||||
*.log
|
||||
.next
|
||||
.cache
|
||||
docker-compose*.yml
|
||||
Dockerfile*
|
||||
README.md
|
||||
tests/
|
||||
```
|
||||
|
||||
## Hata Ayıklama
|
||||
|
||||
### Yaygın Komutlar
|
||||
|
||||
```bash
|
||||
# Logları görüntüle
|
||||
docker compose logs -f app # App loglarını takip et
|
||||
docker compose logs --tail=50 db # db'den son 50 satır
|
||||
|
||||
# Çalışan konteynerde komut çalıştır
|
||||
docker compose exec app sh # app'e shell ile gir
|
||||
docker compose exec db psql -U postgres # postgres'e bağlan
|
||||
|
||||
# İncele
|
||||
docker compose ps # Çalışan servisler
|
||||
docker compose top # Her konteynerdeki işlemler
|
||||
docker stats # Kaynak kullanımı
|
||||
|
||||
# Yeniden build et
|
||||
docker compose up --build # Image'leri yeniden build et
|
||||
docker compose build --no-cache app # Tam rebuild'i zorla
|
||||
|
||||
# Temizle
|
||||
docker compose down # Konteynerleri durdur ve kaldır
|
||||
docker compose down -v # Volume'leri de kaldır (YIKıCı)
|
||||
docker system prune # Kullanılmayan image/konteynerleri kaldır
|
||||
```
|
||||
|
||||
### Ağ Sorunlarını Hata Ayıklama
|
||||
|
||||
```bash
|
||||
# Konteyner içinde DNS çözümlemesini kontrol et
|
||||
docker compose exec app nslookup db
|
||||
|
||||
# Bağlantıyı kontrol et
|
||||
docker compose exec app wget -qO- http://api:3000/health
|
||||
|
||||
# Ağı incele
|
||||
docker network ls
|
||||
docker network inspect <project>_default
|
||||
```
|
||||
|
||||
## Anti-Kalıplar
|
||||
|
||||
```
|
||||
# KÖTÜ: Üretimde orkestrasyon olmadan docker compose kullanma
|
||||
# Üretim çok konteynerli iş yükleri için Kubernetes, ECS veya Docker Swarm kullanın
|
||||
|
||||
# KÖTÜ: Volume olmadan konteynerlerde veri depolama
|
||||
# Konteynerler geçicidir -- volume olmadan yeniden başlatmada tüm veri kaybolur
|
||||
|
||||
# KÖTÜ: Root olarak çalıştırma
|
||||
# Daima root olmayan bir kullanıcı oluşturun ve kullanın
|
||||
|
||||
# KÖTÜ: :latest tag kullanma
|
||||
# Yeniden üretilebilir build'ler için belirli versiyonlara sabitle
|
||||
|
||||
# KÖTÜ: Tüm servisleri içeren tek dev konteyner
|
||||
# Endişeleri ayırın: konteyner başına bir işlem
|
||||
|
||||
# KÖTÜ: Secret'ları docker-compose.yml'e koymak
|
||||
# .env dosyaları (gitignore'lanmış) veya Docker secrets kullanın
|
||||
```
|
||||
Reference in New Issue
Block a user