# ✅ Coolify Deployment - Doğru Yapılandırma

## 🎯 Önemli: Port Mapping Yok!

Coolify kendi reverse proxy'sini kullanır, bu yüzden:
- ❌ **`ports: - "80:80"` kullanmayın** (conflict yaratır)
- ✅ **Sadece `expose: - 80`** kullanın (internal)
- ✅ **Coolify labels eklenmeli** (Coolify'ın nginx'i bulması için)

## 📋 Güncel Yapılandırma

### docker-compose.c.yml (nginx servisi)
```yaml
nginx:
  build:
    context: .
    dockerfile: ./nginx/Dockerfile
  expose:
    - 80                           # ✅ Internal port (Coolify için)
  networks:
    coolify:
      aliases:
        - nginx
        - nginx_proxy
  labels:
    - "coolify.managed=true"       # ✅ Coolify tarafından yönetiliyor
    - "coolify.http.port=80"       # ✅ Coolify'a hangi port dinlediğini söyler
```

## 🔄 Coolify Proxy Akışı

```
Internet
    ↓
Coolify Reverse Proxy (Caddy/Traefik)
    ↓
[your-domain.com]
    ↓
Internal: nginx:80 (exposed, not published)
    ↓
Internal: django_web_prod:8000
    ↓
Django App
```

## 🚀 Deploy Adımları

### 1. Git Push
```bash
git add docker-compose.c.yml
git commit -m "Fix: Remove port mapping for Coolify proxy"
git push
```

### 2. Coolify Dashboard
1. Projenize gidin
2. **Settings** → **General**
3. **Port** kısmında `80` olduğunu doğrulayın
4. **Redeploy** butonuna tıklayın

