first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 22:22:29 +03:00
commit ec28a2024d
208 changed files with 23836 additions and 0 deletions

214
NGINX_SOLUTION.md Normal file
View File

@@ -0,0 +1,214 @@
# 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