215 lines
6.8 KiB
Markdown
215 lines
6.8 KiB
Markdown
# 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
|