# 🚀 Askeri Platform - Production Deployment Kılavuzu

## 📋 Hazırlık

### 1. Gereksinimler
- **PHP**: 8.2 veya üzeri
- **MySQL**: 5.7+ veya MariaDB 10.3+
- **Web Server**: Apache (mod_rewrite) veya Nginx
- **PHP Extensions**: 
  - BCMath, Ctype, cURL, DOM, Fileinfo, JSON, Mbstring, OpenSSL, PDO, Tokenizer, XML, Zip, GD, Redis (opsiyonel)
- **Composer**: Yüklü olmalı
- **Node.js & NPM**: Vite için (assets derlemesi için)

### 2. Hosting Şirketi Seçimi (Türkiye)
- **Natro** - https://www.natro.com
- **Turhost** - https://www.turhost.com
- **Radore** - https://www.radore.com.tr
- **Odwara** - https://www.odwara.com
- **Veriye.net** - https://www.veriye.net

**Önerilen Paket:** Linux + cPanel + LiteSpeed (daha hızlı)

---

## 🔄 Deployment Adımları

### Adım 1: Yedekleme
```bash
# Yerel projenizi yedekleyin
zip -r askeribilgiler-backup.zip askeribilgiler/
```

### Adım 2: Production .env Dosyası
```bash
# .env.production oluştur
cp .env .env.production
```

**`.env.production` içeriği:**
```env
APP_NAME="Askeri Platform"
APP_ENV=production
APP_KEY=base64:NooSVFZ2PuuFdt2RW4TmXt3xpNwpjISSKCoPXfG4J4Y=
APP_DEBUG=false
APP_TIMEZONE=Europe/Istanbul
APP_URL=https://siteniz.com

APP_LOCALE=tr
APP_FALLBACK_LOCALE=tr
APP_FAKER_LOCALE=tr_TR

APP_MAINTENANCE_DRIVER=file
APP_MAINTENANCE_STORE=database

LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=warning

# Database (Hosting bilgilerinizle değiştirin)
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=askeriplatform_db
DB_USERNAME=kullanici_adi
DB_password=güvenli_sifre
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci

# Cache (Redis varsa)
CACHE_DRIVER=database
SESSION_DRIVER=database
SESSION_LIFETIME=120
QUEUE_CONNECTION=database

# Filesystem
FILESYSTEM_DISK=local
```

### Adım 3: Composer Dependencies
```bash
# Production için optimize et
composer install --optimize-autoloader --no-dev
```

### Adım 4: Assets Build
```bash
# Production assets oluştur
npm run build
```

### Adım 5: Database Migration
```bash
# Tüm migration'ları çalıştır
php artisan migrate --force
```

### Adam 6: Storage Link
```bash
# Storage dizinini public'e linkle
php artisan storage:link
```

### Adım 7: Cache & Config
```bash
# Production cache oluştur
php artisan config:cache
php artisan route:cache
php artisan view:cache
```

### Adım 8: Dosya Yükleme (FTP/SFTP)
```
Aşağıdaki dosyaları hosting'e yükleyin:

/public/          → public_html/
/app/             → (yükleme, public_html/ dışında)
/bootstrap/       → (yükleme, public_html/ dışında)
/config/          → (yükleme, public_html/ dışında)
/database/        → (yükleme, public_html/ dışında)
/resources/       → (yükleme, public_html/ dışında)
/routes/          → (yükleme, public_html/html/ dışında)
/storage/         → (yükleme, public_html/ dışında)
/vendor/          → (yükleme, public_html/ dışında)
/.env.production → .env (public_html/ dışında)
artisan           → (yükleme, public_html/ dışında)
composer.json    → (yükleme, public_html/ dışında)
composer.lock     → (yükleme, public_html/ dışında)
```

**ÖNEMLİ:** `public/` klasörünün içeriğini `public_html/` klasörüne yükleyin, diğer klasörler ana dizine.

### Adım 9: File Permissions (SSH erişimi varsa)
```bash
# Storage ve cache dizinleri için yazma izni
chmod -R 775 storage bootstrap/cache
chmod -R 755 public

# .env dosyası güvenliği
chmod 640 .env
```

### Adım 10: .htaccess (Apache)
`public/.htaccess` dosyasının olduğundan emin olun. Laravel otomatik oluşturur.

---

## 🔧 cPanel Hosting Kurulumu

### 1. MySQL Database Oluşturma
1. cPanel → MySQL Databases
2. Yeni database oluştur: `askeriplatform_db`
3. Yeni kullanıcı oluştur ve bu database'e yetki ver
4. Not: Database prefix'i not edin (örn: `site_`)

