Ana Sayfa / Dokümanlar / Docker Üzerinde phpMyAdmin Kurulumu
KTD-014

Docker Üzerinde phpMyAdmin Kurulumu

Bu dokümanda Ubuntu VPS üzerinde çalışan MariaDB container'ına bağlanacak bir phpMyAdmin servisini Docker Compose ile kuracağız. Ardından servisi Nginx Proxy Manager üzerinden yayınlayacak, DNS kaydını oluşturacak ve Let's Encrypt SSL sertifikasıyla HTTPS erişimini etkinleştireceğiz.

Docker phpMyAdmin MariaDB Docker Compose Nginx Proxy Manager SSL
Okuma Süresi25-35 dakika
Bölüm Sayısı16 bölüm
Son GüncellemeTemmuz 2026
SeviyeBaşlangıç - Orta

Amaç ve Kurulacak Mimari

Amaç, mevcut MariaDB container'ını dışarıya doğrudan açmadan, phpMyAdmin üzerinden web tabanlı olarak yönetmektir.

Kurulum mimarisi
  • kemaltokmak-db: MariaDB container'ı
  • kemaltokmak-phpmyadmin: phpMyAdmin container'ı
  • kemaltokmak_internal: Veritabanı ağı
  • web: Nginx Proxy Manager ortak ağı
  • phpmyadmin.kemaltokmak.com: Yönetim adresi

Ön Gereksinimler

  • Ubuntu 24.04 LTS VPS
  • Docker Engine ve Docker Compose Plugin
  • Çalışan MariaDB container'ı
  • Çalışan Nginx Proxy Manager
  • web isimli harici Docker ağı
  • kemaltokmak.com alan adının DNS yönetimine erişim

Çalışan Container'ları Kontrol Etme

Önce MariaDB ve Nginx Proxy Manager container'larının çalıştığını doğrulayın.

docker ps

Listede en az kemaltokmak-db ve nginx-proxy-manager görünmelidir.

MariaDB Container'ının Ağını Bulma

MariaDB container'ının kullandığı Docker ağını öğrenmek için:

docker inspect kemaltokmak-db | grep NetworkMode

Docker ağlarını listeleyin:

docker network ls
Docker NetworkMode ve docker network ls kontrolü
MariaDB ağı ve web ağı kontrol edilir.
Dikkat

Buradaki ağ adı örnektir. Kendi sunucunuzdaki gerçek ağ adını docker network ls çıktısından kullanın.

phpMyAdmin Proje Klasörünü Oluşturma

cd /opt/docker
mkdir -p phpmyadmin
cd phpmyadmin

Compose dosyasını oluşturun:

nano docker-compose.yml

docker-compose.yml Dosyasını Hazırlama

services:
  phpmyadmin:
    image: phpmyadmin:latest
    container_name: kemaltokmak-phpmyadmin
    restart: unless-stopped

    environment:
      PMA_HOST: kemaltokmak-db
      PMA_PORT: 3306
      UPLOAD_LIMIT: 128M
      MEMORY_LIMIT: 256M
      MAX_EXECUTION_TIME: 300

    networks:
      - database-network
      - web

networks:
  database-network:
    external: true
    name: kemaltokmak_internal

  web:
    external: true
    name: web

Önemli Alanlar

  • PMA_HOST: MariaDB container adı
  • PMA_PORT: MariaDB portu
  • database-network: Veritabanına erişim ağı
  • web: Nginx Proxy Manager'ın erişeceği ortak ağ
İpucu

phpMyAdmin için host üzerinde ayrıca 8080:80 gibi bir port açmıyoruz. Erişimi yalnızca Nginx Proxy Manager üzerinden sağlıyoruz.

phpMyAdmin Container'ını Başlatma

docker compose up -d

Durumu kontrol edin:

docker compose ps
phpMyAdmin Docker container başlatma çıktısı
Container başarıyla oluşturulmuş ve Up durumundadır.

Docker Ağ Bağlantılarını Doğrulama

docker inspect kemaltokmak-phpmyadmin | grep -A20 Networks

Çıktıda hem kemaltokmak_internal hem de web ağı görünmelidir.

MariaDB adına erişimi test etmek için:

docker exec kemaltokmak-phpmyadmin getent hosts kemaltokmak-db

DNS A Kaydını Oluşturma

Alan adı sağlayıcısının DNS panelinde aşağıdaki kaydı oluşturun:

Tür: A
Ad / Host: phpmyadmin
Değer / IP: SUNUCU_IP_ADRESI
TTL: 3600

Sonuçta adres şu şekilde olacaktır:

