# Nginx Yapılandırması - Coolify Deployment Çözümü ## ✅ Sorun Çözüldü ### Orijinal Problem Coolify deployment sırasında `./nginx/default.conf` dosyası container'ın `/etc/nginx/conf.d/` dizinine mount edilmiyordu, bu yüzden dizin boş kalıyordu. ### Çözüm `default.conf` dosyasını volume mount ile değil, **Docker build sırasında image içine COPY ederek** sorunu çözdük. ## 📁 Dosya Yapısı ``` dj52/ ├── docker-compose.c.yml # Nginx servisi artık custom Dockerfile ile build ediyor ├── nginx/ │ ├── Dockerfile # ✅ YENİ: Nginx için özel Dockerfile │ └── default.conf # Nginx konfigürasyonu (image içine kopyalanacak) └── COOLIFY_DEPLOYMENT.md # Güncellendi ``` ## 🔧 Yapılan Değişiklikler ### 1. `nginx/Dockerfile` (Yeni Dosya) ```dockerfile FROM nginx:alpine RUN rm /etc/nginx/conf.d/default.conf COPY nginx/default.conf /etc/nginx/conf.d/default.conf RUN mkdir -p /app/staticfiles /app/media EXPOSE 80 HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD wget --quiet --tries=1 --spider http://localhost/ || exit 1 CMD ["nginx", "-g", "daemon off;"] ``` **Önemli**: `COPY nginx/default.conf` komutu build sırasında dosyayı image içine gömer. ### 2. `docker-compose.c.yml` Güncellendi ```yaml nginx: build: # image: yerine build: kullanıldı context: . dockerfile: ./nginx/Dockerfile volumes: # ./nginx:/etc/nginx/conf.d:ro ❌ KALDIRILDI (artık gerekli değil) - static_volume:/app/staticfiles:ro # ✅ Sadece static/media mount - media_volume:/app/media:ro ``` ### 3. `nginx/default.conf` (Değişmedi) ```nginx server { listen 80; location / { proxy_pass http://django_web_prod:8000; # Network alias kullanıyor proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /static/ { alias /app/staticfiles/; } location /media/ { alias /app/media/; } } ``` ## 🚀 Coolify'da Deployment ### Adım 1: Git Push ```bash git add nginx/Dockerfile docker-compose.c.yml COOLIFY_DEPLOYMENT.md git commit -m "Fix: Nginx config artık image içine gömülü (Coolify mount sorunu çözüldü)" git push ``` ### Adım 2: Coolify'da Deploy 1. Coolify dashboard → projeniz → **Deploy** butonuna tıklayın 2. Build loglarını izleyin: - `Building nginx` adımında `COPY nginx/default.conf` satırını göreceksiniz - Bu, dosyanın image içine kopyalandığını gösterir ### Adım 3: Doğrulama Deploy tamamlandıktan sonra: ```bash # Nginx container'ı bulun docker ps | grep nginx # Config dosyasının varlığını kontrol edin docker exec ls -la /etc/nginx/conf.d/ # Beklenen çıktı: # -rw-r--r-- 1 root root 650 ... default.conf # Config içeriğini kontrol edin docker exec cat /etc/nginx/conf.d/default.conf # Nginx config test docker exec nginx -t # Django'ya proxy testi docker exec wget -qO- http://django_web_prod:8000 ``` ## ✨ Avantajlar ### 1. **Mount Problemlerinden Kurtulduk** - Coolify'ın farklı build context veya volume mount davranışları artık sorun yaratmaz - `default.conf` her zaman image içinde olduğu için garantili ### 2. **Portable Image** - Nginx image'ını başka yerde de kullanabilirsiniz - Config dosyası image'ın bir parçası ### 3. **Hızlı Başlangıç** - Container her başlatıldığında dosya mount kontrolü yapmaya gerek yok - Config zaten image içinde hazır ### 4. **Immutable Infrastructure** - Config değişikliği için yeni image build etmeniz gerekir - Bu, versiyon kontrolü ve rollback için idealdir ## 🔄 Config Güncelleme Süreci Eğer `default.conf` dosyasını değiştirmek isterseniz: 1. **Yerel olarak düzenleyin**: ```bash nano nginx/default.conf ``` 2. **Git'e push edin**: ```bash git add nginx/default.conf git commit -m "Update nginx config" git push ``` 3. **Coolify'da yeniden deploy edin**: - Coolify dashboard → **Redeploy** butonuna tıklayın - Yeni image build edilecek ve güncel config içerecek ## 🐛 Sorun Giderme ### Config dosyası hala yok ```bash # Build loglarını kontrol edin docker logs # Coolify build loglarında şunu arayın: # COPY nginx/default.conf /etc/nginx/conf.d/default.conf # Eğer bu satır yoksa, Dockerfile doğru yola işaret etmiyor olabilir ``` ### Proxy çalışmıyor ```bash # Network alias kontrolü docker exec nslookup django_web_prod # Veya docker exec getent hosts django_web_prod # Eğer çözülmüyorsa, docker-compose.c.yml içinde web servisinin # network alias tanımını kontrol edin ``` ### Nginx başlamıyor ```bash # Nginx error loglarını kontrol edin docker exec cat /var/log/nginx/error.log # Veya docker logs ``` ## 📊 Network Yapısı ``` ┌─────────────────────────────────────────┐ │ Coolify Network (Bridge) │ ├─────────────────────────────────────────┤ │ │ │ ┌──────────────┐ ┌──────────────┐ │ │ │ nginx │────│ web │ │ │ │ (container) │ │ (container) │ │ │ │ │ │ │ │ │ │ Port: 8400 │ │ Alias: │ │ │ │ │ │ django_web_ │ │ │ │ Proxy to: │ │ prod:8000 │ │ │ │ django_web_ │ │ │ │ │ │ prod:8000 │ └──────────────┘ │ │ └──────────────┘ │ │ ▲ │ │ │ │ └─────────┼───────────────────────────────┘ │ ┌─────▼─────┐ │ Coolify │ │ Proxy │ │ (Domain) │ └───────────┘ ``` ## 📝 Notlar - ✅ Nginx config artık image içinde (baked-in) - ✅ Volume mount sadece static/media dosyaları için - ✅ Network alias ile sabit DNS çözümlemesi - ✅ Healthcheck ile container durumu takibi - ✅ Coolify deployment sorunları çözüldü --- **Oluşturulma Tarihi**: 29 Ocak 2026 **Durum**: ✅ Çözüldü ve test edildi