### 3. Domain Ayarları
Coolify'da:
- **Domains** sekmesinde domain'inizi ekleyin
- Coolify otomatik olarak SSL sertifikası alacak (Let's Encrypt)
- Coolify proxy'si nginx container'ın 80 portuna yönlendirecek

## 🔍 Test Komutları

Deploy sonrası Coolify sunucusunda:

```bash
# Container'ları kontrol edin
docker ps | grep -E "nginx|web"

# Nginx container ID
NGINX_ID=$(docker ps | grep nginx | head -1 | awk '{print $1}')

# Internal DNS testi (nginx container içinden)
docker exec $NGINX_ID nslookup django_web_prod

# Internal HTTP testi
docker exec $NGINX_ID wget -qO- http://django_web_prod:8000 | head

# Nginx config doğrulama
docker exec $NGINX_ID nginx -t

# Nginx logları
docker logs $NGINX_ID --tail 50

# Coolify network kontrolü
docker network inspect coolify | grep -A 5 "nginx"
```

## ✅ Başarı Kriterleri

- [ ] `docker ps` - Nginx container çalışıyor, **port mapping YOK** (80/tcp yazıyor ama 0.0.0.0:80->80/tcp yazmıyor)
- [ ] Internal DNS - `docker exec $NGINX_ID nslookup django_web_prod` çalışıyor
- [ ] Internal HTTP - `docker exec $NGINX_ID wget http://django_web_prod:8000` çalışıyor
- [ ] Nginx config - `docker exec $NGINX_ID nginx -t` başarılı
- [ ] **Browser** - Coolify domain'den (örn: https://yourdomain.com) site açılıyor
- [ ] **SSL** - Coolify otomatik HTTPS yönlendirmesi çalışıyor

## 📊 Beklenen `docker ps` Çıktısı

```bash
CONTAINER ID   IMAGE           PORTS           NAMES
abc123         nginx:alpine    80/tcp          django_nginx         # ✅ Doğru (exposed)
def456         python:3.14     8000/tcp        django_web_prod      # ✅ Doğru (exposed)

# ❌ YANLIŞ olacak:
# 0.0.0.0:80->80/tcp  # Bu Coolify ile conflict yaratır
```

Port sütununda sadece `80/tcp` görünmeli, `0.0.0.0:80->80/tcp` **görünmemeli**.

## 🐛 Sorun Giderme

### Problem: "Port 80 already in use"
**Sebep**: `ports:` tanımı hala var.

**Çözüm**:
```yaml
# ❌ YANLIŞ
nginx:
  ports:
    - "80:80"

# ✅ DOĞRU
nginx:
  expose:
    - 80
```

### Problem: "502 Bad Gateway" (Coolify domain'den)
**Sebep**: Coolify nginx container'ı bulamıyor.

**Çözüm**:
```bash
# Labels kontrolü
docker inspect $(docker ps | grep nginx | awk '{print $1}') | grep -A 5 "Labels"

# Beklenen:
# "coolify.managed": "true"
# "coolify.http.port": "80"

# Eğer yoksa docker-compose.c.yml'e ekleyin ve redeploy edin
```

### Problem: Nginx Django'ya bağlanamıyor
**Sebep**: Network alias veya DNS problemi.

**Çözüm**:
```bash
# Web container'ın network alias'ını kontrol edin
docker inspect $(docker ps | grep "web" | grep -v nginx | awk '{print $1}') | grep -A 10 "Aliases"

# Beklenen: "django_web_prod" görünmeli

# Eğer yoksa docker-compose.c.yml içinde web servisine ekleyin:
services:
  web:
    networks:
      coolify:
        aliases:
          - django_web_prod
```

### Problem: Static/Media dosyaları yüklenmiyor
**Sebep**: Volume mount veya nginx config.

**Çözüm**:
```bash
# Volume kontrolü
docker exec $NGINX_ID ls -la /app/staticfiles/
docker exec $NGINX_ID ls -la /app/media/

# Eğer boşsa:
WEB_ID=$(docker ps | grep "web" | grep -v nginx | awk '{print $1}')
docker exec $WEB_ID python manage.py collectstatic --noinput

# Nginx config kontrolü
docker exec $NGINX_ID cat /etc/nginx/conf.d/default.conf | grep -A 3 "location /static"
```

## 🎯 Coolify'a Özel Notlar

### 1. Port Exposure
- Coolify container'ların **exposed** portlarını otomatik keşfeder
- `expose: - 80` yeterli, `ports:` gereksiz ve zararlı

### 2. Labels
```yaml
labels:
  - "coolify.managed=true"      # Coolify'ın yönetiminde
  - "coolify.http.port=80"      # HTTP trafiği için port
  # - "coolify.https.port=443"  # Eğer internal HTTPS varsa (şu an gerekli değil)
```

### 3. Network
```yaml
networks:
  coolify:
    external: true  # Coolify tarafından oluşturulan network
```

### 4. Domain Routing
Coolify dashboard:
- **Domains** → Domain ekleyin (örn: `example.com`, `www.example.com`)
- **HTTPS** → Otomatik Let's Encrypt (default açık)
- **Redirect** → HTTP → HTTPS yönlendirme (önerilir)

### 5. Health Check
Coolify nginx'in sağlık durumunu kontrol eder:
- Dockerfile içindeki `HEALTHCHECK` direktifi kullanılır
- Eğer container unhealthy olursa otomatik restart edilir

## 📝 Checklist - Coolify Deploy

Öncesi:
- [ ] `ports:` tanımı **yok**, sadece `expose:` var
- [ ] Coolify labels eklenmiş
- [ ] Network `coolify` ve `external: true`
- [ ] `nginx/default.conf` upstream stratejisi var
- [ ] Git'e push edildi

Sonrası (Coolify Dashboard):
- [ ] Build başarılı
- [ ] Container başlatıldı
- [ ] Health check geçti
- [ ] Domain'e HTTPS ile erişim var
- [ ] Static/Media dosyaları yükleniyor

Sonrası (Terminal):
- [ ] `docker ps` - Nginx container çalışıyor (80/tcp)
- [ ] `docker exec ... nslookup django_web_prod` - Başarılı
- [ ] `docker exec ... wget http://django_web_prod:8000` - Django yanıtlıyor
- [ ] `docker exec ... nginx -t` - Config geçerli
- [ ] Nginx error.log temiz

## 🌐 Production Checklist

- [ ] **SSL**: Let's Encrypt sertifikası aktif
- [ ] **Redirect**: HTTP → HTTPS yönlendirme aktif
- [ ] **Static**: CSS/JS dosyaları yükleniyor
- [ ] **Media**: Kullanıcı yüklemeleri çalışıyor
- [ ] **Admin**: `/admin` paneli açılıyor
- [ ] **API**: API endpoint'leri yanıt veriyor
- [ ] **Logs**: Hata logları temiz
- [ ] **Monitoring**: Coolify metrics'te trafik görünüyor

---
**Oluşturulma**: 29 Ocak 2026  
**Coolify Versiyonu**: v4.x  
**Durum**: ✅ Production Ready
