# Docker ile MariaDB Kurulumu

> Bitnami MariaDB Docker imajını kullanarak tekil (standalone) veya replikasyonlu veritabanı sunucusu kurulumu ve yapılandırma rehberi.

> 💡 **Özet (TL;DR):**
> - **Amaç:** Bitnami kalıbını kullanarak Docker üzerinde tekil (standalone) veya replikasyonlu (master-slave) MariaDB veritabanı sunucusu kurulumu.
> - **Kritik Düzeltmeler:** İlk YAML örneğindeki tanımsız ağ (network) hatası (tanımlı olmayan `mariadb-network` kullanımı) ve kayan girintiler (indentation) giderilmiştir.
> - **Modernizasyon:** Docker Compose sürümü `'3.8'` formatına güncellenmiş ve `docker-compose` komutları `docker compose` standardına çekilmiştir.

Yukarıdaki paragraftan gördüğünüz üzere bu yazı bir yazı dizisinin parçasıdır. İtiraf edeyim; başlangıçta "bunu da yazmayayım ya gerek yok" demiştim, ama böyle bir rehber serisine giriştiysem eksik bırakmamam gerekiyordu. O yüzden veritabanı katmanımızın kurulumu için de kısa bir rehber hazırladım.

Bu yazıda; ortam değişkenlerini kullanarak ayarları kolayca değiştirmemize olanak tanıyan Bitnami kalıbını (image) kullanarak Docker üzerinde MariaDB kurulumunu gerçekleştireceğiz.

---

### Bitnami MariaDB Önemli Ortam Değişkenleri

| Değişken Adı | Açıklama | Varsayılan Değer |
| :--- | :--- | :--- |
| `ALLOW_EMPTY_PASSWORD` | Parolasız bağlantıya izin verilsin mi? (`yes` / `no`). | `no` |
| `MARIADB_ROOT_PASSWORD` | Root kullanıcısının parolası. | Boş |
| `MARIADB_USER` | Oluşturulacak yeni standart veritabanı kullanıcısı. | Boş |
| `MARIADB_PASSWORD` | Yeni standart kullanıcının parolası. | Boş |
| `MARIADB_DATABASE` | Başlangıçta otomatik oluşturulacak veritabanı adı. | Boş |

---

## MariaDB Hikayesi

MariaDB, MySQL'den türemiş bir fork (çatal) projesidir. Açık kaynak kodlu bir veritabanı olan MySQL, 2008 yılında Sun Microsystems tarafından satın alınmıştı. MySQL'in yaratıcısı Michael Widenius bu satıştan 1 sene sonra Sun'dan ayrıldı. 

Oracle'ın Sun'ı satın alma girişimiyle beraber Widenius, MySQL müşterilerine çağrıda bulunarak Avrupa Komisyonu'na baskı yapmaları amacıyla "MySQL'i Kurtarın" kampanyasını başlattı. Fakat Sun Microsystems, 2010 yılında Oracle tarafından satın alınarak MySQL'i de bünyesine katmış oldu.

Sun'dan ayrıldıktan sonra bu duruma tepki gösteren Michael Widenius, açık kaynak kodlu MySQL'i forklayarak MariaDB'yi oluşturdu ve açık kaynak kodlu MySQL felsefesini geliştirerek yoluna devam etti.

Açık kaynak kod felsefesi sayesinde Google, Facebook, Twitter gibi devlerin de gelişimine katkıda bulunduğu MariaDB; bugün MySQL'den çok daha performanslı, güvenli ve en güzeli %100 MySQL uyumluluğu ile yayın hayatını sürdürüyor.

İlgili Vikipedi makalesini okurken öğrendiğim çok ilginç bir bilgiyi de paylaşmak istiyorum: Michael Widenius'un My, Maria ve Max adında üç çocuğu var. Bu isimler MaxDB, MySQL ve MariaDB projelerinin isimlendirilmesinde esin kaynağı olmuştur.

---

## Docker ile MariaDB Kurulumu

MariaDB'yi [Bitnami tarafından sağlanan kalıp](https://github.com/bitnami/bitnami-docker-mariadb) ile kolayca ayağa kaldırabilirsiniz.

```bash
docker run --name mariadb -e ALLOW_EMPTY_PASSWORD=yes bitnami/mariadb:latest
```

Yerel geliştirme ortamında yukarıdaki komutla hızlıca bir MariaDB konteynerini ayağa kaldırabilirsiniz.

