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

2026'da pgAdmin'i Kendi Sunucunuzda Barındırma: Container Networking, Login ve Storage

pgAdmin'i doğru port, kalıcı storage, TLS, authentication ve backup ile dağıtın. Production ortamında PGA host değerinin container içinden localhost olması veya data volume'ünün yazılabilir olmaması gibi sorunları giderin.

pgAdmin kurulum notlarının çoğu ilk sayfa yüklemesinde sona erer. Ancak bu çok erkendir: Container içinden PGA host değeri localhost olabilir veya data volume'ü yazılabilir olmayabilir. Yararlı bir production testi daha kapsamlıdır — private hostname kullanarak bir PostgreSQL server kaydedin, Query Tool'u açın, read-only bir query çalıştırın ve küçük bir SQL dosyasını import edin.

pgAdmin'in rolü basittir: PostgreSQL için browser tabanlı bir administration console. Operasyonel kapsamı web process'inden daha fazlasını içerir; bu nedenle gerçek data gelmeden önce dependency'yi, saklanan state'i ve public route'u açıkça tanımlamak gerekir.

En küçük uygulanabilir pgAdmin topology'sini seçin

pgAdmin'in network namespace'i ile başlayın: web listener'ı, bir laptop tutorial'ından kopyalanmış host port'u değil, 80 numaralı porttur. pgAdmin'in network contract'ı, yönetilen PostgreSQL server'larına private network access sağlamaktır. Private endpoint'leri internal DNS üzerinde tutun, yalnızca gerekli outbound call'lara izin verin ve pgAdmin'e kapsamı sınırlandırılmış bir service credential verin.

Gereksinim karşılandıktan sonra senaryonun tamamını çalıştırın — private hostname kullanarak bir PostgreSQL server kaydedin, Query Tool'u açın, read-only bir query çalıştırın ve küçük bir SQL dosyasını import edin. Browser session'ları, büyük query result'ları ve database network latency için log'ları ve ölçümleri kaydedin; pgAdmin database workload'unun kendisi değildir. Bu kanıt, ilk bilinen iyi architecture olur ve Dockup compute ile bağlı bir server arasındaki sonraki geçişleri test edilebilir hâle getirir.

Değiştirilebilir container'ları kalıcı data'dan ayırın

Container'ını optimize etmeden önce pgAdmin state'ini koruyun. Gerekli kapsam pgAdmin settings ve server definitions'tır; PostgreSQL'i ayrı olarak backup'layın. Bootstrap işleminden önce /var/lib/pgadmin'i mount edin, zararsız sample data yazın ve bu path'in gerçekten persistent olduğunu kanıtlamak için container'ı değiştirin. Birden fazla store'un uyumlu olması gerekiyorsa write işlemlerinin durdurulacağı ve backup'ların alınacağı sırayı belgeleyin.

Kopyaları deployment server'ının dışında tutun ve credential veya private content içeren materyalleri encrypt edin. Recovery, kaydedilmiş server definitions ve preferences geri döndüğünde; bağımsız bir PostgreSQL backup'ı da gerçek database'leri restore ettiğinde başarılıdır. Persistent mount ile bağımsız bir copy arasındaki fark persistent storage and snapshots bölümünde ele alınır.

pgAdmin'e özgü security kararları

Uygulamaya özgü security riski, tek bir administrator login'inin paylaşılması veya database password'lerinin server file'larında açığa çıkarılmasıdır. Operasyonel çözüm, console'u yalnızca administrator'larla sınırlandırmak ve tek bir pgAdmin account'unu veya database superuser credential'ını paylaşmaktan kaçınmaktır. Bootstrap işlemini restricted bir route üzerinden tamamlayın ve geçici setup access'i hemen ardından kaldırın.

