# Coolify Üzerinde Veritabanı Yapılandırması ve Sorun Giderme

Bu rehber, TYPO3 projesinin Coolify üzerinde deploy edilirken veritabanı bağlantısının nasıl yapılandırılacağını ve olası sorunların nasıl çözüleceğini açıklar.

## 1. Sorunun Kaynağı ve Çözümü

Coolify veya herhangi bir container ortamında, veritabanı bağlantı bilgileri genellikle **Environment Variables (Ortam Değişkenleri)** aracılığıyla uygulamaya iletilir. TYPO3 varsayılan olarak bu değişkenleri okumaz.

Bu projede, bu bağlantıyı sağlamak için `config/system/additional.php` dosyası oluşturulmuştur. Bu dosya, ortam değişkenlerini okuyarak TYPO3'ün veritabanı yapılandırmasını (`$GLOBALS['TYPO3_CONF_VARS']['DB']`) dinamik olarak günceller.

## 2. Gerekli Ortam Değişkenleri

Coolify projenizin **Environment Variables** bölümünde aşağıdaki değişkenlerin tanımlı olduğundan emin olun:

| Değişken Adı | Açıklama | Örnek Değer |
|--------------|----------|-------------|
| `TYPO3_DB_HOST` | Veritabanı sunucusu adresi | `db` veya `mariadb` (servis adı) veya IP adresi |
| `TYPO3_DB_NAME` | Veritabanı adı | `typo3` |
| `TYPO3_DB_USER` | Veritabanı kullanıcısı | `typo3` |
| `TYPO3_DB_PASSWORD` | Veritabanı şifresi | `cokgizlisifre` |
| `TYPO3_DB_PORT` | Veritabanı portu | `3306` (Varsayılan) |
| `TYPO3_DISPLAY_ERRORS` | Hata ayıklama modunu açar | `0` (Kapalı) veya `1` (Açık) |

> **Not:** Eğer Coolify'ın kendi yönetilen veritabanını (Managed Database) kullanıyorsanız, `TYPO3_DB_HOST` genellikle size verilen internal host adresi veya IP'sidir.

## 3. Deployment Yöntemleri

### Seçenek A: Docker Compose ile (App + DB)

Eğer projenizi `docker-compose.yml` dosyasını kullanarak "Docker Compose" tipinde deploy ediyorsanız:

1. `docker-compose.yml` dosyanızda `app` servisi altında environment değişkenlerinin tanımlı olduğundan emin olun (mevcut dosyada zaten var).
2. `db` servisi için bir volume tanımlı olduğundan emin olun (`typo3_db_data:/var/lib/mysql`). Bu, verilerin kalıcı olmasını sağlar.
3. Coolify, `docker-compose.yml` içindeki servis isimlerini (örn: `db`) host olarak kullanabilir. `TYPO3_DB_HOST=db` olarak ayarlandığından emin olun.

### Seçenek B: Sadece App (Dockerfile) + Harici Veritabanı

Eğer sadece uygulamayı `Dockerfile` üzerinden deploy edip, veritabanını Coolify'da ayrı bir servis olarak (örn: PostgreSQL, MySQL/MariaDB) açtıysanız:

1. Veritabanı servisini oluşturun ve bağlantı bilgilerini not edin.
2. Uygulama servisine gidin ve **Environment Variables** sekmesinde yukarıdaki değişkenleri (`TYPO3_DB_HOST`, vb.) veritabanı servisinin bilgilerine göre doldurun.
3. `TYPO3_DB_HOST` olarak veritabanı servisinin **Internal Host** adresini kullanın.

## 4. Veritabanı Başlangıç Kurulumu (İlk Deploy)

Uygulama ilk kez deploy edildiğinde veritabanı boştur. TYPO3'ün çalışması için tabloların oluşturulması gerekir.

### Yöntem 1: Install Tool (Önerilen)

1. Deploy sonrası uygulamanın URL'sine `/typo3/install.php` ekleyerek gidin.
2. Eğer "FIRST_INSTALL" dosyası eksik hatası alırsanız:
   - `docker/entrypoint.sh` dosyası konteyner başlatıldığında otomatik olarak `public/FIRST_INSTALL` dosyasını oluşturur.
   - Eğer hala erişemiyorsanız, Coolify terminalinden veya SSH ile konteyner içine girip `touch /var/www/html/public/FIRST_INSTALL` komutunu çalıştırın.
3. Install Tool adımlarını takip ederek veritabanı tablolarını oluşturun ve yönetici hesabını açın.

### Yöntem 2: SQL Import

Eğer yerel geliştirme ortamınızdaki (DDEV) veritabanını canlıya taşımak istiyorsanız:

1. Yerel veritabanınızı dışa aktarın: `ddev export-db --file=db-dump.sql.gz`
2. SQL dosyasını sunucuya yükleyin veya Coolify üzerinden veritabanı yönetim aracını (örn: phpMyAdmin, Adminer) kullanarak içe aktarın.
3. `config/system/settings.php` veya `LocalConfiguration.php` dosyasındaki `encryptionKey` ve `installToolPassword` değerlerinin uyuştuğundan emin olun veya Install Tool üzerinden yenileyin.

## 5. Sorun Giderme (Troubleshooting)

### "Connection Refused" veya "Network is unreachable"
- **Neden:** Uygulama veritabanı sunucusuna erişemiyor.
- **Çözüm:** `TYPO3_DB_HOST` değerini kontrol edin. Docker Compose kullanıyorsanız servis adının (`db`) doğru olduğundan emin olun. Harici DB kullanıyorsanız, aynı network içinde olduklarından emin olun (Coolify genellikle otomatik ayarlar).

### "Access Denied for user..."
- **Neden:** Kullanıcı adı veya şifre yanlış.
- **Çözüm:** `TYPO3_DB_USER` ve `TYPO3_DB_PASSWORD` değişkenlerini kontrol edin. Veritabanı kullanıcısının ilgili veritabanına erişim yetkisi olduğundan emin olun.

### "No database selected"
- **Neden:** Veritabanı adı yanlış veya veritabanı henüz oluşturulmamış.
- **Çözüm:** `TYPO3_DB_NAME` değerini kontrol edin. Veritabanı sunucusunda bu isimde bir veritabanının var olduğunu doğrulayın.

### "Trusted Hosts Pattern" Hatası
- **Neden:** Reverse proxy arkasında çalışan uygulama, host header'ını doğrulayamıyor.
- **Çözüm:** `config/system/additional.php` dosyasında `$GLOBALS['TYPO3_CONF_VARS']['SYS']['trustedHostsPattern'] = '.*';` ayarının aktif olduğundan emin olun.
