# DDEV ve Local Ortam Ayarları

DDEV, Docker tabanlı bir yerel geliştirme ortamıdır. TYPO3 projeleri için en çok tercih edilen araçtır.

---

## DDEV Kurulumu

### macOS

```bash
brew install ddev/ddev/ddev

# Docker Desktop veya Colima gereklidir
brew install --cask docker
# veya
brew install colima && colima start
```

### Linux (Ubuntu/Debian)

```bash
curl -fsSL https://ddev.com/install.sh | bash
```

### Windows

```bash
choco install ddev
# Docker Desktop gereklidir
```

---

## TYPO3 Projesi için DDEV Yapılandırması

### İlk Yapılandırma

```bash
mkdir typo3v13 && cd typo3v13

ddev config \
  --project-type=typo3 \
  --php-version=8.2 \
  --docroot=public \
  --database=mariadb:10.11 \
  --webserver-type=apache-fpm
```

### `.ddev/config.yaml` Dosyası

```yaml
name: typo3v13
type: typo3
docroot: public
php_version: "8.2"
webserver_type: apache-fpm
database:
  type: mariadb
  version: "10.11"
router_http_port: "80"
router_https_port: "443"
xdebug_enabled: false
additional_hostnames: []
additional_fqdns: []
timezone: Europe/Istanbul

# PHP ayarları
php_version: "8.2"
webimage_extra_packages:
  - php8.2-intl
  - php8.2-gd
  - php8.2-zip

# Performans optimizasyonu
mutagen_enabled: false     # macOS için true yapılabilir (performans için)
nfs_mount_enabled: false   # Alternatif performans seçeneği
```

---

## PHP Yapılandırması

### `.ddev/php/php.ini`

```ini
[PHP]
; Genel Ayarlar
max_execution_time = 240
max_input_vars = 1500
memory_limit = 512M
upload_max_filesize = 100M
post_max_size = 100M

; Hata ayıklama
display_errors = On
error_reporting = E_ALL

; OPcache
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.revalidate_freq = 0

; Zaman dilimi
date.timezone = Europe/Istanbul

; GD / ImageMagick
max_file_uploads = 50
```

---

## Temel DDEV Komutları

### Yaşam Döngüsü

```bash
# Projeyi başlat
ddev start

# Projeyi durdur
ddev stop

# Projeyi yeniden başlat
ddev restart

# Projeyi tamamen sil (veritabanı dahil!)
ddev delete --omit-snapshot
```

### Composer

```bash
# Paket yükle
ddev composer require vendor/package

# Bağımlılıkları güncelle
ddev composer update

# Autoload yeniden oluştur
ddev composer dump-autoload
```

### TYPO3 CLI

```bash
# Cache temizle (kısa form)
ddev typo3 cache:flush

# Veritabanı şemasını güncelle
ddev exec vendor/bin/typo3 extension:setup

# Dil paketlerini güncelle
ddev exec vendor/bin/typo3 language:update
```

### Veritabanı

```bash
# Veritabanı export
ddev export-db > backup.sql.gz

# Veritabanı import
ddev import-db < backup.sql.gz

# MySQL istemcisi
ddev mysql

# SQL sorgusu çalıştır
ddev mysql -e "SELECT * FROM be_users;"
```

### Dosya & SSH

```bash
# Konteyner içine SSH
ddev ssh

# Web konteynerine SSH
ddev ssh -s web

# Veritabanı konteynerine SSH
ddev ssh -s db
```

---

## Ek Servisler

### PhpMyAdmin

```bash
# PhpMyAdmin ekle
ddev get ddev/ddev-phpmyadmin

# Erişim
ddev launch -p
# veya
ddev describe  # URL bilgisi burada görünür
```

### Mailpit (E-posta Yakalama)

DDEV, varsayılan olarak Mailpit ile gelir:

```bash
# Mailpit arayüzünü aç
ddev launch -m
```

Gönderilen tüm e-postalar Mailpit'te yakalanır, gerçek gönderi yapılmaz.

### Redis

```bash
# Redis ekle
ddev get ddev/ddev-redis

# Redis CLI
ddev redis-cli
```