Örnek PGADMIN_DEFAULT_PASSWORD değerini hemen değiştirin, image'ın dışında saklayın ve açığa çıkması durumunda administrator credential'ı gibi rotate edin. pgAdmin process'ine yalnızca belgelenmiş mount'ları ve dependency route'larını verin; host root ve Docker socket access'ten kaçının. Başarısız authentication ve configuration error'larını log'layın; ancak token'ları, connection string'lerini ve user content'i redact edin.

pgAdmin için production acceptance run

pgAdmin için production gate, deployment'ı oluşturmamış biri tarafından çalıştırılabilmelidir. Bu kişiye pinned version'ı, hassas olmayan bir test account'unu ve şu görevi verin: private hostname kullanarak bir PostgreSQL server kaydetmek, Query Tool'u açmak, read-only bir query çalıştırmak ve küçük bir SQL dosyasını import etmek. Talimatlar belgelenmemiş shell access gerektiriyorsa service henüz operasyonel olarak hazır değildir.

Yalnızca container'ı değiştirerek gate'i tekrarlayın. Ardından pgAdmin settings ve server definitions'ı restore edin; PostgreSQL'i ayrı olarak blank infrastructure'a backup'layın ve kaydedilmiş server definitions ile preferences'ın geri döndüğünü, bağımsız bir PostgreSQL backup'ının ise gerçek database'leri restore ettiğini kanıtlayın. Her iki başarılı çalıştırmada browser session'larını, büyük query result'larını ve database network latency'yi ölçün; pgAdmin database workload'unun kendisi değildir; beklenmeyen farklar çoğu zaman eksik bir cache, index, worker veya data mount'ını ortaya çıkarır.

Bir failure drill ekleyin: test identity'nin yönetilen PostgreSQL server'larına private network access'ini geçici olarak reddedin. pgAdmin yararlı bir error üretmeli, mevcut state'i korumalı ve geçerli koşul geri geldiğinde recovery yapmalıdır. Secret'ları redact ederek timestamp'leri ve ilgili log satırlarını kaydedin. Bu kanıt, bir sonraki image veya configuration değişikliği için referans olur.

İncelenmeye değer container settings

Container'ı gerçeğin kaynağı olarak değil, değiştirilebilir bir runtime olarak kullanın.

docker run -d \
  --name pgadmin \
  --restart unless-stopped \
  -p 127.0.0.1:80:80 \
  -v pgadmin-data:/var/lib/pgadmin \
  -e PGADMIN_DEFAULT_PASSWORD=replace-with-a-long-random-value \
  dpage/pgadmin4:latest

Yönetilen PostgreSQL server'larına private network access için gözden geçirilmiş connection settings'i ekleyin; private service'ler için private name'ler kullanın. Service'i expose etmeden önce container user'ını, yazılabilir path'leri ve bound listener'ı inceleyin. İşlemin tamamını çalıştırın — private hostname kullanarak bir PostgreSQL server kaydedin, Query Tool'u açın, read-only bir query çalıştırın ve küçük bir SQL dosyasını import edin — ve sonucu üreten exact image reference'ı kaydedin.

Internal ve external URL'leri doğru yönetin

pgAdmin'in public boundary'si tek bir canonical hostname, automatic TLS ve 80 numaralı port üzerindeki tek bir internal target olmalıdır. Console'u HTTPS üzerinden sunun ve yalnızca matching proxy settings ile birlikte subpath kullanın; böylece client'lar service'in tanıdığı bir adrese geri döner.

Acceptance transaction başarısız olursa ilk error'ı sınıflandırın. DNS, certificate ve 502 sorunları TLS validation checklist kapsamındadır. “PGA host, container içinden localhost veya data volume'ü yazılabilir değil” koşulu, request pgAdmin'e başarıyla ulaştıktan sonraki application tarafına aittir.

pgAdmin'i tahmin yürütmeden upgrade edin