phpmyadmin.kemaltokmak.com
phpMyAdmin alt alan adı için DNS A kaydı
phpmyadmin alt alan adı VPS IP adresine yönlendirilir.

DNS çözümlemesini kontrol edin:

dig phpmyadmin.kemaltokmak.com +short

Nginx Proxy Manager Proxy Host Ayarları

Nginx Proxy Manager'da Proxy Hosts → Add Proxy Host bölümünü açın.

Domain Names: phpmyadmin.kemaltokmak.com
Scheme: http
Forward Hostname / IP: kemaltokmak-phpmyadmin
Forward Port: 80
Scheme neden HTTP?

phpMyAdmin container'ı Docker ağı içinde HTTP ile çalışır. HTTPS şifrelemesini dış tarafta Nginx Proxy Manager sağlar.

Nginx Proxy Manager phpMyAdmin Proxy Host ayarları
Forward Hostname olarak container adı, port olarak 80 kullanılır.

Let's Encrypt SSL Sertifikası Alma

SSL sekmesinde aşağıdaki ayarları seçin:

  • Request a new SSL Certificate
  • Force SSL
  • HTTP/2 Support
  • HSTS Enabled
Nginx Proxy Manager SSL ayarları
DNS kaydı aktif olduktan sonra SSL sertifikası alınır.
Internal Error

DNS kaydı henüz VPS IP adresine yönlenmiyorsa Let's Encrypt sertifikası alınamaz. Önce dig ile DNS sonucunu doğrulayın.

phpMyAdmin'e İlk Giriş

Tarayıcıdan aşağıdaki adresi açın:

https://phpmyadmin.kemaltokmak.com

MariaDB için oluşturduğunuz kullanıcı adı ve parola ile giriş yapın.

Sunucu: kemaltokmak-db
Kullanıcı: kemaltokmak_user
Parola: MARİADB_KULLANICI_PAROLASI
phpMyAdmin başarılı giriş ekranı
phpMyAdmin MariaDB sunucusuna başarıyla bağlanmıştır.

Güvenlik Önerileri

  • MariaDB'nin 3306 portunu internete açmayın.
  • Günlük işlemlerde MariaDB root kullanıcısını kullanmayın.
  • Nginx Proxy Manager üzerinde Access List uygulayın.
  • Güçlü ve benzersiz parolalar kullanın.
  • phpMyAdmin ve MariaDB container'larını düzenli güncelleyin.
  • Veritabanı yedeklerini düzenli ve şifreli biçimde saklayın.
Çift katmanlı koruma

Nginx Proxy Manager Access List ile önce HTTP Basic Authentication, ardından phpMyAdmin giriş ekranı kullanılarak iki ayrı kimlik doğrulama katmanı oluşturulabilir.

phpMyAdmin Container'ını Güncelleme

Yeni image sürümünü indirip container'ı yeniden oluşturun:

cd /opt/docker/phpmyadmin
docker compose pull
docker compose up -d

Eski ve kullanılmayan image'ları kontrollü biçimde temizlemek için:

docker image prune

Sık Karşılaşılan Hatalar ve Çözümleri

Container MariaDB'ye bağlanamıyor

docker logs kemaltokmak-phpmyadmin --tail 100
docker network inspect kemaltokmak_internal

PMA_HOST değerinin MariaDB container adıyla aynı olduğunu doğrulayın.

502 Bad Gateway

Nginx Proxy Manager ile phpMyAdmin aynı web ağına bağlı olmayabilir veya Forward Hostname yanlış yazılmış olabilir.

docker network inspect web

SSL alırken Internal Error

dig phpmyadmin.kemaltokmak.com +short
docker logs nginx-proxy-manager --tail 100

Alan adı zaten kullanımda

Aynı domain daha önce Proxy Hosts listesine eklenmiştir. Yeni kayıt oluşturmak yerine mevcut kaydı düzenleyin.

Bu Dokümanda Ne Öğrendik?

Özet
  • Mevcut MariaDB Docker ağını tespit ettik.
  • Docker Compose ile phpMyAdmin container'ı oluşturduk.
  • phpMyAdmin'i veritabanı ve proxy ağlarına bağladık.
  • DNS üzerinde alt alan adı oluşturduk.
  • Nginx Proxy Manager ile Proxy Host tanımladık.
  • Let's Encrypt SSL sertifikası aldık.
  • HTTPS üzerinden phpMyAdmin'e güvenli erişim sağladık.
Sonraki Doküman KTD-013 — phpMyAdmin ile MariaDB Veritabanı Yönetimi