Files
dj52/NGINX_SOLUTION.md
Beyhan Oğur ec28a2024d first commit
2026-04-26 22:22:29 +03:00

6.8 KiB
Raw Blame History

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

  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:

# 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.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:

    nano nginx/default.conf
    
  2. Git'e push edin:

    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

# 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