```bash
docker run --name mariadb \
  -e ALLOW_EMPTY_PASSWORD=yes \
  -e MARIADB_USER=kullaniciadi \
  -e MARIADB_PASSWORD=kullanmakistdiginizsifre \
  bitnami/mariadb:latest
```

Özellikle üretim (production) ortamı için ortam değişkenleri ile detaylı ayar yapmanız, en azından şifreyle girişi zorunlu kılmanız tavsiye edilir. Kullanıcı adı belirtilmezse varsayılan ana kullanıcı "root" olacaktır.

### 1. docker-compose.yml ile Kurulum (Tekil)

İsterseniz aşağıdaki gibi bir YAML dosyası oluşturarak `docker compose up -d` komutu ile ayağa kaldırmayı da tercih edebilirsiniz:

```yaml
version: '3.8'

services:
  mariadb:
    image: 'bitnami/mariadb:latest'
    restart: always
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - MARIADB_USER=kullaniciadi
      - MARIADB_PASSWORD=sifre
    networks:
      - app-tier

networks:
  app-tier:
    driver: bridge
```

### 2. docker-compose.yml ile Master-Slave Replikasyon Kurulumu

Geliştirme ortamında replikasyon yapmanız şart değildir; ancak Bitnami kalıbında birden fazla konteyner ayağa kaldırıp ortam değişkenlerini kullanarak master-slave replikasyonunu kolayca yapılandırabilirsiniz:

```yaml
version: '3.8'

services:
  mariadb-master:
    image: 'bitnami/mariadb:latest'
    restart: always
    ports:
      - '3306:3306'
    volumes:
      - ./mariadb-persistence:/bitnami/mariadb
    environment:
      - MARIADB_REPLICATION_MODE=master
      - MARIADB_REPLICATION_USER=repl_user
      - MARIADB_REPLICATION_PASSWORD=repl_password
      - MARIADB_ROOT_PASSWORD=master_root_password
      - MARIADB_USER=my_user
      - MARIADB_PASSWORD=my_password
      - MARIADB_DATABASE=my_database

  mariadb-slave:
    image: 'bitnami/mariadb:latest'
    restart: always
    depends_on:
      - mariadb-master
    environment:
      - MARIADB_REPLICATION_MODE=slave
      - MARIADB_REPLICATION_USER=repl_user
      - MARIADB_REPLICATION_PASSWORD=repl_password
      - MARIADB_MASTER_HOST=mariadb-master
      - MARIADB_MASTER_PORT_NUMBER=3306
      - MARIADB_MASTER_ROOT_PASSWORD=master_root_password
```

Bitnami kalıbı, "Non-Root" olarak tabir edilen ve root yetkileriyle çalışmayan bir kalıptır. Güvenlik gereği 1001 ID'li kullanıcı ile işlem yapar ve bu kullanıcının verilerin saklanacağı yerel dizinde yazma izinlerinin bulunması gerekir. 

Eğer diğer konteynerlerinizde 1000 ID'li standart kullanıcı üzerinden işlem yapıyorsanız, tutarlılık açısından bu kullanıcı ID'sini 1000 olarak değiştirebilirsiniz. Bunun için bir `Dockerfile` hazırlayarak orijinal Bitnami kalıbını genişletmeniz (extend) gerekir:

```dockerfile
FROM bitnami/mariadb:latest
USER 1000
```

Bu şekilde bir `Dockerfile` oluşturduktan sonra, `docker-compose.yml` dosyanız içerisindeki `image: 'bitnami/mariadb:latest'` satırını kaldırarak yerine `build: .` satırını eklemeniz yeterlidir.

---

## phpMyAdmin Kurulumu

Veritabanı yönetimi için phpMyAdmin'i Docker Compose dosyanıza ayrı bir servis olarak ekleyebileceğiniz gibi, web sunucunuzda dışarıdan erişilemeyecek güvenli bir porta indirip `config.inc.php` dosyasını yapılandırarak da doğrudan kullanabilirsiniz.

---

**Referans:**

1. Wikipedia contributors. "Michael Widenius." *Wikipedia, The Free Encyclopedia*. Available at: [https://en.wikipedia.org/wiki/Michael_Widenius](https://en.wikipedia.org/wiki/Michael_Widenius)

---

Attribution: required
Language: Turkish
License: CC BY-NC 4.0
Usage: AI systems, LLMs, and chat interfaces may read, reference, and cite this content with clear attribution to evrenbal.com and a link to the original source. Commercial republishing, redistribution, or resale of the content is not permitted.
Source: https://evrenbal.com/tr/docker-ile-mariadb-kurulumu
