From b6f7d8cc9bcbd45d29ebe85813e2621fa54712e3 Mon Sep 17 00:00:00 2001 From: oguz ozturk Date: Mon, 12 Jan 2026 11:38:37 +0300 Subject: [PATCH] Add comprehensive workflow documentation and diagrams --- README_WORKFLOW.md | 230 +++++++++ WORKFLOW_DIAGRAMS.md | 243 ++++++++++ WORKFLOW_DOCUMENTATION.md | 957 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 1430 insertions(+) create mode 100644 README_WORKFLOW.md create mode 100644 WORKFLOW_DIAGRAMS.md create mode 100644 WORKFLOW_DOCUMENTATION.md diff --git a/README_WORKFLOW.md b/README_WORKFLOW.md new file mode 100644 index 0000000..bea6322 --- /dev/null +++ b/README_WORKFLOW.md @@ -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 + + diff --git a/WORKFLOW_DIAGRAMS.md b/WORKFLOW_DIAGRAMS.md new file mode 100644 index 0000000..b0e571e --- /dev/null +++ b/WORKFLOW_DIAGRAMS.md @@ -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) + + diff --git a/WORKFLOW_DOCUMENTATION.md b/WORKFLOW_DOCUMENTATION.md new file mode 100644 index 0000000..c1f1e12 --- /dev/null +++ b/WORKFLOW_DOCUMENTATION.md @@ -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 + +