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

215 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 <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**:
```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 <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
```bash
# 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
```bash
# 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