### 2. FTP/SFTP ile Dosya Transferi
1. FileZilla veya WinSCP kullanın
2. Host: `siteniz.com` (veya IP)
3. Username: cPanel kullanıcı adı
4. Port: 21 (FTP) veya 22 (SFTP)
5. `public/` → `public_html/` içine yükleyin

### 3. .env Dosyasını Düzenle
1. cPanel → File Manager → public_html
2. `.env` dosyasını düzenle
3. Production değerlerini girin
4. Database bilgilerini güncelleyin

### 4. SSH Erişimi (Opsiyonel)
```bash
# SSH ile bağlan
ssh kullanici@siteniz.com

# Proje dizinine git
cd public_html

# Storage link oluştur (yoksa)
php artisan storage:link

# Cache temizle
php artisan cache:clear
php artisan config:clear
php artisan view:clear
```

---

## 🧪 Production Test

### 1. Site Kontrolü
- ✅ Ana sayfa açılıyor mu?
- ✅ Admin panel erişilebilir mi? (`/admin`)
- ✅ Forum, Blog, Chat modülleri çalışıyor mu?
- ✅ Login/Register çalışıyor mu?

### 2. SEO Kontrolü
- ✅ Meta tags görünüyor mu?
- ✅ robots.txt erişilebilir? (`/robots.txt`)
- ✅ sitemap.xml erişilebilir? (`/sitemap.xml`)

### 3. Güvenlik Kontrolü
- ✅ HTTPS aktif mi?
- ✅ Debug mode kapalı mı? (`APP_DEBUG=false`)
- ✾ Error sayfası production'a uygun mu?

---

## 🛡️ Güvenlik Ayarları

### 1. .env.production
```env
APP_DEBUG=false
APP_ENV=production
```

### 2. config/app.php
```php
'debug' => env('APP_DEBUG', false),
'url' => env('APP_URL', 'https://siteniz.com'),
```

### 3. SSL Sertifika (Let's Encrypt)
cPanel → SSL/TLS → Let's Encrypt → otomatik yenileme aktif et

---

## 📊 Performans Optimizasyonu

### 1. OPcache (PHP)
cPanel → Select PHP Version → Extensions → OPcache aktif et

### 2. Redis Cache (Opsiyonel)
```bash
# config/cache.php
'default' => env('CACHE_DRIVER', 'redis'),
'redis' => [
    'client' => env('REDIS_CLIENT', 'phpredis'),
    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DB', 0),
    ],
],
```

### 3. Queue Worker (Opsiyonel)
```bash
# Supervisor ile queue worker
php artisan queue:work --daemon --tries=3 --timeout=90
```

---

## 🔄 Güncelleme (Deployment Sonrası)

### Yeni Kod Push Etmek
```bash
# 1. Yerel değişiklikleri test et
composer install
npm run build
php artisan migrate

# 2. Production'a upload et
# FTP/SFTP ile değişen dosyaları gönder

# 3. SSH ile cache temizle
ssh kullanici@siteniz.com
cd public_html
php artisan cache:clear
php artisan view:clear
php artisan config:clear
php artisan route:clear
```

---

## 🆘 Sorun Giderme

### Site Açılmıyor
1. `.env` dosyasını kontrol et
2. `storage/` dizinine yazma izni ver
3. `php artisan key:generate` ile yeni key oluştur
4. Error log: `storage/logs/laravel.log`

### Database Bağlantı Hatası
1. `.env` database bilgilerini kontrol et
2. MySQL kullanıcısının yetkilerini kontrol et
3. Database oluşturulmuş mu kontrol et

### Assets Yüklenmiyor
1. `npm run build` çalıştır
2. `public/build/` dizinini kontrol et
3. `vite.config.js` ayarlarını kontrol et

---

## 📞 Destek

**Türk Hosting Şirketleri Destek:**
- Natro: 0850 200 00 50
- Turhost: 0850 200 00 50
- Radore: 0850 200 00 50

**Laravel Dokümantasyon:**
- https://laravel.com/docs/deployment
- https://laravel.com/docs/configuration

---

## ✅ Deployment Checklist

- [ ] .env.production dosyası oluşturuldu
- [ ] Database oluşturuldu
- [ ] Composer dependencies yüklendi
- [ ] npm run build çalıştırıldı
- [ ] Migration'lar çalıştırıldı
- [ ] Storage link oluşturuldu
- [ ] Dosyalar FTP ile yüklendi
- [ ] File permissions ayarlandı
- [ ] SSL sertifikası yüklendi
- [ .env dosyası production için güncellendi
- [ ] Cache temizlendi
- [ ] Site test edildi
- [ ] Admin panel test edildi
- [ ] Modüller test edildi
