6.8 KiB
6.8 KiB
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)
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
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)
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
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
- Coolify dashboard → projeniz → Deploy butonuna tıklayın
- Build loglarını izleyin:
Building nginxadımındaCOPY nginx/default.confsatırını göreceksiniz- Bu, dosyanın image içine kopyalandığını gösterir
Adım 3: Doğrulama
Deploy tamamlandıktan sonra:
# Nginx container'ı bulun
docker ps | grep nginx
# Config dosyasının varlığını kontrol edin
docker exec <nginx-container-id> 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 <nginx-container-id> cat /etc/nginx/conf.d/default.conf
# Nginx config test
docker exec <nginx-container-id> nginx -t
# Django'ya proxy testi
docker exec <nginx-container-id> 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.confher 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:
-
Yerel olarak düzenleyin:
nano nginx/default.conf -
Git'e push edin:
git add nginx/default.conf git commit -m "Update nginx config" git push -
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
# Build loglarını kontrol edin
docker logs <nginx-container-id>
# 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
# Network alias kontrolü
docker exec <nginx-container-id> nslookup django_web_prod
# Veya
docker exec <nginx-container-id> 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
# Nginx error loglarını kontrol edin
docker exec <nginx-container-id> cat /var/log/nginx/error.log
# Veya
docker logs <nginx-container-id>
📊 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