Add comprehensive workflow documentation and diagrams
This commit is contained in:
parent
f711f726eb
commit
b6f7d8cc9b
|
|
@ -0,0 +1,230 @@
|
||||||
|
# 🚀 Hosting Platform - İş Akışı Dokümantasyonu
|
||||||
|
|
||||||
|
> Müşteri ve Admin panellerinin tüm iş akışlarını görsel diyagramlar ve detaylı açıklamalarla içeren kapsamlı dokümantasyon.
|
||||||
|
|
||||||
|
## 📚 Dokümantasyon Dosyaları
|
||||||
|
|
||||||
|
### 1. 📊 [WORKFLOW_DIAGRAMS.md](./WORKFLOW_DIAGRAMS.md)
|
||||||
|
Tüm görsel diyagramların açıklamaları ve kullanım kılavuzu.
|
||||||
|
|
||||||
|
**İçerik:**
|
||||||
|
- Genel iş akışları (Müşteri + Admin)
|
||||||
|
- Domain setup detaylı sequence diagram
|
||||||
|
- API endpoint yapısı
|
||||||
|
- Veritabanı şemaları (ER diagrams)
|
||||||
|
- Sistem mimarisi
|
||||||
|
|
||||||
|
### 2. 📖 [WORKFLOW_DOCUMENTATION.md](./WORKFLOW_DOCUMENTATION.md)
|
||||||
|
Detaylı teknik dokümantasyon ve API referansı.
|
||||||
|
|
||||||
|
**İçerik:**
|
||||||
|
- Proje genel bakış
|
||||||
|
- Müşteri panel iş akışları (adım adım)
|
||||||
|
- Admin panel iş akışları (adım adım)
|
||||||
|
- Tüm API endpoint'lerin detaylı açıklaması
|
||||||
|
- Veritabanı SQL şemaları
|
||||||
|
- Sistem mimarisi ve deployment
|
||||||
|
- Güvenlik yapılandırması
|
||||||
|
- Monitoring ve logging
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Hızlı Başlangıç
|
||||||
|
|
||||||
|
### Müşteri Panel İş Akışı Özeti
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Kayıt/Giriş → JWT Token
|
||||||
|
2. Dashboard → Domain Listesi
|
||||||
|
3. Domain Ekle:
|
||||||
|
├─ Domain Doğrula
|
||||||
|
├─ CF Hesap Seç (Company/Own)
|
||||||
|
├─ Zone Doğrula
|
||||||
|
├─ NS Kontrolü
|
||||||
|
├─ DNS Önizleme
|
||||||
|
├─ DNS Uygula
|
||||||
|
├─ SSL Yapılandır
|
||||||
|
└─ Kaydet
|
||||||
|
4. Container Deploy (opsiyonel)
|
||||||
|
5. Plan Yükselt (opsiyonel)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Admin Panel İş Akışı Özeti
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Admin Giriş → JWT + Audit Log
|
||||||
|
2. Dashboard → İstatistikler
|
||||||
|
3. Yönetim:
|
||||||
|
├─ Müşteriler (Liste, Detay, Plan Güncelle)
|
||||||
|
├─ Planlar (CRUD, Limit Ayarla)
|
||||||
|
├─ CF Hesapları (CRUD, Token Şifrele)
|
||||||
|
└─ Audit Logs (Görüntüle, Filtrele)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 Görsel Diyagramlar
|
||||||
|
|
||||||
|
Tüm diyagramlar interaktif Mermaid formatında oluşturulmuştur ve düzenlenebilir.
|
||||||
|
|
||||||
|
### Mevcut Diyagramlar
|
||||||
|
|
||||||
|
1. **Müşteri Panel - Genel İş Akışı**
|
||||||
|
- Kimlik doğrulama
|
||||||
|
- Dashboard navigasyonu
|
||||||
|
- Domain yönetimi (8 adım)
|
||||||
|
- Container deployment
|
||||||
|
- Abonelik yönetimi
|
||||||
|
|
||||||
|
2. **Admin Panel - Genel İş Akışı**
|
||||||
|
- Admin authentication
|
||||||
|
- Müşteri yönetimi
|
||||||
|
- Plan yönetimi
|
||||||
|
- CF hesap yönetimi
|
||||||
|
- Audit sistemi
|
||||||
|
|
||||||
|
3. **Domain Setup - Sequence Diagram**
|
||||||
|
- Kullanıcı → Frontend → API → Database → Cloudflare
|
||||||
|
- Tüm adımların detaylı akışı
|
||||||
|
- Hata senaryoları
|
||||||
|
|
||||||
|
4. **API Endpoint Yapısı - Müşteri Panel**
|
||||||
|
- 5 ana kategori
|
||||||
|
- 20+ endpoint
|
||||||
|
|
||||||
|
5. **API Endpoint Yapısı - Admin Panel**
|
||||||
|
- 5 ana kategori
|
||||||
|
- 15+ endpoint
|
||||||
|
|
||||||
|
6. **Veritabanı Şeması - Müşteri Panel**
|
||||||
|
- 5 ana tablo
|
||||||
|
- İlişkiler (ER diagram)
|
||||||
|
|
||||||
|
7. **Veritabanı Şeması - Admin Panel**
|
||||||
|
- 4 ana tablo
|
||||||
|
- İlişkiler (ER diagram)
|
||||||
|
|
||||||
|
8. **Sistem Mimarisi - Genel Bakış**
|
||||||
|
- 6 katman
|
||||||
|
- Tüm bileşenler ve bağlantılar
|
||||||
|
|
||||||
|
9. **Kimlik Doğrulama Akışı**
|
||||||
|
- Müşteri vs Admin karşılaştırması
|
||||||
|
- Güvenlik katmanları
|
||||||
|
|
||||||
|
10. **Data Flow - Sistem Geneli**
|
||||||
|
- Kullanıcıdan infrastructure'a veri akışı
|
||||||
|
- Tüm servisler arası iletişim
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Diyagramları Düzenleme
|
||||||
|
|
||||||
|
Tüm diyagramlar Mermaid syntax ile oluşturulmuştur. Düzenlemek için:
|
||||||
|
|
||||||
|
### Online Editör
|
||||||
|
1. [Mermaid Live Editor](https://mermaid.live/) açın
|
||||||
|
2. Diyagram kodunu kopyalayın
|
||||||
|
3. Düzenleyin ve önizleyin
|
||||||
|
4. Export edin (PNG, SVG, PDF)
|
||||||
|
|
||||||
|
### VS Code
|
||||||
|
1. "Markdown Preview Mermaid Support" eklentisini yükleyin
|
||||||
|
2. Markdown dosyasını açın
|
||||||
|
3. Preview'da diyagramları görün
|
||||||
|
|
||||||
|
### Örnek Mermaid Kodu
|
||||||
|
```mermaid
|
||||||
|
graph TB
|
||||||
|
A[Başlangıç] --> B{Karar}
|
||||||
|
B -->|Evet| C[İşlem 1]
|
||||||
|
B -->|Hayır| D[İşlem 2]
|
||||||
|
C --> E[Son]
|
||||||
|
D --> E
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 API Endpoint Hızlı Referans
|
||||||
|
|
||||||
|
### Müşteri Panel (Port 5000)
|
||||||
|
|
||||||
|
| Kategori | Endpoint | Method | Açıklama |
|
||||||
|
|----------|----------|--------|----------|
|
||||||
|
| Auth | `/api/auth/register` | POST | Yeni kullanıcı kaydı |
|
||||||
|
| Auth | `/api/auth/login` | POST | Kullanıcı girişi |
|
||||||
|
| Customer | `/api/customer/domains` | GET | Domain listesi |
|
||||||
|
| DNS | `/api/dns/validate-domain` | POST | Domain doğrulama |
|
||||||
|
| DNS | `/api/dns/apply-changes` | POST | DNS değişikliklerini uygula |
|
||||||
|
|
||||||
|
### Admin Panel (Port 5001)
|
||||||
|
|
||||||
|
| Kategori | Endpoint | Method | Açıklama |
|
||||||
|
|----------|----------|--------|----------|
|
||||||
|
| Auth | `/api/auth/login` | POST | Admin girişi |
|
||||||
|
| Plans | `/api/plans` | GET/POST | Plan listesi/oluştur |
|
||||||
|
| CF Accounts | `/api/cf-accounts` | GET/POST | CF hesap yönetimi |
|
||||||
|
| Customers | `/api/customers` | GET | Müşteri listesi |
|
||||||
|
| Audit | `/api/audit/logs` | GET | Audit log listesi |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔒 Güvenlik Özeti
|
||||||
|
|
||||||
|
- **Authentication**: JWT tokens (24 saat geçerlilik)
|
||||||
|
- **Password**: bcrypt hashing
|
||||||
|
- **API Tokens**: Fernet encryption
|
||||||
|
- **CORS**: Domain-specific policies
|
||||||
|
- **Database**: Separate databases (isolation)
|
||||||
|
- **HTTPS**: Cloudflare SSL (Full mode)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Veritabanı Özeti
|
||||||
|
|
||||||
|
### Müşteri Panel (hosting_db)
|
||||||
|
- **users**: 5 tablo
|
||||||
|
- **customers**: Kullanıcı hesapları
|
||||||
|
- **domains**: Müşteri profilleri
|
||||||
|
- **dns_records**: Domain kayıtları
|
||||||
|
- **cloudflare_accounts**: DNS detayları
|
||||||
|
|
||||||
|
### Admin Panel (admin_hosting_db)
|
||||||
|
- **admin_users**: 4 tablo
|
||||||
|
- **subscription_plans**: Admin hesapları
|
||||||
|
- **cloudflare_accounts**: Abonelik planları
|
||||||
|
- **audit_logs**: Audit kayıtları
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Deployment Özeti
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Frontend Build
|
||||||
|
cd MusteriPanel/frontend && npm run build
|
||||||
|
cd AdminPanel/frontend && npm run build
|
||||||
|
|
||||||
|
# Database Migration
|
||||||
|
cd MusteriPanel/backend && flask db upgrade
|
||||||
|
cd AdminPanel/backend && flask db upgrade
|
||||||
|
|
||||||
|
# Start Services
|
||||||
|
sudo supervisorctl start all
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📞 İletişim ve Destek
|
||||||
|
|
||||||
|
- **Repository (Müşteri)**: https://gitea.argeict.net/hostadmin/hosting-platform
|
||||||
|
- **Repository (Admin)**: https://gitea.argeict.net/argeict/admin-panel
|
||||||
|
- **Production (Müşteri)**: https://argeict.net
|
||||||
|
- **Production (Admin)**: https://admin.argeict.net
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Son Güncelleme**: 2024-01-12
|
||||||
|
**Versiyon**: 1.0.0
|
||||||
|
**Durum**: ✅ Production Ready
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,243 @@
|
||||||
|
# 📊 Hosting Platform - İş Akışı Diyagramları
|
||||||
|
|
||||||
|
Bu dokümanda projenin tüm görsel iş akışı diyagramları bulunmaktadır.
|
||||||
|
|
||||||
|
## 📑 İçindekiler
|
||||||
|
|
||||||
|
1. [Genel İş Akışları](#genel-iş-akışları)
|
||||||
|
2. [Domain Setup Detaylı Akış](#domain-setup-detaylı-akış)
|
||||||
|
3. [API Endpoint Yapısı](#api-endpoint-yapısı)
|
||||||
|
4. [Veritabanı Şemaları](#veritabanı-şemaları)
|
||||||
|
5. [Sistem Mimarisi](#sistem-mimarisi)
|
||||||
|
6. [Kimlik Doğrulama](#kimlik-doğrulama)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Genel İş Akışları
|
||||||
|
|
||||||
|
### Müşteri Panel - Ana İş Akışı
|
||||||
|
|
||||||
|
Bu diyagram müşteri panelinin tüm ana işlevlerini gösterir:
|
||||||
|
- Kullanıcı kaydı ve girişi
|
||||||
|
- Dashboard yönetimi
|
||||||
|
- Domain ekleme ve yönetimi (8 adımlı süreç)
|
||||||
|
- Container deployment
|
||||||
|
- Abonelik yönetimi
|
||||||
|
|
||||||
|
**Akış Adımları:**
|
||||||
|
1. **Kimlik Doğrulama**: Register/Login → JWT Token
|
||||||
|
2. **Dashboard**: Profil, Domain Listesi, İstatistikler
|
||||||
|
3. **Domain Yönetimi**:
|
||||||
|
- Domain ekle
|
||||||
|
- CF hesap seç (Company/Own)
|
||||||
|
- Zone doğrula
|
||||||
|
- NS kontrolü
|
||||||
|
- DNS önizleme
|
||||||
|
- DNS uygula
|
||||||
|
- SSL yapılandır
|
||||||
|
- Veritabanına kaydet
|
||||||
|
4. **Container**: Deploy → Yapılandır → Yönet
|
||||||
|
5. **Abonelik**: Planları görüntüle → Yükselt → Ödeme
|
||||||
|
|
||||||
|
### Admin Panel - Ana İş Akışı
|
||||||
|
|
||||||
|
Bu diyagram admin panelinin tüm yönetim işlevlerini gösterir:
|
||||||
|
- Admin girişi ve audit logging
|
||||||
|
- Dashboard ve istatistikler
|
||||||
|
- Müşteri yönetimi
|
||||||
|
- Plan yönetimi (CRUD)
|
||||||
|
- Cloudflare hesap yönetimi
|
||||||
|
- Audit log sistemi
|
||||||
|
|
||||||
|
**Akış Adımları:**
|
||||||
|
1. **Kimlik Doğrulama**: Admin Login → JWT + Role → Audit Log
|
||||||
|
2. **Dashboard**: Sistem istatistikleri ve genel bakış
|
||||||
|
3. **Müşteri Yönetimi**: Liste → Detay → Plan Güncelle → Durum Yönet
|
||||||
|
4. **Plan Yönetimi**: Liste → Oluştur/Düzenle/Sil → Limit Belirle
|
||||||
|
5. **CF Yönetimi**: Liste → Ekle/Düzenle → Token Şifrele → Kota Kontrol
|
||||||
|
6. **Audit**: Tüm işlemler loglanır → Görüntüle → Filtrele
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌐 Domain Setup Detaylı Akış
|
||||||
|
|
||||||
|
### Sequence Diagram - Adım Adım
|
||||||
|
|
||||||
|
Bu sequence diagram, domain ekleme sürecinin tüm adımlarını detaylı gösterir:
|
||||||
|
|
||||||
|
**Katılımcılar:**
|
||||||
|
- Kullanıcı
|
||||||
|
- Frontend (React)
|
||||||
|
- Backend API (Flask)
|
||||||
|
- PostgreSQL Database
|
||||||
|
- Cloudflare API
|
||||||
|
- Load Balancer
|
||||||
|
|
||||||
|
**Süreç:**
|
||||||
|
|
||||||
|
1. **Domain Girişi**
|
||||||
|
- Kullanıcı domain adını girer
|
||||||
|
- POST /api/dns/validate-domain
|
||||||
|
- Database'de kontrol edilir
|
||||||
|
|
||||||
|
2. **CF Hesap Seçimi**
|
||||||
|
- Company Account: Listeden seçim
|
||||||
|
- Own Account: Token girişi
|
||||||
|
|
||||||
|
3. **Zone Doğrulama**
|
||||||
|
- Cloudflare API ile zone bilgisi alınır
|
||||||
|
- Zone ID, nameservers kaydedilir
|
||||||
|
|
||||||
|
4. **Nameserver Kontrolü**
|
||||||
|
- NS kayıtları kontrol edilir
|
||||||
|
- Yapılandırılmamışsa talimatlar gösterilir
|
||||||
|
- Polling ile kontrol devam eder
|
||||||
|
|
||||||
|
5. **DNS Önizleme**
|
||||||
|
- Load Balancer IP seçilir (hash-based)
|
||||||
|
- Mevcut DNS kayıtları alınır
|
||||||
|
- Değişiklikler hesaplanır ve gösterilir
|
||||||
|
|
||||||
|
6. **DNS Uygulama**
|
||||||
|
- A records güncellenir (root + www)
|
||||||
|
- SSL yapılandırması (Full, HTTPS, Auto Rewrites)
|
||||||
|
- Database'e kaydedilir
|
||||||
|
|
||||||
|
7. **Tamamlama**
|
||||||
|
- Domain aktif duruma geçer
|
||||||
|
- Başarı mesajı gösterilir
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📡 API Endpoint Yapısı
|
||||||
|
|
||||||
|
### Müşteri Panel API Endpoints
|
||||||
|
|
||||||
|
**Kategoriler:**
|
||||||
|
- 🔐 **Authentication** (`/api/auth`)
|
||||||
|
- POST /register
|
||||||
|
- POST /login
|
||||||
|
- GET /me
|
||||||
|
- POST /logout
|
||||||
|
|
||||||
|
- 👤 **Customer** (`/api/customer`)
|
||||||
|
- GET /domains
|
||||||
|
- POST /domains
|
||||||
|
- GET /domains/:id
|
||||||
|
- DELETE /domains/:id
|
||||||
|
- GET /stats
|
||||||
|
|
||||||
|
- 🌐 **DNS** (`/api/dns`)
|
||||||
|
- POST /validate-domain
|
||||||
|
- POST /validate-zone
|
||||||
|
- POST /select-company-account
|
||||||
|
- GET /check-nameservers
|
||||||
|
- POST /preview-changes
|
||||||
|
- POST /apply-changes
|
||||||
|
|
||||||
|
- ⚙️ **Admin** (`/api/admin`)
|
||||||
|
- CF Accounts CRUD
|
||||||
|
- Customers Management
|
||||||
|
- Stats
|
||||||
|
|
||||||
|
- 🐳 **Containers** (`/api/containers`)
|
||||||
|
- GET /
|
||||||
|
- POST /deploy
|
||||||
|
- GET /:id
|
||||||
|
- DELETE /:id
|
||||||
|
|
||||||
|
### Admin Panel API Endpoints
|
||||||
|
|
||||||
|
**Kategoriler:**
|
||||||
|
- 🔐 **Authentication** (`/api/auth`)
|
||||||
|
- 📋 **Plans** (`/api/plans`) - CRUD
|
||||||
|
- ☁️ **CF Accounts** (`/api/cf-accounts`) - CRUD
|
||||||
|
- 👥 **Customers** (`/api/customers`) - Management
|
||||||
|
- 📝 **Audit** (`/api/audit`) - Logs & Stats
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🗄️ Veritabanı Şemaları
|
||||||
|
|
||||||
|
### Müşteri Panel Database (hosting_db)
|
||||||
|
|
||||||
|
**Entity Relationships:**
|
||||||
|
- USERS (1) → (N) CUSTOMERS
|
||||||
|
- CUSTOMERS (1) → (N) DOMAINS
|
||||||
|
- DOMAINS (1) → (N) DNS_RECORDS
|
||||||
|
- CLOUDFLARE_ACCOUNTS (1) → (N) DOMAINS
|
||||||
|
|
||||||
|
**Ana Tablolar:**
|
||||||
|
1. **users**: Kullanıcı hesapları
|
||||||
|
2. **customers**: Müşteri profilleri ve abonelikler
|
||||||
|
3. **domains**: Domain kayıtları
|
||||||
|
4. **dns_records**: DNS kayıt detayları
|
||||||
|
5. **cloudflare_accounts**: Şirket CF hesapları
|
||||||
|
|
||||||
|
**Önemli Alanlar:**
|
||||||
|
- `cf_api_token_encrypted`: Şifrelenmiş API token (Fernet)
|
||||||
|
- `subscription_plan`: Plan slug (free, basic, premium)
|
||||||
|
- `cf_account_type`: 'company' veya 'own'
|
||||||
|
- `status`: pending, active, suspended, deleted
|
||||||
|
|
||||||
|
### Admin Panel Database (admin_hosting_db)
|
||||||
|
|
||||||
|
**Entity Relationships:**
|
||||||
|
- ADMIN_USERS (1) → (N) AUDIT_LOGS
|
||||||
|
- SUBSCRIPTION_PLANS ← → CLOUDFLARE_ACCOUNTS
|
||||||
|
|
||||||
|
**Ana Tablolar:**
|
||||||
|
1. **admin_users**: Admin hesapları
|
||||||
|
2. **subscription_plans**: Abonelik planları
|
||||||
|
3. **cloudflare_accounts**: CF hesap yönetimi
|
||||||
|
4. **audit_logs**: Tüm admin işlemleri
|
||||||
|
|
||||||
|
**Önemli Alanlar:**
|
||||||
|
- `role`: admin, super_admin
|
||||||
|
- `features`: JSON array (plan özellikleri)
|
||||||
|
- `action`: login, create_plan, update_customer, vb.
|
||||||
|
- `details`: JSON (işlem detayları)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏗️ Sistem Mimarisi
|
||||||
|
|
||||||
|
### Genel Mimari
|
||||||
|
|
||||||
|
**Katmanlar:**
|
||||||
|
|
||||||
|
1. **Internet Layer**
|
||||||
|
- Kullanıcılar (Müşteriler + Adminler)
|
||||||
|
- HTTPS üzerinden erişim
|
||||||
|
|
||||||
|
2. **CDN/DNS Layer**
|
||||||
|
- Cloudflare (DNS, SSL, Proxy)
|
||||||
|
- DDoS koruması
|
||||||
|
- SSL/TLS termination
|
||||||
|
|
||||||
|
3. **Frontend Layer**
|
||||||
|
- Customer React App (argeict.net, Port 3000)
|
||||||
|
- Admin React App (admin.argeict.net, Port 3001)
|
||||||
|
|
||||||
|
4. **Backend Layer**
|
||||||
|
- Customer Flask API (api.argeict.net, Port 5000)
|
||||||
|
- Admin Flask API (admin-api.argeict.net, Port 5001)
|
||||||
|
|
||||||
|
5. **Data Layer**
|
||||||
|
- PostgreSQL: hosting_db
|
||||||
|
- PostgreSQL: admin_hosting_db
|
||||||
|
- Redis Cache
|
||||||
|
|
||||||
|
6. **Infrastructure Layer**
|
||||||
|
- Load Balancers (3 adet)
|
||||||
|
- Docker Containers
|
||||||
|
- Nginx Reverse Proxy
|
||||||
|
|
||||||
|
**Veri Akışı:**
|
||||||
|
- Frontend → Backend: REST API (JSON)
|
||||||
|
- Backend → Database: SQLAlchemy ORM
|
||||||
|
- Backend → Cache: Redis
|
||||||
|
- Backend → Cloudflare: REST API
|
||||||
|
- Admin Panel → Customer Panel: API Call (cross-panel)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,957 @@
|
||||||
|
# 🔄 Hosting Platform - İş Akışı Dokümantasyonu
|
||||||
|
|
||||||
|
Bu dokümantasyon, Hosting Platform projesinin tüm iş akışlarını detaylı olarak açıklar.
|
||||||
|
|
||||||
|
## 📋 İçindekiler
|
||||||
|
|
||||||
|
1. [Proje Genel Bakış](#proje-genel-bakış)
|
||||||
|
2. [Müşteri Panel İş Akışları](#müşteri-panel-iş-akışları)
|
||||||
|
3. [Admin Panel İş Akışları](#admin-panel-iş-akışları)
|
||||||
|
4. [API Endpoint Referansı](#api-endpoint-referansı)
|
||||||
|
5. [Veritabanı Yapısı](#veritabanı-yapısı)
|
||||||
|
6. [Sistem Mimarisi](#sistem-mimarisi)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Proje Genel Bakış
|
||||||
|
|
||||||
|
### Müşteri Panel (Customer Platform)
|
||||||
|
- **Frontend**: https://argeict.net (React + Vite, Port 3000)
|
||||||
|
- **Backend API**: https://api.argeict.net (Flask, Port 5000)
|
||||||
|
- **Database**: `hosting_db` (PostgreSQL)
|
||||||
|
- **Repository**: https://gitea.argeict.net/hostadmin/hosting-platform
|
||||||
|
|
||||||
|
### Admin Panel (Admin Platform)
|
||||||
|
- **Frontend**: https://admin.argeict.net (React + Vite, Port 3001)
|
||||||
|
- **Backend API**: https://admin-api.argeict.net (Flask, Port 5001)
|
||||||
|
- **Database**: `admin_hosting_db` (PostgreSQL)
|
||||||
|
- **Repository**: https://gitea.argeict.net/argeict/admin-panel
|
||||||
|
|
||||||
|
### Teknoloji Stack
|
||||||
|
- **Backend**: Flask 3.0, SQLAlchemy 2.0, PostgreSQL, JWT, Redis
|
||||||
|
- **Frontend**: React 18, Vite, TailwindCSS, Axios
|
||||||
|
- **Infrastructure**: Docker, Nginx, Supervisor, Cloudflare
|
||||||
|
- **Security**: Separate databases, JWT authentication, Token encryption
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 👤 Müşteri Panel İş Akışları
|
||||||
|
|
||||||
|
### 1. Kullanıcı Kaydı ve Giriş
|
||||||
|
|
||||||
|
#### Kayıt Akışı
|
||||||
|
```
|
||||||
|
1. Kullanıcı → /register sayfası
|
||||||
|
2. Form doldurma (email, password, full_name)
|
||||||
|
3. POST /api/auth/register
|
||||||
|
4. Backend:
|
||||||
|
- Email kontrolü (unique)
|
||||||
|
- Password hash (bcrypt)
|
||||||
|
- User kaydı oluştur
|
||||||
|
- Customer profili oluştur (default plan)
|
||||||
|
- JWT token üret
|
||||||
|
5. Response: {token, user, customer}
|
||||||
|
6. Frontend: Token'ı localStorage'a kaydet
|
||||||
|
7. Redirect → Dashboard
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Giriş Akışı
|
||||||
|
```
|
||||||
|
1. Kullanıcı → /login sayfası
|
||||||
|
2. Email & Password gir
|
||||||
|
3. POST /api/auth/login
|
||||||
|
4. Backend:
|
||||||
|
- User kontrolü
|
||||||
|
- Password doğrulama
|
||||||
|
- is_active kontrolü
|
||||||
|
- JWT token üret
|
||||||
|
- last_login güncelle
|
||||||
|
5. Response: {token, user, customer}
|
||||||
|
6. Frontend: Token'ı localStorage'a kaydet
|
||||||
|
7. Redirect → Dashboard
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Domain Ekleme İş Akışı (Detaylı)
|
||||||
|
|
||||||
|
#### Adım 1: Domain Doğrulama
|
||||||
|
```
|
||||||
|
Endpoint: POST /api/dns/validate-domain
|
||||||
|
Request: {domain: "example.com"}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. Domain formatı kontrolü (regex)
|
||||||
|
2. Veritabanında domain var mı kontrol
|
||||||
|
3. Customer domain limiti kontrolü
|
||||||
|
4. Response: {status: "success", domain: "example.com"}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Adım 2: Cloudflare Hesap Seçimi
|
||||||
|
```
|
||||||
|
A) Company Account Kullanımı:
|
||||||
|
- GET /api/admin/cf-accounts
|
||||||
|
- Aktif CF hesapları listele
|
||||||
|
- Kota kontrolü (current_domain_count < max_domains)
|
||||||
|
- Kullanıcı hesap seçer
|
||||||
|
|
||||||
|
B) Own Account Kullanımı:
|
||||||
|
- Kullanıcı CF email ve API token girer
|
||||||
|
- Token frontend'de tutulur (geçici)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Adım 3: Zone Doğrulama
|
||||||
|
```
|
||||||
|
Endpoint: POST /api/dns/validate-zone
|
||||||
|
Request: {
|
||||||
|
domain: "example.com",
|
||||||
|
cf_token: "xxx",
|
||||||
|
cf_email: "user@example.com"
|
||||||
|
}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. CloudflareService başlat
|
||||||
|
2. cf.zones.get() ile zone bilgisi al
|
||||||
|
3. Zone ID, nameservers, status kontrol
|
||||||
|
4. Response: {
|
||||||
|
zone_id: "xxx",
|
||||||
|
nameservers: ["ns1.cloudflare.com", ...],
|
||||||
|
status: "active"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Adım 4: Nameserver Kontrolü
|
||||||
|
```
|
||||||
|
Endpoint: GET /api/dns/check-nameservers?domain=example.com&zone_id=xxx
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. cf.zones.get(zone_id) ile zone bilgisi al
|
||||||
|
2. status === "active" kontrolü
|
||||||
|
3. Response: {
|
||||||
|
configured: true/false,
|
||||||
|
current_nameservers: [...],
|
||||||
|
required_nameservers: [...]
|
||||||
|
}
|
||||||
|
|
||||||
|
Frontend:
|
||||||
|
- Eğer configured=false ise:
|
||||||
|
- NS talimatları göster
|
||||||
|
- "Kontrol Et" butonu
|
||||||
|
- Polling ile kontrol et
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Adım 5: DNS Önizleme
|
||||||
|
```
|
||||||
|
Endpoint: POST /api/dns/preview-changes
|
||||||
|
Request: {
|
||||||
|
domain: "example.com",
|
||||||
|
zone_id: "xxx",
|
||||||
|
cf_token: "xxx"
|
||||||
|
}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. Load Balancer IP seç (hash-based):
|
||||||
|
- MD5(domain) % len(LB_IPS)
|
||||||
|
- LB_IPS = [185.199.108.153, 185.199.109.153, 185.199.110.153]
|
||||||
|
2. Mevcut DNS kayıtlarını al:
|
||||||
|
- cf.zones.dns_records.get(zone_id, type="A")
|
||||||
|
3. Değişiklikleri hesapla:
|
||||||
|
- Root domain (example.com) → new_ip
|
||||||
|
- WWW subdomain (www.example.com) → new_ip
|
||||||
|
4. Response: {
|
||||||
|
domain: "example.com",
|
||||||
|
new_ip: "185.199.108.153",
|
||||||
|
changes: [
|
||||||
|
{name: "example.com", action: "update", old: {...}, new: {...}},
|
||||||
|
{name: "www.example.com", action: "create", new: {...}}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Adım 6: DNS Değişikliklerini Uygula
|
||||||
|
```
|
||||||
|
Endpoint: POST /api/dns/apply-changes
|
||||||
|
Request: {
|
||||||
|
domain: "example.com",
|
||||||
|
zone_id: "xxx",
|
||||||
|
cf_token: "xxx",
|
||||||
|
preview: {...},
|
||||||
|
proxy_enabled: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. Her değişiklik için:
|
||||||
|
- update: cf.zones.dns_records.patch(record_id)
|
||||||
|
- create: cf.zones.dns_records.post()
|
||||||
|
- delete: cf.zones.dns_records.delete(record_id)
|
||||||
|
2. SSL Yapılandırması:
|
||||||
|
- SSL Mode: Full
|
||||||
|
- Always Use HTTPS: ON
|
||||||
|
- Auto HTTPS Rewrites: ON
|
||||||
|
- Minimum TLS Version: 1.2
|
||||||
|
3. Domain veritabanına kaydet:
|
||||||
|
- Domain tablosu
|
||||||
|
- DNS Records tablosu
|
||||||
|
4. CF Account güncelle (company account ise):
|
||||||
|
- current_domain_count += 1
|
||||||
|
5. Response: {status: "success", domain: {...}}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Container Deployment İş Akışı
|
||||||
|
|
||||||
|
#### Container Oluşturma
|
||||||
|
```
|
||||||
|
Endpoint: POST /api/containers/deploy
|
||||||
|
Request: {
|
||||||
|
domain_id: 1,
|
||||||
|
container_type: "wordpress",
|
||||||
|
config: {
|
||||||
|
php_version: "8.1",
|
||||||
|
mysql_version: "8.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. Domain kontrolü (customer'a ait mi?)
|
||||||
|
2. Container limiti kontrolü
|
||||||
|
3. Docker container oluştur
|
||||||
|
4. Database oluştur
|
||||||
|
5. Nginx config oluştur
|
||||||
|
6. Container başlat
|
||||||
|
7. Veritabanına kaydet
|
||||||
|
8. Response: {container_id, status, access_url}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Subscription Management
|
||||||
|
|
||||||
|
#### Plan Görüntüleme
|
||||||
|
```
|
||||||
|
Endpoint: GET /api/customer/plans
|
||||||
|
Response: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
name: "Basic",
|
||||||
|
price_monthly: 9.99,
|
||||||
|
max_domains: 1,
|
||||||
|
max_containers: 1,
|
||||||
|
features: [...]
|
||||||
|
},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Plan Yükseltme
|
||||||
|
```
|
||||||
|
Endpoint: POST /api/customer/upgrade-plan
|
||||||
|
Request: {
|
||||||
|
plan_id: 2,
|
||||||
|
billing_cycle: "monthly"
|
||||||
|
}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. Plan kontrolü
|
||||||
|
2. Ödeme işlemi (Stripe/PayPal)
|
||||||
|
3. Customer güncelle:
|
||||||
|
- subscription_plan
|
||||||
|
- max_domains
|
||||||
|
- max_containers
|
||||||
|
- subscription_end
|
||||||
|
4. Response: {status: "success", customer: {...}}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Admin Panel İş Akışları
|
||||||
|
|
||||||
|
### 1. Admin Giriş
|
||||||
|
|
||||||
|
```
|
||||||
|
Endpoint: POST /api/auth/login
|
||||||
|
Request: {username: "admin", password: "xxx"}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. AdminUser kontrolü
|
||||||
|
2. Password doğrulama
|
||||||
|
3. is_active kontrolü
|
||||||
|
4. JWT token üret (role bilgisi dahil)
|
||||||
|
5. last_login güncelle
|
||||||
|
6. AuditLog kaydet (action: "login")
|
||||||
|
7. Response: {token, admin: {...}}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Subscription Plan Yönetimi
|
||||||
|
|
||||||
|
#### Plan Oluşturma
|
||||||
|
```
|
||||||
|
Endpoint: POST /api/plans
|
||||||
|
Request: {
|
||||||
|
name: "Premium",
|
||||||
|
slug: "premium",
|
||||||
|
description: "Premium plan",
|
||||||
|
price_monthly: 29.99,
|
||||||
|
price_yearly: 299.99,
|
||||||
|
max_domains: 10,
|
||||||
|
max_containers: 10,
|
||||||
|
max_storage_gb: 100,
|
||||||
|
max_bandwidth_gb: 1000,
|
||||||
|
features: ["SSL", "Backup", "Support"],
|
||||||
|
is_active: true,
|
||||||
|
is_visible: true,
|
||||||
|
sort_order: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. Slug unique kontrolü
|
||||||
|
2. SubscriptionPlan oluştur
|
||||||
|
3. AuditLog kaydet
|
||||||
|
4. Response: {status: "success", plan: {...}}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Plan Güncelleme
|
||||||
|
```
|
||||||
|
Endpoint: PUT /api/plans/:id
|
||||||
|
Request: {price_monthly: 24.99, ...}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. Plan kontrolü
|
||||||
|
2. Güncelleme
|
||||||
|
3. AuditLog kaydet
|
||||||
|
4. Response: {status: "success", plan: {...}}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Cloudflare Hesap Yönetimi
|
||||||
|
|
||||||
|
#### CF Hesabı Ekleme
|
||||||
|
```
|
||||||
|
Endpoint: POST /api/cf-accounts
|
||||||
|
Request: {
|
||||||
|
name: "CF Account 1",
|
||||||
|
email: "cf@company.com",
|
||||||
|
api_token: "xxx",
|
||||||
|
max_domains: 100,
|
||||||
|
notes: "Primary account"
|
||||||
|
}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. Name unique kontrolü
|
||||||
|
2. Token şifreleme (Fernet encryption)
|
||||||
|
3. CloudflareAccount oluştur
|
||||||
|
4. AuditLog kaydet
|
||||||
|
5. Response: {status: "success", account: {...}}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### CF Hesabı Güncelleme
|
||||||
|
```
|
||||||
|
Endpoint: PUT /api/cf-accounts/:id
|
||||||
|
Request: {max_domains: 150, is_active: true}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. Account kontrolü
|
||||||
|
2. Token güncelleme (varsa şifrele)
|
||||||
|
3. Güncelleme
|
||||||
|
4. AuditLog kaydet
|
||||||
|
5. Response: {status: "success", account: {...}}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Müşteri Yönetimi
|
||||||
|
|
||||||
|
#### Müşteri Listesi
|
||||||
|
```
|
||||||
|
Endpoint: GET /api/customers
|
||||||
|
Response: {
|
||||||
|
status: "success",
|
||||||
|
customers: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
email: "user@example.com",
|
||||||
|
full_name: "John Doe",
|
||||||
|
subscription_plan: "basic",
|
||||||
|
domain_count: 2,
|
||||||
|
is_active: true,
|
||||||
|
created_at: "2024-01-01"
|
||||||
|
},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Müşteri Plan Güncelleme
|
||||||
|
```
|
||||||
|
Endpoint: PUT /api/customers/:id/plan
|
||||||
|
Request: {
|
||||||
|
plan_slug: "premium",
|
||||||
|
billing_cycle: "yearly"
|
||||||
|
}
|
||||||
|
|
||||||
|
Backend İşlemleri:
|
||||||
|
1. Customer kontrolü
|
||||||
|
2. Plan kontrolü
|
||||||
|
3. Customer güncelle
|
||||||
|
4. AuditLog kaydet
|
||||||
|
5. Response: {status: "success", customer: {...}}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Audit Log Sistemi
|
||||||
|
|
||||||
|
#### Log Görüntüleme
|
||||||
|
```
|
||||||
|
Endpoint: GET /api/audit/logs?page=1&limit=50&action=create_plan
|
||||||
|
Response: {
|
||||||
|
logs: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
admin: "admin1",
|
||||||
|
action: "create_plan",
|
||||||
|
resource_type: "plan",
|
||||||
|
resource_id: 5,
|
||||||
|
details: {...},
|
||||||
|
ip_address: "192.168.1.1",
|
||||||
|
created_at: "2024-01-01 10:00:00"
|
||||||
|
},
|
||||||
|
...
|
||||||
|
],
|
||||||
|
total: 150,
|
||||||
|
page: 1,
|
||||||
|
pages: 3
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📡 API Endpoint Referansı
|
||||||
|
|
||||||
|
### Müşteri Panel API (Port 5000)
|
||||||
|
|
||||||
|
#### Authentication
|
||||||
|
- `POST /api/auth/register` - Yeni kullanıcı kaydı
|
||||||
|
- `POST /api/auth/login` - Kullanıcı girişi
|
||||||
|
- `GET /api/auth/me` - Mevcut kullanıcı bilgisi
|
||||||
|
- `POST /api/auth/logout` - Çıkış
|
||||||
|
|
||||||
|
#### Customer
|
||||||
|
- `GET /api/customer/domains` - Domain listesi
|
||||||
|
- `POST /api/customer/domains` - Yeni domain ekle
|
||||||
|
- `GET /api/customer/domains/:id` - Domain detay
|
||||||
|
- `DELETE /api/customer/domains/:id` - Domain sil
|
||||||
|
- `GET /api/customer/stats` - Müşteri istatistikleri
|
||||||
|
|
||||||
|
#### DNS Management
|
||||||
|
- `POST /api/dns/validate-domain` - Domain doğrulama
|
||||||
|
- `POST /api/dns/validate-zone` - CF zone doğrulama
|
||||||
|
- `POST /api/dns/select-company-account` - Şirket CF hesabı seç
|
||||||
|
- `GET /api/dns/check-nameservers` - NS kontrolü
|
||||||
|
- `POST /api/dns/preview-changes` - DNS değişiklik önizleme
|
||||||
|
- `POST /api/dns/apply-changes` - DNS değişikliklerini uygula
|
||||||
|
|
||||||
|
#### Admin (Customer Panel)
|
||||||
|
- `GET /api/admin/cf-accounts` - CF hesap listesi
|
||||||
|
- `POST /api/admin/cf-accounts` - Yeni CF hesabı
|
||||||
|
- `PUT /api/admin/cf-accounts/:id` - CF hesap güncelle
|
||||||
|
- `GET /api/admin/customers` - Müşteri listesi
|
||||||
|
- `GET /api/admin/customers/:id` - Müşteri detay
|
||||||
|
- `PUT /api/admin/customers/:id/plan` - Müşteri planı güncelle
|
||||||
|
- `GET /api/admin/stats` - Admin istatistikleri
|
||||||
|
|
||||||
|
#### Containers
|
||||||
|
- `GET /api/containers` - Container listesi
|
||||||
|
- `POST /api/containers/deploy` - Container deploy
|
||||||
|
- `GET /api/containers/:id` - Container detay
|
||||||
|
- `DELETE /api/containers/:id` - Container sil
|
||||||
|
|
||||||
|
### Admin Panel API (Port 5001)
|
||||||
|
|
||||||
|
#### Authentication
|
||||||
|
- `POST /api/auth/login` - Admin girişi
|
||||||
|
- `GET /api/auth/me` - Mevcut admin bilgisi
|
||||||
|
- `POST /api/auth/logout` - Çıkış
|
||||||
|
|
||||||
|
#### Plans
|
||||||
|
- `GET /api/plans` - Plan listesi
|
||||||
|
- `POST /api/plans` - Yeni plan oluştur
|
||||||
|
- `GET /api/plans/:id` - Plan detay
|
||||||
|
- `PUT /api/plans/:id` - Plan güncelle
|
||||||
|
- `DELETE /api/plans/:id` - Plan sil
|
||||||
|
|
||||||
|
#### Cloudflare Accounts
|
||||||
|
- `GET /api/cf-accounts` - CF hesap listesi
|
||||||
|
- `POST /api/cf-accounts` - Yeni CF hesabı
|
||||||
|
- `GET /api/cf-accounts/:id` - CF hesap detay
|
||||||
|
- `PUT /api/cf-accounts/:id` - CF hesap güncelle
|
||||||
|
- `DELETE /api/cf-accounts/:id` - CF hesap sil
|
||||||
|
|
||||||
|
#### Customers
|
||||||
|
- `GET /api/customers` - Müşteri listesi (Customer API'den)
|
||||||
|
- `GET /api/customers/:id` - Müşteri detay
|
||||||
|
- `PUT /api/customers/:id/plan` - Plan güncelle
|
||||||
|
- `PUT /api/customers/:id/status` - Durum güncelle
|
||||||
|
|
||||||
|
#### Audit
|
||||||
|
- `GET /api/audit/logs` - Audit log listesi
|
||||||
|
- `GET /api/audit/logs/:id` - Log detay
|
||||||
|
- `GET /api/audit/stats` - Audit istatistikleri
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🗄️ Veritabanı Yapısı
|
||||||
|
|
||||||
|
### Müşteri Panel Database (hosting_db)
|
||||||
|
|
||||||
|
#### users
|
||||||
|
```sql
|
||||||
|
CREATE TABLE users (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
email VARCHAR(255) UNIQUE NOT NULL,
|
||||||
|
password_hash VARCHAR(255) NOT NULL,
|
||||||
|
full_name VARCHAR(100),
|
||||||
|
role VARCHAR(20) DEFAULT 'customer',
|
||||||
|
is_active BOOLEAN DEFAULT TRUE,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
last_login TIMESTAMP
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### customers
|
||||||
|
```sql
|
||||||
|
CREATE TABLE customers (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
user_id INTEGER REFERENCES users(id),
|
||||||
|
subscription_plan VARCHAR(50) DEFAULT 'free',
|
||||||
|
max_domains INTEGER DEFAULT 1,
|
||||||
|
max_containers INTEGER DEFAULT 1,
|
||||||
|
max_storage_gb INTEGER DEFAULT 10,
|
||||||
|
subscription_start TIMESTAMP,
|
||||||
|
subscription_end TIMESTAMP,
|
||||||
|
is_active BOOLEAN DEFAULT TRUE,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### domains
|
||||||
|
```sql
|
||||||
|
CREATE TABLE domains (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
domain_name VARCHAR(255) UNIQUE NOT NULL,
|
||||||
|
customer_id INTEGER REFERENCES customers(id),
|
||||||
|
created_by INTEGER REFERENCES users(id),
|
||||||
|
project_name VARCHAR(100),
|
||||||
|
use_cloudflare BOOLEAN DEFAULT TRUE,
|
||||||
|
cf_account_type VARCHAR(20), -- 'company' or 'own'
|
||||||
|
cf_account_id INTEGER REFERENCES cloudflare_accounts(id),
|
||||||
|
cf_zone_id VARCHAR(100),
|
||||||
|
cf_api_token_encrypted TEXT, -- Encrypted token for 'own' accounts
|
||||||
|
cf_proxy_enabled BOOLEAN DEFAULT TRUE,
|
||||||
|
lb_ip VARCHAR(45),
|
||||||
|
status VARCHAR(20) DEFAULT 'pending',
|
||||||
|
dns_configured BOOLEAN DEFAULT FALSE,
|
||||||
|
ssl_configured BOOLEAN DEFAULT FALSE,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### dns_records
|
||||||
|
```sql
|
||||||
|
CREATE TABLE dns_records (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
domain_id INTEGER REFERENCES domains(id),
|
||||||
|
record_type VARCHAR(10), -- A, CNAME, MX, TXT, etc.
|
||||||
|
name VARCHAR(255),
|
||||||
|
value TEXT,
|
||||||
|
ttl INTEGER DEFAULT 300,
|
||||||
|
proxied BOOLEAN DEFAULT FALSE,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### cloudflare_accounts
|
||||||
|
```sql
|
||||||
|
CREATE TABLE cloudflare_accounts (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
name VARCHAR(100) UNIQUE NOT NULL,
|
||||||
|
email VARCHAR(255) NOT NULL,
|
||||||
|
api_token_encrypted TEXT NOT NULL, -- Fernet encrypted
|
||||||
|
max_domains INTEGER DEFAULT 100,
|
||||||
|
current_domain_count INTEGER DEFAULT 0,
|
||||||
|
notes TEXT,
|
||||||
|
is_active BOOLEAN DEFAULT TRUE,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Admin Panel Database (admin_hosting_db)
|
||||||
|
|
||||||
|
#### admin_users
|
||||||
|
```sql
|
||||||
|
CREATE TABLE admin_users (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
username VARCHAR(50) UNIQUE NOT NULL,
|
||||||
|
email VARCHAR(120) UNIQUE NOT NULL,
|
||||||
|
password_hash VARCHAR(255) NOT NULL,
|
||||||
|
full_name VARCHAR(100),
|
||||||
|
role VARCHAR(20) DEFAULT 'admin', -- 'admin' or 'super_admin'
|
||||||
|
is_active BOOLEAN DEFAULT TRUE,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
last_login TIMESTAMP
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### subscription_plans
|
||||||
|
```sql
|
||||||
|
CREATE TABLE subscription_plans (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
name VARCHAR(50) UNIQUE NOT NULL,
|
||||||
|
slug VARCHAR(50) UNIQUE NOT NULL,
|
||||||
|
description TEXT,
|
||||||
|
price_monthly DECIMAL(10, 2) DEFAULT 0,
|
||||||
|
price_yearly DECIMAL(10, 2) DEFAULT 0,
|
||||||
|
max_domains INTEGER DEFAULT 1,
|
||||||
|
max_containers INTEGER DEFAULT 1,
|
||||||
|
max_storage_gb INTEGER DEFAULT 10,
|
||||||
|
max_bandwidth_gb INTEGER DEFAULT 100,
|
||||||
|
features JSON, -- Array of feature strings
|
||||||
|
is_active BOOLEAN DEFAULT TRUE,
|
||||||
|
is_visible BOOLEAN DEFAULT TRUE,
|
||||||
|
sort_order INTEGER DEFAULT 0,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### cloudflare_accounts
|
||||||
|
```sql
|
||||||
|
CREATE TABLE cloudflare_accounts (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
name VARCHAR(100) UNIQUE NOT NULL,
|
||||||
|
email VARCHAR(255) NOT NULL,
|
||||||
|
api_token TEXT NOT NULL, -- TODO: Should be encrypted
|
||||||
|
max_domains INTEGER DEFAULT 100,
|
||||||
|
current_domain_count INTEGER DEFAULT 0,
|
||||||
|
notes TEXT,
|
||||||
|
is_active BOOLEAN DEFAULT TRUE,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### audit_logs
|
||||||
|
```sql
|
||||||
|
CREATE TABLE audit_logs (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
admin_id INTEGER REFERENCES admin_users(id),
|
||||||
|
action VARCHAR(100) NOT NULL,
|
||||||
|
resource_type VARCHAR(50), -- 'customer', 'plan', 'cf_account'
|
||||||
|
resource_id INTEGER,
|
||||||
|
details JSON,
|
||||||
|
ip_address VARCHAR(45),
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_audit_logs_admin ON audit_logs(admin_id);
|
||||||
|
CREATE INDEX idx_audit_logs_action ON audit_logs(action);
|
||||||
|
CREATE INDEX idx_audit_logs_created ON audit_logs(created_at);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏗️ Sistem Mimarisi
|
||||||
|
|
||||||
|
### Infrastructure Components
|
||||||
|
|
||||||
|
#### Load Balancers
|
||||||
|
```
|
||||||
|
LB1: 185.199.108.153
|
||||||
|
LB2: 185.199.109.153
|
||||||
|
LB3: 185.199.110.153
|
||||||
|
|
||||||
|
Selection Algorithm: Hash-based
|
||||||
|
- MD5(domain_name) % 3
|
||||||
|
- Ensures same domain always routes to same LB
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Cloudflare Configuration
|
||||||
|
```
|
||||||
|
DNS Proxy: Enabled (Orange Cloud)
|
||||||
|
SSL Mode: Full (Strict)
|
||||||
|
Always Use HTTPS: ON
|
||||||
|
Auto HTTPS Rewrites: ON
|
||||||
|
Minimum TLS Version: 1.2
|
||||||
|
HTTP/2: Enabled
|
||||||
|
HTTP/3 (QUIC): Enabled
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Nginx Configuration
|
||||||
|
```nginx
|
||||||
|
# Customer Frontend (argeict.net)
|
||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
server_name argeict.net;
|
||||||
|
|
||||||
|
ssl_certificate /path/to/cert.pem;
|
||||||
|
ssl_certificate_key /path/to/key.pem;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost:3000;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Customer API (api.argeict.net)
|
||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
server_name api.argeict.net;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost:5000;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Supervisor Configuration
|
||||||
|
```ini
|
||||||
|
[program:customer-api]
|
||||||
|
command=/path/to/venv/bin/gunicorn -w 4 -b 0.0.0.0:5000 app.main:app
|
||||||
|
directory=/path/to/MusteriPanel/backend
|
||||||
|
autostart=true
|
||||||
|
autorestart=true
|
||||||
|
stderr_logfile=/var/log/customer-api.err.log
|
||||||
|
stdout_logfile=/var/log/customer-api.out.log
|
||||||
|
|
||||||
|
[program:admin-api]
|
||||||
|
command=/path/to/venv/bin/gunicorn -w 4 -b 0.0.0.0:5001 app.main:app
|
||||||
|
directory=/path/to/AdminPanel/backend
|
||||||
|
autostart=true
|
||||||
|
autorestart=true
|
||||||
|
stderr_logfile=/var/log/admin-api.err.log
|
||||||
|
stdout_logfile=/var/log/admin-api.out.log
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔒 Güvenlik
|
||||||
|
|
||||||
|
### Authentication & Authorization
|
||||||
|
|
||||||
|
#### JWT Token Structure
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"user_id": 1,
|
||||||
|
"email": "user@example.com",
|
||||||
|
"role": "customer",
|
||||||
|
"exp": 1704067200,
|
||||||
|
"iat": 1704063600
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Token Encryption (Cloudflare API Tokens)
|
||||||
|
```python
|
||||||
|
from cryptography.fernet import Fernet
|
||||||
|
|
||||||
|
# Encryption
|
||||||
|
key = os.environ['ENCRYPTION_KEY']
|
||||||
|
f = Fernet(key)
|
||||||
|
encrypted_token = f.encrypt(api_token.encode())
|
||||||
|
|
||||||
|
# Decryption
|
||||||
|
decrypted_token = f.decrypt(encrypted_token).decode()
|
||||||
|
```
|
||||||
|
|
||||||
|
### CORS Configuration
|
||||||
|
```python
|
||||||
|
# Customer Panel
|
||||||
|
CORS(app, resources={
|
||||||
|
r"/api/*": {
|
||||||
|
"origins": ["https://argeict.net"],
|
||||||
|
"methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
|
||||||
|
"allow_headers": ["Content-Type", "Authorization"]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
# Admin Panel
|
||||||
|
CORS(app, resources={
|
||||||
|
r"/api/*": {
|
||||||
|
"origins": ["https://admin.argeict.net"],
|
||||||
|
"methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
|
||||||
|
"allow_headers": ["Content-Type", "Authorization"]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Password Hashing
|
||||||
|
```python
|
||||||
|
import bcrypt
|
||||||
|
|
||||||
|
# Hash password
|
||||||
|
password_hash = bcrypt.hashpw(
|
||||||
|
password.encode('utf-8'),
|
||||||
|
bcrypt.gensalt()
|
||||||
|
).decode('utf-8')
|
||||||
|
|
||||||
|
# Verify password
|
||||||
|
is_valid = bcrypt.checkpw(
|
||||||
|
password.encode('utf-8'),
|
||||||
|
password_hash.encode('utf-8')
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Database Security
|
||||||
|
- Separate databases for Customer and Admin panels
|
||||||
|
- No direct database access between panels
|
||||||
|
- API-based communication only
|
||||||
|
- Encrypted sensitive data (API tokens)
|
||||||
|
- Regular backups
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Deployment
|
||||||
|
|
||||||
|
### Production Checklist
|
||||||
|
|
||||||
|
#### Environment Variables
|
||||||
|
```bash
|
||||||
|
# Customer Panel Backend
|
||||||
|
export FLASK_ENV=production
|
||||||
|
export DATABASE_URL=postgresql://user:pass@localhost/hosting_db
|
||||||
|
export JWT_SECRET_KEY=xxx
|
||||||
|
export ENCRYPTION_KEY=xxx
|
||||||
|
export REDIS_URL=redis://localhost:6379/0
|
||||||
|
export CLOUDFLARE_API_TOKEN=xxx
|
||||||
|
|
||||||
|
# Admin Panel Backend
|
||||||
|
export FLASK_ENV=production
|
||||||
|
export DATABASE_URL=postgresql://user:pass@localhost/admin_hosting_db
|
||||||
|
export JWT_SECRET_KEY=xxx
|
||||||
|
export CUSTOMER_API_URL=https://api.argeict.net
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Build Frontend
|
||||||
|
```bash
|
||||||
|
# Customer Panel
|
||||||
|
cd MusteriPanel/frontend
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
# Output: dist/
|
||||||
|
|
||||||
|
# Admin Panel
|
||||||
|
cd AdminPanel/frontend
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
# Output: dist/
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Database Migration
|
||||||
|
```bash
|
||||||
|
# Customer Panel
|
||||||
|
cd MusteriPanel/backend
|
||||||
|
flask db upgrade
|
||||||
|
|
||||||
|
# Admin Panel
|
||||||
|
cd AdminPanel/backend
|
||||||
|
flask db upgrade
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Start Services
|
||||||
|
```bash
|
||||||
|
# Start all services
|
||||||
|
sudo supervisorctl start all
|
||||||
|
|
||||||
|
# Check status
|
||||||
|
sudo supervisorctl status
|
||||||
|
|
||||||
|
# Restart specific service
|
||||||
|
sudo supervisorctl restart customer-api
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Monitoring & Logging
|
||||||
|
|
||||||
|
### Health Checks
|
||||||
|
```
|
||||||
|
GET /health
|
||||||
|
Response: {
|
||||||
|
"status": "healthy",
|
||||||
|
"service": "customer-panel",
|
||||||
|
"timestamp": "2024-01-01T10:00:00Z"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Log Files
|
||||||
|
```
|
||||||
|
Customer API: /var/log/customer-api.out.log
|
||||||
|
Admin API: /var/log/admin-api.out.log
|
||||||
|
Nginx Access: /var/log/nginx/access.log
|
||||||
|
Nginx Error: /var/log/nginx/error.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### Metrics to Monitor
|
||||||
|
- API response times
|
||||||
|
- Database query performance
|
||||||
|
- Cloudflare API rate limits
|
||||||
|
- Container resource usage
|
||||||
|
- Domain count per CF account
|
||||||
|
- Active user sessions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Common Workflows
|
||||||
|
|
||||||
|
### Yeni Müşteri Onboarding
|
||||||
|
1. Müşteri kayıt olur
|
||||||
|
2. Email doğrulama (opsiyonel)
|
||||||
|
3. Default "free" plan atanır
|
||||||
|
4. Dashboard'a yönlendirilir
|
||||||
|
5. İlk domain ekleme wizard'ı gösterilir
|
||||||
|
|
||||||
|
### Domain Silme
|
||||||
|
1. Müşteri domain sil butonuna tıklar
|
||||||
|
2. Onay dialogu gösterilir
|
||||||
|
3. DELETE /api/customer/domains/:id
|
||||||
|
4. Backend:
|
||||||
|
- Domain kontrolü
|
||||||
|
- Container varsa sil
|
||||||
|
- DNS kayıtlarını sil (opsiyonel)
|
||||||
|
- CF account domain count güncelle
|
||||||
|
- Domain soft delete veya hard delete
|
||||||
|
5. Frontend: Liste güncellenir
|
||||||
|
|
||||||
|
### Plan Değiştirme (Admin)
|
||||||
|
1. Admin müşteri detayına gider
|
||||||
|
2. "Change Plan" butonuna tıklar
|
||||||
|
3. Yeni plan seçer
|
||||||
|
4. PUT /api/customers/:id/plan
|
||||||
|
5. Backend:
|
||||||
|
- Plan limitleri günceller
|
||||||
|
- Subscription dates günceller
|
||||||
|
- AuditLog kaydeder
|
||||||
|
6. Müşteri email bildirimi alır (opsiyonel)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Notlar
|
||||||
|
|
||||||
|
### Önemli Limitler
|
||||||
|
- JWT Token Expiration: 24 saat
|
||||||
|
- Max Domains per CF Account: 100 (yapılandırılabilir)
|
||||||
|
- API Rate Limit: 100 req/min per user
|
||||||
|
- File Upload Max Size: 10MB
|
||||||
|
- Database Connection Pool: 20
|
||||||
|
|
||||||
|
### Gelecek Geliştirmeler
|
||||||
|
- [ ] Email verification sistemi
|
||||||
|
- [ ] Two-factor authentication
|
||||||
|
- [ ] Payment gateway integration (Stripe/PayPal)
|
||||||
|
- [ ] Automated backups
|
||||||
|
- [ ] Container auto-scaling
|
||||||
|
- [ ] Advanced analytics dashboard
|
||||||
|
- [ ] Multi-language support
|
||||||
|
- [ ] Mobile app
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Son Güncelleme**: 2024-01-12
|
||||||
|
**Versiyon**: 1.0.0
|
||||||
|
**Hazırlayan**: AI Assistant
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue