# Coolify Deployment Guide - Django Project

## Deployment Yapılandırması

### Gerekli Environment Variables (Coolify'da ayarlanmalı):
```
SECRET_KEY=your-secret-key-here
USE_POSTGRES=1
POSTGRES_DB=your_db_name
POSTGRES_USER=your_db_user
POSTGRES_PASSWORD=your_db_password
POSTGRES_HOST=10.80.80.50
POSTGRES_PORT=5432
DJANGO_ALLOWED_HOSTS=your-domain.com,www.your-domain.com
CELERY_BROKER_URL=redis://redis:6379/0
CELERY_RESULT_BACKEND=redis://redis:6379/0
```

### Docker Compose Dosyası
- **Kullanılacak Dosya**: `docker-compose.c.yml`
- **Network**: `coolify` (external)
- **Port**: 8400 (nginx)

### Önemli Notlar

#### 1. Nginx Configuration
- `./nginx/Dockerfile` ile custom nginx image build edilir
- `./nginx/default.conf` dosyası **build sırasında image içine COPY edilir** (mount edilmez)
- Bu sayede Coolify'da volume mount sorunları yaşanmaz
- Proxy hedefi: `django_web_prod:8000` (network alias kullanılır)

#### 2. Network Aliases
- **web servisi**: `django_web_prod` alias'ı ile erişilebilir
- **nginx servisi**: `nginx_proxy` alias'ı ile erişilebilir
- Bu alias'lar sayesinde Coolify'ın container isimlerine zaman damgası eklemesi sorun yaratmaz

#### 3. Volume Mounts
- `static_volume`: Django static dosyaları
- `media_volume`: Kullanıcı yüklemeleri
- Her iki volume da web, celery ve nginx servisleri arasında paylaşılır

#### 4. Healthcheck
- Nginx için healthcheck yapılandırılmış
- 30 saniye aralıklarla kontrol yapılır
- İlk başlangıçta 40 saniye beklenir

### Deployment Adımları (Coolify UI)

1. **Yeni Proje Oluştur**
   - Git repository URL'ini ekle
   - Branch seç (main/master)

2. **Docker Compose Ayarları**
   - Compose file: `docker-compose.c.yml` seç
   - Network: `coolify` (otomatik oluşturulur)

3. **Environment Variables Ekle**
   - Yukarıdaki tüm değişkenleri Coolify UI'dan ekle
   - SECRET_KEY için güvenli bir anahtar oluştur

4. **Build & Deploy**
   - "Deploy" butonuna tıkla
   - Build loglarını takip et

### Sorun Giderme

#### Problem: nginx container'da /etc/nginx/conf.d boş
**Çözüm**: 
- Artık bu sorun yaşanmaz çünkü `default.conf` build sırasında image içine kopyalanır
- Eğer yine de boşsa, nginx image'ının doğru build edildiğini kontrol edin:
  ```bash
  docker exec <nginx-container-name> ls -la /etc/nginx/conf.d/
  docker exec <nginx-container-name> cat /etc/nginx/conf.d/default.conf
  ```
- Build loglarında `COPY nginx/default.conf` adımının başarılı olduğunu doğrulayın

#### Problem: django_web_prod çözümlenemiyor
**Çözüm**:
- `docker-compose.c.yml` içinde `web` servisinin network alias'ının `django_web_prod` olduğunu kontrol edin
- Tüm servisler aynı `coolify` network'üne bağlı olmalı

#### Problem: Static/Media dosyaları yüklenmiyor
**Çözüm**:
- Volume mount'ların doğru olduğunu kontrol edin
- Django collectstatic komutunu çalıştırın:
  ```bash
  docker exec <web-container-name> python manage.py collectstatic --noinput
  ```

### Test Komutları

```bash
# Nginx config testi
docker exec <nginx-container-name> nginx -t

# Nginx içinden Django'ya erişim testi
docker exec <nginx-container-name> wget -qO- http://django_web_prod:8000

# Container logları
docker logs <container-name> -f

# Network yapısını kontrol
docker network inspect coolify
```

### Port Mapping
- **8400**: Nginx (HTTP)
- Coolify proxy üzerinden domain'e yönlendirilecek

### Güvenlik Notları
- DEBUG=0 production'da
- SECRET_KEY her ortam için farklı olmalı
- ALLOWED_HOSTS domain'lerinizi içermeli
- PostgreSQL credentials güvenli tutulmalı