### Elasticsearch

```bash
# Elasticsearch ekle
ddev get ddev/ddev-elasticsearch
```

---

## SSL / HTTPS Ayarları

DDEV otomatik olarak self-signed SSL sertifikası oluşturur:

```bash
# mkcert ile güvenilir sertifika
mkcert -install

# DDEV SSL'i aktif (varsayılan olarak aktif)
ddev start
# https://typo3v13.ddev.site otomatik çalışır
```

---

## Ortam Değişkenleri

### `.ddev/config.yaml` içinde

```yaml
web_environment:
  - TYPO3_CONTEXT=Development
  - TYPO3_DB_DRIVER=mysqli
```

### `config/system/additional.php` içinde Kullanım

```php
<?php

// Ortam değişkenine göre ayar
$context = getenv('TYPO3_CONTEXT') ?: 'Production';

if ($context === 'Development') {
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['displayErrors'] = 1;
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask'] = '*';
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['exceptionalErrors'] = E_ALL;
}
```

---

## Performans Optimizasyonu (macOS)

macOS'ta Docker performansı için:

### Mutagen (Önerilen)

```yaml
# .ddev/config.yaml
mutagen_enabled: true
```

### Colima Alternatifi

```bash
# Colima'yı Docker Desktop yerine kullanın
brew install colima
colima start --cpu 4 --memory 6 --disk 100
```

---

## Çoklu Proje Yönetimi

```bash
# Tüm DDEV projelerini listele
ddev list

# Tüm projeleri durdur
ddev poweroff

# Belirli bir projeyi başlat
cd /path/to/project && ddev start
```

---

## Sorun Giderme

### Port Çakışması

```bash
# Kullanılan portları kontrol et
ddev debug router-ports

# Router portunu değiştir
ddev config --router-http-port=8080 --router-https-port=8443
```

### DNS Sorunları

```bash
# /etc/hosts dosyasını kontrol et
ddev debug check-hosts

# DNS çözümleme testi
ping typo3v13.ddev.site
```

### Konteyner Sorunları

```bash
# Logları kontrol et
ddev logs

# Web konteyneri logları
ddev logs -s web

# Veritabanı konteyneri logları
ddev logs -s db

# Yapılandırmayı sıfırla
ddev restart
```

### ddev-router "health check timed out"

`ddev start` veya `ddev restart` sırasında **"ddev-router failed to become ready; health check timed out"** hatası alıyorsanız:

1. `ddev poweroff` ile tüm projeleri kapatın.
2. `docker rm -f ddev-router` ile eski router container'ı kaldırın.
3. `ddev start` ile projeyi tekrar başlatın.

Detaylı adımlar ve port/SSL çözümleri: [DDEV: Sorun Giderme (router timeout, port, additional.php)](ddev-router-timeout-fix.md).

### Sık görülen uyarılar (hata değil)

| Mesaj | Açıklama |
| ----- | -------- |
| **additional.php already exists and is managed by the user** | DDEV, TYPO3 için `config/system/additional.php` oluşturmak ister; dosya zaten varsa üzerine yazmaz. Bilgilendirme mesajıdır, yok sayabilirsiniz. |
| **Port 8025 is busy, using 33000 instead** | Mailpit (e-posta arayüzü) için varsayılan 8025 başka süreç tarafından kullanılıyor; DDEV otomatik 33000’e geçer. Uyarıyı kaldırmak için `.ddev/config.yaml` içine `mailpit_http_port: "33000"` ve `mailpit_https_port: "33001"` ekleyebilirsiniz. |

Tüm bu durumların özeti ve ek çözümler: [DDEV: Sorun Giderme](ddev-router-timeout-fix.md).

---

## Kaynaklar

- [DDEV Resmi Dokümantasyonu](https://ddev.readthedocs.io/)
- [DDEV TYPO3 Quickstart](https://ddev.readthedocs.io/en/stable/users/quickstart/#typo3)
- [DDEV Add-on'ları](https://ddev.readthedocs.io/en/stable/users/extend/additional-services/)
