6.8 KiB
6.8 KiB
✅ Coolify Deployment - Doğru Yapılandırma
🎯 Önemli: Port Mapping Yok!
Coolify kendi reverse proxy'sini kullanır, bu yüzden:
- ❌
ports: - "80:80"kullanmayın (conflict yaratır) - ✅ Sadece
expose: - 80kullanın (internal) - ✅ Coolify labels eklenmeli (Coolify'ın nginx'i bulması için)
📋 Güncel Yapılandırma
docker-compose.c.yml (nginx servisi)
nginx:
build:
context: .
dockerfile: ./nginx/Dockerfile
expose:
- 80 # ✅ Internal port (Coolify için)
networks:
coolify:
aliases:
- nginx
- nginx_proxy
labels:
- "coolify.managed=true" # ✅ Coolify tarafından yönetiliyor
- "coolify.http.port=80" # ✅ Coolify'a hangi port dinlediğini söyler
🔄 Coolify Proxy Akışı
Internet
↓
Coolify Reverse Proxy (Caddy/Traefik)
↓
[your-domain.com]
↓
Internal: nginx:80 (exposed, not published)
↓
Internal: django_web_prod:8000
↓
Django App
🚀 Deploy Adımları
1. Git Push
git add docker-compose.c.yml
git commit -m "Fix: Remove port mapping for Coolify proxy"
git push
2. Coolify Dashboard
- Projenize gidin
- Settings → General
- Port kısmında
80olduğunu doğrulayın - Redeploy butonuna tıklayın
3. Domain Ayarları
Coolify'da:
- Domains sekmesinde domain'inizi ekleyin
- Coolify otomatik olarak SSL sertifikası alacak (Let's Encrypt)
- Coolify proxy'si nginx container'ın 80 portuna yönlendirecek
🔍 Test Komutları
Deploy sonrası Coolify sunucusunda:
# Container'ları kontrol edin
docker ps | grep -E "nginx|web"
# Nginx container ID
NGINX_ID=$(docker ps | grep nginx | head -1 | awk '{print $1}')
# Internal DNS testi (nginx container içinden)
docker exec $NGINX_ID nslookup django_web_prod
# Internal HTTP testi
docker exec $NGINX_ID wget -qO- http://django_web_prod:8000 | head
# Nginx config doğrulama
docker exec $NGINX_ID nginx -t
# Nginx logları
docker logs $NGINX_ID --tail 50
# Coolify network kontrolü
docker network inspect coolify | grep -A 5 "nginx"
✅ Başarı Kriterleri
docker ps- Nginx container çalışıyor, port mapping YOK (80/tcp yazıyor ama 0.0.0.0:80->80/tcp yazmıyor)- Internal DNS -
docker exec $NGINX_ID nslookup django_web_prodçalışıyor - Internal HTTP -
docker exec $NGINX_ID wget http://django_web_prod:8000çalışıyor - Nginx config -
docker exec $NGINX_ID nginx -tbaşarılı - Browser - Coolify domain'den (örn: https://yourdomain.com) site açılıyor
- SSL - Coolify otomatik HTTPS yönlendirmesi çalışıyor
📊 Beklenen docker ps Çıktısı
CONTAINER ID IMAGE PORTS NAMES
abc123 nginx:alpine 80/tcp django_nginx # ✅ Doğru (exposed)
def456 python:3.14 8000/tcp django_web_prod # ✅ Doğru (exposed)
# ❌ YANLIŞ olacak:
# 0.0.0.0:80->80/tcp # Bu Coolify ile conflict yaratır
Port sütununda sadece 80/tcp görünmeli, 0.0.0.0:80->80/tcp görünmemeli.
🐛 Sorun Giderme
Problem: "Port 80 already in use"
Sebep: ports: tanımı hala var.
Çözüm:
# ❌ YANLIŞ
nginx:
ports:
- "80:80"
# ✅ DOĞRU
nginx:
expose:
- 80
Problem: "502 Bad Gateway" (Coolify domain'den)
Sebep: Coolify nginx container'ı bulamıyor.
Çözüm:
# Labels kontrolü
docker inspect $(docker ps | grep nginx | awk '{print $1}') | grep -A 5 "Labels"
# Beklenen:
# "coolify.managed": "true"
# "coolify.http.port": "80"
# Eğer yoksa docker-compose.c.yml'e ekleyin ve redeploy edin
Problem: Nginx Django'ya bağlanamıyor
Sebep: Network alias veya DNS problemi.
Çözüm:
# Web container'ın network alias'ını kontrol edin
docker inspect $(docker ps | grep "web" | grep -v nginx | awk '{print $1}') | grep -A 10 "Aliases"
# Beklenen: "django_web_prod" görünmeli
# Eğer yoksa docker-compose.c.yml içinde web servisine ekleyin:
services:
web:
networks:
coolify:
aliases:
- django_web_prod
Problem: Static/Media dosyaları yüklenmiyor
Sebep: Volume mount veya nginx config.
Çözüm:
# Volume kontrolü
docker exec $NGINX_ID ls -la /app/staticfiles/
docker exec $NGINX_ID ls -la /app/media/
# Eğer boşsa:
WEB_ID=$(docker ps | grep "web" | grep -v nginx | awk '{print $1}')
docker exec $WEB_ID python manage.py collectstatic --noinput
# Nginx config kontrolü
docker exec $NGINX_ID cat /etc/nginx/conf.d/default.conf | grep -A 3 "location /static"
🎯 Coolify'a Özel Notlar
1. Port Exposure
- Coolify container'ların exposed portlarını otomatik keşfeder
expose: - 80yeterli,ports:gereksiz ve zararlı
2. Labels
labels:
- "coolify.managed=true" # Coolify'ın yönetiminde
- "coolify.http.port=80" # HTTP trafiği için port
# - "coolify.https.port=443" # Eğer internal HTTPS varsa (şu an gerekli değil)
3. Network
networks:
coolify:
external: true # Coolify tarafından oluşturulan network
4. Domain Routing
Coolify dashboard:
- Domains → Domain ekleyin (örn:
example.com,www.example.com) - HTTPS → Otomatik Let's Encrypt (default açık)
- Redirect → HTTP → HTTPS yönlendirme (önerilir)
5. Health Check
Coolify nginx'in sağlık durumunu kontrol eder:
- Dockerfile içindeki
HEALTHCHECKdirektifi kullanılır - Eğer container unhealthy olursa otomatik restart edilir
📝 Checklist - Coolify Deploy
Öncesi:
ports:tanımı yok, sadeceexpose:var- Coolify labels eklenmiş
- Network
coolifyveexternal: true nginx/default.confupstream stratejisi var- Git'e push edildi
Sonrası (Coolify Dashboard):
- Build başarılı
- Container başlatıldı
- Health check geçti
- Domain'e HTTPS ile erişim var
- Static/Media dosyaları yükleniyor
Sonrası (Terminal):
docker ps- Nginx container çalışıyor (80/tcp)docker exec ... nslookup django_web_prod- Başarılıdocker exec ... wget http://django_web_prod:8000- Django yanıtlıyordocker exec ... nginx -t- Config geçerli- Nginx error.log temiz
🌐 Production Checklist
- SSL: Let's Encrypt sertifikası aktif
- Redirect: HTTP → HTTPS yönlendirme aktif
- Static: CSS/JS dosyaları yükleniyor
- Media: Kullanıcı yüklemeleri çalışıyor
- Admin:
/adminpaneli açılıyor - API: API endpoint'leri yanıt veriyor
- Logs: Hata logları temiz
- Monitoring: Coolify metrics'te trafik görünüyor
Oluşturulma: 29 Ocak 2026
Coolify Versiyonu: v4.x
Durum: ✅ Production Ready