Günlük diziniDockup / saha notu
Note / self-host-phpmyadmin

2026'da phpMyAdmin'i Self-Host Etme: MySQL Ağ Yapısı, Upload'lar ve Güvenlik

Docker, portlar, kalıcı veriler, TLS, güvenlik, backup'lar ve production kullanımını engelleyen sorunları kapsayan pratik bir phpMyAdmin self-hosting rehberi. 2026.

Çoğu phpMyAdmin kurulum notu ilk sayfa yüklemesinde sona erer. Bu çok erkendir: PMA_HOST container içinde localhost olabilir veya upload limit'leri import işlemlerini engelleyebilir. Kullanışlı bir production testi daha kapsamlıdır — MySQL'e private hostname üzerinden giriş yapın, bir query çalıştırın, bir tablo export edin ve proxy üzerinden küçük bir dump import edin.

phpMyAdmin'in rolü basittir: MySQL ve MariaDB için tanıdık bir browser console. Ancak operasyonel sınırları web process'inden daha geniştir; bu nedenle gerçek veriler gelmeden önce dependency, saklanan state ve public route açıkça tanımlanmalıdır.

Docker'a dokunmadan önce phpMyAdmin'i haritalayın

phpMyAdmin image'ının production mimarisini yanlışlıkla belirlemesine izin vermeyin. Image, 80 portunda çalışan bir process sağlar; storage, routing ve external gereksinimlerin lifecycle'ları yine bilinçli şekilde yönetilmelidir. phpMyAdmin'in network contract'ı, MySQL veya MariaDB'ye private network erişimidir. Private endpoint'leri internal DNS üzerinde tutun, yalnızca gerekli outbound çağrılara izin verin ve phpMyAdmin'e kapsamı sınırlandırılmış bir service credential verin.

Deployment; MySQL'e private hostname üzerinden giriş yapabildiğinde, bir query çalıştırabildiğinde, bir tablo export edebildiğinde ve proxy üzerinden küçük bir dump import edebildiğinde daha kapsamlı testlere hazırdır. İşlemi log'larda takip edin ve upload limit'lerini, PHP memory kullanımını, browser result size değerini ve MySQL'e network latency'yi izleyin. Bu gözlemler, mevcut topology'nin doğru component'i izole edip etmediğini ortaya çıkarır.

Public origin'i belirsiz olmaktan çıkarın

phpMyAdmin için tek bir HTTPS hostname yayınlayın; ham 80 portunu private tutun. Console'u kısıtlanmış bir administrative hostname üzerinden HTTPS ile sunun. Böylece browser'ların ve API client'larının birbiriyle yarışan iki farklı adres öğrenmesi önlenir.

Temiz bir client'tan bilinen ve sorunsuz işlemi çalıştırın, ardından ilk başarısız request'i inceleyin. DNS veya TLS hatalıysa custom-domain rehberini kullanın. “PMA_HOST container içinde localhost olabilir veya upload limit'leri import işlemlerini engelleyebilir” durumunu, route doğrulandıktan sonra ayrı bir application diagnosis olarak ele alın.

İncelenmeye değer container ayarları

Production'a uygun bir launch bilerek sıradandır: named state, açıkça belirtilmiş port ve image içinde secret bulunmaması.

docker run -d \
  --name phpmyadmin \
  --restart unless-stopped \
  -p 127.0.0.1:80:80 \
  -e PMA_HOST=mysql.internal \
  phpmyadmin:latest

Bu örnek, destekleyici stack'in tamamı değil, bir baseline'dır. MySQL veya MariaDB'ye private network erişimi için gözden geçirilmiş connection ayarlarını ekleyin; private service'ler için private name'ler kullanın. Etkin mount'ları ve listener'ı kontrol edin, ardından MySQL'e private hostname üzerinden giriş yapmayı, bir query çalıştırmayı, bir tablo export etmeyi ve proxy üzerinden küçük bir dump import etmeyi deneyin. Bir sonraki restart'tan önce çalışan image'ı pin'leyin.

Yalnızca container'ı değil workload'u da izleyin

