Domain support

This commit is contained in:
salvacybersec
2025-11-10 20:01:41 +03:00
parent dea1b874b5
commit f86cda2978
24 changed files with 3703 additions and 34 deletions

396
docs/DOMAIN_SETUP.md Normal file
View File

@@ -0,0 +1,396 @@
# 🌐 Domain Yapılandırma Rehberi
Oltalama Panel için domain yapılandırma seçenekleri ve kurulum rehberi.
## 📋 İki Seçenek
### Seçenek 1: Tek Domain (Önerilen) ⭐
**Yapı:**
```
yourdomain.com/ → Frontend
yourdomain.com/api/ → Backend API
yourdomain.com/t/ → Tracking Links
```
**Avantajları:**
- ✅ CORS sorunu yok
- ✅ Tek SSL sertifikası
- ✅ Kolay kurulum
- ✅ Basit yönetim
**Dezavantajları:**
- ⚠️ Reverse proxy gerekli (Nginx Proxy Manager)
### Seçenek 2: İki Ayrı Domain
**Yapı:**
```
panel.yourdomain.com → Frontend
api.yourdomain.com → Backend API & Tracking
```
**Avantajları:**
- ✅ Servisler birbirinden izole
- ✅ Bağımsız ölçeklendirme
- ✅ Farklı sunucularda çalışabilir
**Dezavantajları:**
- ⚠️ CORS yapılandırması gerekli
- ⚠️ İki SSL sertifikası
- ⚠️ Daha karmaşık kurulum
## 🚀 Seçenek 1: Tek Domain Kurulumu
### 1. DNS Ayarları
```
yourdomain.com A 123.456.789.10
www.yourdomain.com CNAME yourdomain.com
```
### 2. Nginx Proxy Manager Kurulumu
**Proxy Host Ekle:**
```
Domain: yourdomain.com, www.yourdomain.com
Scheme: http
Forward Hostname: localhost
Forward Port: 4173
SSL: ✓ Force SSL, HTTP/2, HSTS
```
**Advanced Config:**
```nginx
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
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 /t/ {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
```
### 3. Oltalama Panel Ayarları
Panele giriş yapın → **Ayarlar****Genel Ayarlar**
```
☐ İki Ayrı Domain Kullan (kapalı bırakın)
Domain (Base URL): https://yourdomain.com
```
### 4. Test
```bash
# Frontend
curl https://yourdomain.com
# Backend API
curl https://yourdomain.com/api/health
# Tracking
curl -I https://yourdomain.com/t/test-token
```
## 🔀 Seçenek 2: İki Domain Kurulumu
### 1. DNS Ayarları
```
api.yourdomain.com A 123.456.789.10
panel.yourdomain.com A 123.456.789.10
```
### 2. Nginx Proxy Manager - Backend
**Proxy Host Ekle (Backend):**
```
Domain: api.yourdomain.com
Scheme: http
Forward Hostname: localhost
Forward Port: 3000
SSL: ✓ Force SSL, HTTP/2, HSTS
```
### 3. Nginx Proxy Manager - Frontend
**Proxy Host Ekle (Frontend):**
```
Domain: panel.yourdomain.com
Scheme: http
Forward Hostname: localhost
Forward Port: 4173
SSL: ✓ Force SSL, HTTP/2, HSTS
```
### 4. Oltalama Panel Ayarları
Panele giriş yapın → **Ayarlar****Genel Ayarlar**
```
☑ İki Ayrı Domain Kullan (aktif et)
Backend Domain: https://api.yourdomain.com
Frontend Domain: https://panel.yourdomain.com
```
**Kaydet** butonuna tıklayın. CORS otomatik olarak yapılandırılacaktır.
### 5. Frontend Ortam Değişkenleri
`/opt/oltalama/frontend/.env`:
```env
VITE_API_URL=https://api.yourdomain.com
```
Frontend'i yeniden build edin:
```bash
cd /opt/oltalama/frontend
npm run build
pm2 restart oltalama-frontend
```
### 6. Test
```bash
# Frontend
curl https://panel.yourdomain.com
# Backend API
curl https://api.yourdomain.com/api/health
# Tracking
curl -I https://api.yourdomain.com/t/test-token
# CORS test
curl -I -X OPTIONS https://api.yourdomain.com/api/health \
-H "Origin: https://panel.yourdomain.com" \
-H "Access-Control-Request-Method: GET"
```
## 🔧 Port Ayarları
### Varsayılan Portlar
- **Backend**: `3000`
- **Frontend**: `4173`
- **Nginx Proxy Manager**: `80` (HTTP), `443` (HTTPS)
### Farklı Portlar Kullanma
Eğer backend veya frontend'i farklı portlarda çalıştırmak isterseniz:
#### Backend Port Değiştirme
**1. Backend .env:**
```env
PORT=8080
```
**2. PM2 Ecosystem Config:**
```javascript
{
name: 'oltalama-backend',
env: {
PORT: 8080,
},
}
```
**3. Nginx Proxy Manager:**
```
Forward Port: 8080
```
**4. Restart:**
```bash
pm2 restart oltalama-backend
```
#### Frontend Port Değiştirme
**1. Frontend package.json:**
```json
{
"scripts": {
"preview": "vite preview --port 5000"
}
}
```
**2. PM2 Ecosystem Config:**
```javascript
{
name: 'oltalama-frontend',
env: {
PORT: 5000,
},
}
```
**3. Nginx Proxy Manager:**
```
Forward Port: 5000
```
**4. Restart:**
```bash
pm2 restart oltalama-frontend
```
## 🔒 SSL/TLS Sertifikaları
### Let's Encrypt (Otomatik)
Nginx Proxy Manager üzerinden otomatik:
1. Proxy Host ayarlarına girin
2. **SSL** sekmesine gidin
3. **Request a new SSL Certificate** seçin
4. **Force SSL**, **HTTP/2**, **HSTS** aktif edin
5. Email girin ve **I Agree** işaretleyin
6. **Save**
Sertifika otomatik olarak yenilenecektir.
### Manuel SSL (Opsiyonel)
```bash
# Certbot kurulumu
sudo apt install certbot
# Sertifika oluşturma
sudo certbot certonly --standalone -d yourdomain.com
# Sertifikalar
/etc/letsencrypt/live/yourdomain.com/fullchain.pem
/etc/letsencrypt/live/yourdomain.com/privkey.pem
```
## 🐛 Sorun Giderme
### Problem: "Failed to load resource: net::ERR_BLOCKED_BY_CLIENT"
**Sebep:** AdBlock/uBlock Origin tracking URL'lerini engelliyor
**Çözüm:**
- Test için AdBlock'u devre dışı bırakın
- Veya tracking URL pattern'ini değiştirin
### Problem: CORS hatası
**Semptomlar:**
```
Access to XMLHttpRequest at 'https://api.yourdomain.com/api/...'
from origin 'https://panel.yourdomain.com' has been blocked by CORS policy
```
**Çözüm:**
1. Panelden CORS ayarlarını kontrol edin
2. **İki Ayrı Domain Kullan** aktif mi?
3. Frontend ve Backend URL'leri doğru mu?
4. Backend'i restart edin: `pm2 restart oltalama-backend`
### Problem: 502 Bad Gateway
**Çözüm:**
```bash
# Backend çalışıyor mu?
pm2 status
# Port dinleniyor mu?
sudo netstat -tulpn | grep 3000
# Firewall açık mı?
sudo ufw status
```
### Problem: Tracking linkleri çalışmıyor
**Çözüm:**
1. Panelde Base URL doğru ayarlanmış mı?
2. `/t/` route Nginx'de tanımlı mı?
3. Backend loglarını kontrol edin:
```bash
pm2 logs oltalama-backend --lines 50
```
## 📊 Karşılaştırma Tablosu
| Özellik | Tek Domain | İki Domain |
|---------|------------|------------|
| **Kurulum Süresi** | 15 dakika | 30 dakika |
| **CORS** | Gerekli değil | Gerekli |
| **SSL Sertifikası** | 1 tane | 2 tane |
| **Reverse Proxy** | Gerekli | Opsiyonel |
| **DNS Kaydı** | 1 domain | 2 subdomain |
| **Güvenlik** | Yüksek | Yüksek |
| **Ölçeklenebilirlik** | Orta | Yüksek |
| **Bakım** | Kolay | Orta |
| **Maliyet** | Düşük | Düşük |
| **Önerilen** | ✅ **Evet** | Özel durumlar |
## 🎯 Hangi Seçeneği Seçmeliyim?
### Tek Domain Seçin Eğer:
- ✅ Basit kurulum istiyorsanız
- ✅ CORS ile uğraşmak istemiyorsanız
- ✅ Tek sunucuda çalışacaksanız
- ✅ Yeni başlıyorsanız
### İki Domain Seçin Eğer:
- ✅ Frontend ve backend'i farklı sunucularda çalıştıracaksanız
- ✅ Servislerinizi izole etmek istiyorsanız
- ✅ Farklı takımlar frontend/backend'i yönetecekse
- ✅ Bağımsız ölçeklendirme gerekiyorsa
## 📝 Özet: Hızlı Kurulum
### Tek Domain (5 Adım)
```bash
# 1. Sunucu başlatın
pm2 start ecosystem.config.js
# 2. Nginx Proxy Manager'a domain ekleyin
# 3. SSL sertifikası alın (Let's Encrypt)
# 4. Panelde domain ayarlayın
# 5. Test edin
```
### İki Domain (8 Adım)
```bash
# 1. Sunucu başlatın
pm2 start ecosystem.config.js
# 2. Nginx Proxy Manager'a backend domain ekleyin
# 3. Nginx Proxy Manager'a frontend domain ekleyin
# 4. SSL sertifikaları alın (Let's Encrypt)
# 5. Frontend .env dosyasını güncelleyin
# 6. Frontend'i yeniden build edin
# 7. Panelde CORS ve domain ayarlarını yapın
# 8. Test edin
```
---
**Son Güncelleme:** 2025-11-10
**Versiyon:** 1.0.0
**İpucu:** İlk kurulumda **Tek Domain** kullanmanızı öneririz. İhtiyaç duyduğunuzda daha sonra **İki Domain**'e geçebilirsiniz.