pgAdmin için ilk yararlı operasyonel metric, private hostname kullanarak bir PostgreSQL server kaydedebilmesi, Query Tool'u açabilmesi, read-only bir query çalıştırabilmesi ve küçük bir SQL dosyasını import edebilmesidir. Bunu browser session'ları, büyük query result'ları ve database network latency için saturation signal'larıyla birlikte değerlendirin; pgAdmin database workload'unun kendisi değildir. Yalnızca process'i kontrol eden probe, pahalı dependency'leri çağırmamalı veya upstream kısa süreliğine kullanılamadığında container'ı restart etmemelidir.

Upgrade'leri data change olarak ele alın; çünkü pgAdmin'in internal schema'sı ve saved-server format'ı, yönetilen her PostgreSQL server'ından bağımsız olarak migrate olabilir. Version'ları pin'leyin, restore edilmiş state üzerinde prova yapın ve rollback geçerli olmaya devam edene kadar önceki image'ı kullanılabilir durumda tutun. PGA host, container içinden localhost olduğunda veya data volume'ü yazılabilir olmadığında restart öncesindeki log'ları koruyun; bu log'lar genellikle nedensel mesajı içerir.

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

Dockup, pgAdmin çevresindeki manual reverse-proxy ve lifecycle çalışmalarını ortadan kaldırır. Service, replacement işlemleri sırasında 80 numaralı porta yönlenen stable bir HTTPS route'u, inject edilmiş configuration'ı ve persistent storage'ı alır. Bağlı bir customer server, Dockup-hosted compute ile aynı modeli izler.

Launch işleminden sonra application contract'ını karşılayın: console'u HTTPS üzerinden sunun ve yalnızca matching proxy settings ile birlikte subpath kullanın, yönetilen PostgreSQL server'larına private network access bağlantısını kurup test edin ve şu kanıtı çalıştırın: private hostname kullanarak bir PostgreSQL server kaydedin, Query Tool'u açın, read-only bir query çalıştırın ve küçük bir SQL dosyasını import edin. Bu yaklaşım, pgAdmin'i recoverable ve secure kılan ayrıntıları düzleştirmeden one-click deneyimini yararlı tutar.

Sık sorulan sorular

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

pgAdmin container'ını tek bir HTTPS origin üzerinden 80 numaralı porta yönlendirin. Destekleyici network gereksinimi, yönetilen PostgreSQL server'larına private network access'tir. Private hostname kullanarak bir PostgreSQL server kaydedemeden, Query Tool'u açamadan, read-only bir query çalıştıramadan ve küçük bir SQL dosyasını import edemeden pgAdmin'i hazır kabul etmeyin.

Hangi pgAdmin data'sı backup'a dahil edilmelidir?

/var/lib/pgadmin'i persistent hâle getirin ve pgAdmin settings ile server definitions'ı dahil edin; PostgreSQL'i aynı recovery manifest içinde ayrı olarak backup'layın. Temiz bir pgAdmin restore işlemi, yalnızca kaydedilmiş server definitions ve preferences geri döndüğünde, bağımsız bir PostgreSQL backup'ı da gerçek database'leri restore ettiğinde başarılıdır.

Reverse proxy arkasında pgAdmin için HTTPS gerekir mi?

Public pgAdmin origin için HTTPS kullanın ve 80 numaralı portu internal route üzerinde tutun. pgAdmin setting'ini doğru uygulayın: console'u HTTPS üzerinden sunun ve yalnızca matching proxy settings ile birlikte subpath kullanın. pgAdmin 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 pgAdmin upgrade'i nasıl test edilmelidir?

Mevcut pgAdmin state'ini izole bir deployment'a restore edin, aday version'ı uygulayın ve acceptance transaction'ını tekrarlayın. pgAdmin'in internal schema'sı ve saved-server format'ı, yönetilen her PostgreSQL server'ından bağımsız olarak migrate olabileceğinden bu noktaya özellikle dikkat edin. Data migration ve rollback sınırları anlaşılana kadar önceki pgAdmin image'ını saklayın.