Boşta çalışan bir health check, phpMyAdmin hakkında çok az şey söyler. Upload limit'lerini, PHP memory kullanımını, browser result size değerini ve MySQL'e network latency'yi izleyin; ardından kullanıcıların deneyimlediği belirti için alert oluşturun: “MySQL'e private hostname üzerinden giriş yapma, bir query çalıştırma, bir tablo export etme ve proxy üzerinden küçük bir dump import etme” işleminin başarısız olması. Liveness'ı local ve düşük maliyetli tutun; readiness, restart storm oluşturmadan migration veya initialization durumunu bildirsin.

Riskli upgrade alanı, phpMyAdmin'in büyük ölçüde stateless olması ancak version değişikliklerinin authentication plugin'lerini ve desteklenen MySQL özelliklerini etkileyebilmesidir. Release note'larını okuyun, state'in snapshot'ını alın, target version'ı restore edilmiş bir kopya üzerinde deploy edin ve acceptance action'ı tekrarlayın. PMA_HOST container içinde localhost olabilir veya upload limit'leri import işlemlerini engelleyebilirse client request'ini, state'i silmek ya da gelişigüzel redirect eklemek yerine ilk ilgili application log'u ile ilişkilendirin.

phpMyAdmin release gate'i

Gerçek kullanıcılar gelmeden önce phpMyAdmin için bir release worksheet hazırlayın. Worksheet; pin'lenmiş image'ı, 80 portunu, canonical origin'i, persistent path'leri ve MySQL veya MariaDB'ye private network erişiminin sahibini belirtmelidir. Şu transaction'ın beklenen sonucunu ekleyin: MySQL'e private hostname üzerinden giriş yapma, bir query çalıştırma, bir tablo export etme ve proxy üzerinden küçük bir dump import etme.

Worksheet'i normal bir replacement sonrasında ve temiz bir restore sonrasında kullanın. Recovery yalnızca target MySQL backup'ı bağımsız olarak restore edildiğinde ve yeniden oluşturulan console, amaçlanan limited account ile bağlanabildiğinde kabul edilir. Ayrıca upload limit'lerini, PHP memory kullanımını, browser result size değerini ve MySQL'e network latency'yi kapsayan kısa bir resource trace toplayın; gelecekteki capacity değişikliklerini aynı workload ile karşılaştırabilmek için bunu release'in yanında saklayın.

Kontrollü bir failure da ekleyin: test identity'nin MySQL veya MariaDB'ye private network erişimini geçici olarak engelleyin. phpMyAdmin'in sorunu doğru boundary'de raporladığını doğrulayın, geçerli koşulu geri yükleyin ve transaction'ı yeniden çalıştırın. Bu, yalnızca başarıyı değil error visibility'yi de test eder ve sağlıklı görünen bir interface'in bozuk bir worker'ı, callback'i veya database connection'ını gizlemesini önler.

phpMyAdmin recovery'sini ölçülebilir hâle getirin

Standart phpMyAdmin container'ının zorunlu bir application-data mount'u yoktur. Yine de recovery set'i açıkça tanımlanmalıdır: MySQL database'lerini backup'layın; yalnızca bilinçli olarak kullanılan phpMyAdmin config'ini saklayın. Deployment stateful görünsün diye boş bir volume oluşturmayın; bunun yerine image referansını ve gözden geçirilmiş configuration'ı tam olarak koruyun.

phpMyAdmin'i boş bir host üzerinde yeniden oluşturun ve acceptance transaction'ı çalıştırın. Recovery; target MySQL backup'ı bağımsız olarak restore edildiğinde ve yeniden oluşturulan console, amaçlanan limited account ile bağlanabildiğinde başarılıdır. Bağlı herhangi bir database veya collaboration service kendi application-consistent backup planını izler; değiştirilebilir web container'ı ise code'dan yeniden oluşturulur. Git'ten production'a deployment rehberi bu reproducible boundary'yi açıklar.