438
docs/NGINX_PROXY_MANAGER.md Normal file
View File

@@ -0,0 +1,438 @@
# 🌐 Nginx Proxy Manager Kurulum Rehberi
Oltalama Panel için Nginx Proxy Manager (NPM) ile reverse proxy kurulumu.
## 📋 Neden Tek Domain?
**Önerilen Yapı:** Tek domain, path-based routing
### Avantajları:
-**CORS Sorunu Yok**: Frontend ve backend aynı origin'de
-**Tek SSL Sertifikası**: Sadece bir domain için sertifika
-**Basit Yönetim**: Tek entry point
-**Kolay Kurulum**: Daha az konfigürasyon
### Alternatif: İki Subdomain
Eğer iki ayrı subdomain kullanmak isterseniz:
- `panel.yourdomain.com` → Frontend
- `api.yourdomain.com` → Backend
**Not:** Bu durumda CORS ayarları gerekir ve iki SSL sertifikası gerekir.
## 🚀 Nginx Proxy Manager Kurulumu
### 1. Docker ile NPM Kurulumu
```bash
# Docker ve Docker Compose kurulumu (eğer yoksa)
sudo apt update
sudo apt install docker.io docker-compose -y
# NPM dizini oluştur
mkdir -p ~/nginx-proxy-manager
cd ~/nginx-proxy-manager
```
**docker-compose.yml:**
```yaml
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # HTTP
- '443:443' # HTTPS
- '81:81' # Admin Panel
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
```
```bash
# NPM başlat
docker-compose up -d
# Logları izle
docker-compose logs -f
```
### 2. NPM Admin Paneline Giriş
1. Tarayıcıdan `http://sunucu-ip:81` adresine gidin
2. İlk giriş bilgileri:
- Email: `admin@example.com`
- Şifre: `changeme`
3. Giriş yaptıktan sonra **mutlaka** email ve şifreyi değiştirin
## 🔧 Tek Domain Konfigürasyonu (Önerilen)
### Adım 1: Proxy Host Ekle
NPM Admin Panel → **Hosts****Proxy Hosts****Add Proxy Host**
#### Details Sekmesi:
```
Domain Names: yourdomain.com
www.yourdomain.com
Scheme: http
Forward Hostname: localhost (veya Oltalama sunucusunun IP'si)
Forward Port: 4173
☑ Cache Assets
☑ Block Common Exploits
☑ Websockets Support
```
#### SSL Sekmesi:
```
SSL Certificate: Request a new SSL Certificate
☑ Force SSL
☑ HTTP/2 Support
☑ HSTS Enabled
☑ HSTS Subdomains
Email Address: youremail@example.com
☑ I Agree to the Let's Encrypt Terms of Service
```
#### Advanced Sekmesi:
**Custom Nginx Configuration:**
```nginx
# Backend API routing
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# Tracking endpoint
location /t/ {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
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;
# No cache for tracking
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Pragma "no-cache";
add_header Expires "0";
}
# Health check endpoint
location /health {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
}
# Frontend static files
location / {
proxy_pass http://localhost:4173;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
```
### Adım 2: Oltalama Panel Ayarları
Panele giriş yapın → **Ayarlar****Genel Ayarlar**
```
Domain (Base URL): https://yourdomain.com
```
**Önemli:**
- Protokolü ekleyin: `https://`
- Sondaki `/` karakterini eklemeyin
- Subdomain kullanıyorsanız: `https://panel.yourdomain.com`
## 🔀 İki Domain Konfigürasyonu (Alternatif)
### Oltalama Panel Ayarları
Panele giriş yapın → **Ayarlar****Genel Ayarlar**
```
☑ İki Ayrı Domain Kullan (CORS Aktif Et)
Backend Domain: https://api.yourdomain.com
Frontend Domain: https://panel.yourdomain.com
```
**Önemli:**
- CORS checkbox'ını işaretleyin
- Her iki domain'i de `https://` ile girin
- Sondaki `/` karakterini eklemeyin
## 🔀 Nginx Proxy Manager - İki Domain Kurulumu
Eğer backend ve frontend'i ayırmak isterseniz:
### Backend Proxy Host
```
Domain Names: api.yourdomain.com
Scheme: http
Forward Hostname: localhost
Forward Port: 3000
SSL: ✓ Force SSL, HTTP/2, HSTS
```
### Frontend Proxy Host
```
Domain Names: panel.yourdomain.com
Scheme: http
Forward Hostname: localhost
Forward Port: 4173
SSL: ✓ Force SSL, HTTP/2, HSTS
```
**Advanced (Frontend):**
```nginx
# Proxy backend API calls
location /api {
proxy_pass https://api.yourdomain.com;
proxy_ssl_server_name on;
proxy_set_header Host api.yourdomain.com;
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;
}
```
### CORS Ayarları
İki domain kullanıyorsanız CORS otomatik olarak ayarlanır. Sadece panelden ayarları yapın:
**Panelden Ayarlama (Önerilen):**
1. Giriş yapın → **Ayarlar****Genel Ayarlar**
2. **☑ İki Ayrı Domain Kullan** checkbox'ını işaretleyin
3. **Backend Domain**: `https://api.yourdomain.com`
4. **Frontend Domain**: `https://panel.yourdomain.com`
5. **Kaydet** butonuna tıklayın
CORS ayarları otomatik olarak uygulanacaktır.
**Manuel .env Ayarları (Opsiyonel):**
Backend `.env` (varsayılan):
```env
FRONTEND_URL=http://localhost:5173
```
Production'da panel ayarları bu değeri override edecektir.
## ✅ Test ve Doğrulama
### 1. DNS Kontrolü
```bash
# Domain çözümleniyor mu?
nslookup yourdomain.com
# Ping testi
ping yourdomain.com
```
### 2. SSL Sertifikası Kontrolü
```bash
# SSL sertifikası geçerli mi?
curl -I https://yourdomain.com
# Detaylı SSL testi
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
```
### 3. Endpoint Testleri
```bash
# Frontend erişilebilir mi?
curl https://yourdomain.com
# Backend API erişilebilir mi?
curl https://yourdomain.com/api/health
# Tracking endpoint çalışıyor mu?
curl -I https://yourdomain.com/t/test-token
```
### 4. Tarayıcı Testleri
1. `https://yourdomain.com` adresine gidin
2. Login sayfasıılmalı
3. Developer Console'da hata olmamalı
4. Network sekmesinde:
- Frontend dosyaları (JS, CSS) yüklenmeli
- API istekleri `/api/*` başarılı olmalı
- CORS hatası olmamalı
## 🐛 Sorun Giderme
### Problem: 502 Bad Gateway
**Çözüm:**
```bash
# Backend çalışıyor mu?
pm2 status
# Port dinleniyor mu?
sudo netstat -tulpn | grep -E ':(3000|4173)'
# Firewall açık mı?
sudo ufw status
```
### Problem: SSL Sertifikası Alınamıyor
**Çözüm:**
1. DNS kayıtlarının doğru olduğundan emin olun
2. 80 ve 443 portlarının açık olduğunu kontrol edin
3. Domain'in sunucuyu gösterdiğinden emin olun
```bash
# Port 80 ve 443 dinleniyor mu?
sudo netstat -tulpn | grep -E ':(80|443)'
# Firewall kuralları
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
```
### Problem: CORS Hatası
**İki subdomain kullanıyorsanız:**
1. Backend `.env` dosyasında `CORS_ORIGIN` ayarlayın
2. Frontend'den API URL'i doğru mu kontrol edin
3. Backend'i yeniden başlatın
```bash
cd /opt/oltalama/backend
pm2 restart oltalama-backend
```
### Problem: Tracking Linkleri Çalışmıyor
**Çözüm:**
1. Panelde doğru domain ayarlandığından emin olun
2. `/t/` route'unun proxy'de tanımlı olduğunu kontrol edin
3. Backend loglarını kontrol edin:
```bash
pm2 logs oltalama-backend --lines 50
```
## 📊 Performans Optimizasyonu
### NPM Cache Ayarları
**Advanced Nginx Config:**
```nginx
# Static dosyalar için cache
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
proxy_pass http://localhost:4173;
expires 1y;
add_header Cache-Control "public, immutable";
}
# API istekleri için cache yok
location /api {
proxy_pass http://localhost:3000;
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
```
### Rate Limiting
```nginx
# Rate limit tanımı
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api {
limit_req zone=api_limit burst=20 nodelay;
limit_req_status 429;
proxy_pass http://localhost:3000;
# ... diğer ayarlar
}
```
## 🔒 Güvenlik İpuçları
1. **NPM Admin Paneli Güvenliği:**
- Port 81'i firewall'dan kapatın (sadece lokal erişim)
- Güçlü şifre kullanın
- 2FA aktif edin (eğer varsa)
```bash
# NPM admin paneline sadece lokal erişim
sudo ufw deny 81/tcp
```
2. **SSL/TLS:**
- Her zaman Let's Encrypt kullanın
- Force SSL aktif edin
- HSTS etkinleştirin
3. **Headers:**
- NPM otomatik güvenlik başlıkları ekler
- Ek başlıklar için Advanced Nginx Config kullanın
## 📝 Özet Karşılaştırma
| Özellik | Tek Domain | İki Subdomain |
|---------|------------|---------------|
| CORS | ✅ Yok | ⚠️ Gerekli |
| SSL | ✅ 1 Sertifika | ⚠️ 2 Sertifika |
| Kurulum | ✅ Kolay | ⚠️ Orta |
| Yönetim | ✅ Basit | ⚠️ Karmaşık |
| DNS | ✅ 1 Kayıt | ⚠️ 2 Kayıt |
| Önerilen | ✅ **Evet** | ⚠️ İhtiyaç varsa |
## 🎯 Sonuç
**Önerimiz:** Tek domain kullanın (`yourdomain.com`)
- Frontend: `yourdomain.com/`
- Backend: `yourdomain.com/api/`
- Tracking: `yourdomain.com/t/`
Bu yapı en kolay ve en sorunsuz çözümdür.
---
**Son Güncelleme:** 2025-11-10
**Versiyon:** 1.0.0