Amaç ve Kurulacak Mimari
Amaç, mevcut MariaDB container'ını dışarıya doğrudan açmadan, phpMyAdmin üzerinden web tabanlı olarak yönetmektir.
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
webisimli harici Docker ağı-
kemaltokmak.comalan 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
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ğ
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
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
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
phpMyAdmin container'ı Docker ağı içinde HTTP ile çalışır. HTTPS şifrelemesini dış tarafta Nginx Proxy Manager sağlar.
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
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
Güvenlik Önerileri
-
MariaDB'nin
3306portunu 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.
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?
- 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.