Bilinen ve sorunsuz image için bir checksum veya digest saklayın ve update'lerden sonra yeniden test edin. Stateless bir service için başarılı bir rebuild restore testidir; external state içinse phpMyAdmin runbook'u ayrı owner'ı ve recovery procedure'ünü göstermelidir.

phpMyAdmin'in sahip olduğu yetkiyi azaltın

İlk login sonrasında anonymous visitor'ın, ordinary user'ın ve administrator'ın neler yapabildiğini ayrı ayrı gözden geçirin. Kaçınılması gereken phpMyAdmin failure'ı, arbitrary server'ları public olarak etkinleştirmek veya database root credential'larını yeniden kullanmaktır. Amaçlanan policy; console'u administrator'larla sınırlandırmak, gerekli olmadıkça arbitrary-server mode kullanmamak ve rutin işler için MySQL root kullanmamaktır.

PMA_HOST bir configuration'dır, secret değildir; değerini açıkça tutarken phpMyAdmin tarafından kullanılan ayrı credential'ları koruyun. Dependency account'larını human account'larından ayırın, mümkün olduğunda kullanılmayan egress'i reddedin ve upload limit'leri, PHP memory kullanımı, browser result size ve MySQL'e network latency tarafından etkilenebilen işleri sınırlandırın.

phpMyAdmin'i Dockup lifecycle'ına bağlayın

phpMyAdmin için Dockup route'u ve TLS certificate'ını oluşturabilir, mount'ları koruyabilir, secret'ları iletebilir ve MySQL veya MariaDB'ye private network erişimini private networking üzerinde konumlandırabilir; deployment ise Dockup'a veya bağlı server'lara yapılabilir.

Release gate yine somut phpMyAdmin transaction'ıdır: MySQL'e private hostname üzerinden giriş yapın, bir query çalıştırın, bir tablo export edin ve proxy üzerinden küçük bir dump import edin. Restore koşulunu da doğrulayın — target MySQL backup'ı bağımsız olarak restore edilmeli ve yeniden oluşturulan console, amaçlanan limited account ile bağlanabilmelidir. Bu iki kontrol, deployment'ın çalışıp çalışmadığını ve recovery işleminin mümkün olup olmadığını gösterir.

Sık sorulan sorular

Production deployment için phpMyAdmin'in neye ihtiyacı vardır?

phpMyAdmin container'ını 80 portunda tek bir HTTPS origin üzerinden route edin. Destekleyici network gereksinimi, MySQL veya MariaDB'ye private network erişimidir. MySQL'e private hostname üzerinden giriş yapıp bir query çalıştırana, bir tablo export edene ve proxy üzerinden küçük bir dump import edene kadar phpMyAdmin'i hazır kabul etmeyin.

Hangi phpMyAdmin verileri backup'a dahil edilmelidir?

Standart phpMyAdmin image'ının zorunlu bir application-data mount'u yoktur. Deployment configuration'ını koruyun ve bağlı state'i ayrı olarak backup'layın; recovery, target MySQL backup'ı bağımsız olarak restore edildiğinde ve yeniden oluşturulan console, amaçlanan limited account ile bağlanabildiğinde başarılıdır.

Reverse proxy arkasında phpMyAdmin HTTPS gerektirir mi?

Public phpMyAdmin origin'i için HTTPS kullanın ve 80 portunu internal route üzerinde tutun. phpMyAdmin ayarını doğru uygulayın: console'u kısıtlanmış bir administrative hostname üzerinden HTTPS ile sunun. phpMyAdmin için HTTPS, credential'ları veya user content'i transit sırasında korur ve origin'e duyarlı client davranışının tutarlı kalmasını sağlar.

Bir phpMyAdmin upgrade'i nasıl test edilmelidir?

Mevcut phpMyAdmin state'ini izole bir deployment'a restore edin, candidate version'ı uygulayın ve acceptance transaction'ını tekrarlayın. phpMyAdmin büyük ölçüde stateless olsa da version değişiklikleri authentication plugin'lerini ve desteklenen MySQL özelliklerini etkileyebileceği için özellikle dikkatli olun. Data-migration ve rollback boundary'leri anlaşılana kadar önceki phpMyAdmin image'ını saklayın.