Blog

Ubuntu VPS üzerinde Docker ile Nginx Proxy Manager kurulumu

VPS Üzerinde Docker ile Nginx Proxy Manager Kurulumu

Nginx Proxy Manager kurulumu, Docker’un sağladığı taşınabilirlik sayesinde tek bir Compose dosyası ve birkaç komutla tamamlanabilecek kadar kısa bir süreçtir. Bir VPS üzerinde Nginx tabanlı ters vekil sunucuyu (reverse proxy) web arayüzünden yönetmek; alan adlarını arka plandaki uygulamalara yönlendirmek, Let’s Encrypt sertifikalarını otomatik olarak almak ve yenilemek, tüm bunları elle yapılandırma dosyası düzenlemeden gerçekleştirmek anlamına gelir. Bu rehberde ön koşullardan proxy host tanımlamaya, SSL yönetiminden yedekleme ve güncelleme rutinlerine kadar tüm adımları uçtan uca ele alıyoruz.

Nginx Proxy Manager Nedir ve Neden Tercih Edilir?

Nginx Proxy Manager (kısaca NPM), Nginx’in güçlü yönlendirme yeteneklerini tarayıcıdan kullanılabilen bir kontrol paneline taşıyan açık kaynaklı bir araçtır. Arka planda çalışan Nginx sürecini sizin adınıza yönetir; siz arayüzden alan adı, hedef sunucu IP’si, port ve sertifika bilgilerini girersiniz, gerisini uygulama halleder.

Klasik yöntemde her yeni uygulama için server blokları yazmak, proxy_pass satırlarını elle düzenlemek, sertifika yenileme zamanlamasını takip etmek ve her değişiklikte nginx -t ile sözdizimi kontrolü yapmak gerekir. NPM bu döngüyü büyük ölçüde ortadan kaldırır. Özellikle tek bir sunucuda birden fazla servis barındıranlar için büyük kolaylık sağlar:

  • Alan adı bazlı yönlendirme (host-based routing) ve alt alan adı yönetimi
  • Let’s Encrypt veya ZeroSSL üzerinden tek tıkla SSL sertifikası alma ve otomatik yenileme
  • HTTP’den HTTPS’e zorunlu yönlendirme ve HSTS gibi başlıkların arayüzden açılabilmesi
  • WebSocket, özel konum (custom location) ve ileri düzey başlık tanımları
  • Erişim listeleri (Access List) ile temel kimlik doğrulama koruması
  • TCP/UDP akış (stream) yönlendirmesi ile yalnızca HTTP değil, veritabanı veya oyun sunucusu gibi servislerin de öne alınabilmesi

Bunun karşılığında, çok karmaşık ve tamamen özel Nginx senaryolarında arayüz yetersiz kalabilir; bu durumda yine de elle yapılandırma gerekebileceğini baştan belirtmek gerekir.

Kurulum Öncesi Hazırlıklar

1. Uygun sunucu ve işletim sistemi

NPM çok hafif bir uygulamadır; 1 vCPU ve 1 GB RAM, küçük ölçekli kullanım için genellikle yeterlidir. Ancak arkasına yerleştireceğiniz uygulamalar da aynı makinede çalışacaksa bellek ve disk planlamasını buna göre yapmalısınız. Ubuntu veya Debian tabanlı bir dağıtım, Docker ekosistemiyle en az sürtünmeyle çalışan seçenektir. Henüz sunucu seçmediyseniz ölçeklenebilir bir VPS hosting hizmeti ile başlayıp kaynakları ihtiyaç arttıkça yükseltebilirsiniz.

2. DNS kayıtları

Ters vekil sunucunun çalışması için alan adının sunucuyu göstermesi şarttır. Kullanacağınız her alt alan adı için (örneğin panel.ornek.com, api.ornek.com) A kaydı oluşturup VPS’in genel IP adresine yönlendirin. IPv6 kullanıyorsanız AAAA kaydını da eklemeyi unutmayın. DNS yayılımı tamamlanmadan sertifika talebinde bulunmak, Let’s Encrypt doğrulamasının başarısız olmasının en yaygın nedenidir. Alan adınızı yeni alacaksanız domain kaydı adımlarını tamamladıktan sonra DNS panelinden bu kayıtları ekleyebilirsiniz.

3. Güvenlik duvarı ve portlar

NPM üç port kullanır: 80 (HTTP), 443 (HTTPS) ve 81 (yönetim arayüzü). Yönetim arayüzünün internete açık kalması ciddi bir risk oluşturur; bu portu yalnızca kendi IP adresinize açmanız ya da SSH tüneli üzerinden erişmeniz önerilir.

Port Protokol Amaç Erişim
80 TCP HTTP trafiği ve ACME doğrulaması Herkese açık
443 TCP HTTPS trafiği Herkese açık
81 TCP Yönetim paneli Yalnızca güvenilir IP / VPN
22 TCP SSH erişimi Yalnızca güvenilir IP / anahtar

4. Docker ve Docker Compose

Sunucuda Docker kurulu değilse resmî kurulum betiği veya dağıtımın paket deposu üzerinden kurulum yapılabilir. Kurulum sonrası docker --version ve docker compose version komutlarıyla sürümleri doğrulayın. Güncel Docker sürümlerinde Compose, eklenti olarak docker compose biçiminde gelir; eski docker-compose komutuna göre farklı olduğunu unutmayın.

Docker Compose Dosyasıyla Kurulum

Kurulum için önce kalıcı verilerin tutulacağı bir dizin oluşturun. Bu dizin, hem veritabanını hem de sertifikaları barındıracağı için yedekleme stratejisinin merkezinde yer alır.

mkdir -p /opt/nginx-proxy-manager
cd /opt/nginx-proxy-manager
nano docker-compose.yml

Ardından aşağıdaki yapıyı dosyaya ekleyin:

services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:81/api/"]
      interval: 30s
      timeout: 10s
      retries: 3

Dosyayı kaydettikten sonra servisi arka planda başlatın:

docker compose up -d
docker compose logs -f

Günlüklerde hata mesajı görünmüyorsa panel http://SUNUCU_IP:81 adresinde açılır. Varsayılan yönetici hesabı ilk kurulumda admin@example.com ve changeme bilgileriyle gelir; giriş yaptığınız anda sizden e-posta adresini ve güçlü bir parolayı belirlemeniz istenir. Bu adımı ertelemeyin, çünkü panel varsayılan kimlik bilgileriyle internete açık kalırsa dakikalar içinde taranıp ele geçirilebilir.

İlk Proxy Host Tanımlaması

Panelin temel işi tek bir kavram etrafında döner: proxy host. Her proxy host; bir alan adını, bir hedef şema ve porta, bir de sertifika politikasına bağlar. Tipik bir senaryo, aynı sunucuda 3000 portunda çalışan bir Node.js uygulamasını app.ornek.com adresinden yayına almak:

  1. Hosts → Proxy Hosts → Add Proxy Host yolunu izleyin.
  2. Domain Names alanına alan adını yazın; birden fazla ad girilecekse virgülle ayırın.
  3. Forward Hostname olarak 127.0.0.1 veya Docker ağ adı, Forward Port olarak uygulamanın portunu girin.
  4. Scheme değerini uygulamanın dinlediği protokole göre http ya da https seçin.
  5. Block Common Exploits seçeneğini açık bırakın; bilinen tarama ve kötüye kullanım isteklerini filtreler.
  6. Websockets Support seçeneğini, gerçek zamanlı özellik barındıran uygulamalarda mutlaka etkinleştirin.
  7. Save ile kaydedin; kayıt anında Nginx yapılandırması otomatik olarak oluşturulur ve yeniden yüklenir.

Benzer biçimde bir WordPress hosting kurulumunu da aynı sunucuda çalıştırıp önüne proxy host ekleyebilirsiniz. Docker ağı üzerinden haberleşen konteynerlerde hedef adres olarak IP değil, servis adını kullanmanız gerekir; aksi halde konteyner yeniden başladığında IP değişeceği için yönlendirme kırılır.

SSL Sertifikalarının Otomatik Yönetimi

Aynı formun SSL sekmesinde Request a new SSL Certificate seçeneğini işaretleyip Force SSL ve HTTP/2 Support ayarlarını açabilirsiniz. Sertifika talebi sırasında Let’s Encrypt, alan adının gerçekten bu sunucuya yönlendirildiğini doğrular; alan adı başka bir yere işaret ediyorsa doğrulama başarısız olur.

Yenileme süreci otomatik işler, ancak iki noktaya dikkat etmek gerekir. Birincisi, arayüzde kayıtlı bir e-posta adresi bulunmalıdır; süre dolumu uyarıları bu adrese gider. İkincisi, letsencrypt dizininin yedeklenmesi şarttır; sertifikalar kaybolursa yeni talep üretmek gerekir ve Let’s Encrypt’in haftalık limitleri devreye girebilir.

Güvenlik ve İleri Düzey Ayarlar

Arayüzün sunduğu hazır seçenekler, çoğu üretim senaryosu için yeterli bir temel oluşturur:

  • Access List: Belirli bir alan adına kullanıcı adı ve parola sorulmasını sağlar. Hazırlık aşamasındaki paneller, iç API’ler ve yönetim arayüzleri için pratik bir koruma katmanıdır.
  • Custom Locations: Aynı alan adı altında farklı yolları farklı servislere yönlendirmenizi sağlar; örneğin /api bir servise, / başka bir servise gidebilir.
  • Advanced sekmesi: Nginx’e özgü ek direktifleri doğrudan yazabileceğiniz alandır. Yönlendirme kuralları, güvenlik başlıkları veya hız sınırlaması burada tanımlanabilir.
  • Streams: HTTP dışı protokolleri (TCP/UDP) öne almak için kullanılır; her akışın ayrı bir dinleme portu olması gerekir.

Ters vekil sunucu tek başına bir güvenlik duvarı değildir. Uygulama katmanında daha kapsamlı filtreleme gerekiyorsa, imza tabanlı kuralların yanına davranış analizi ekleyen yapay zeka destekli WAF kuralları yaklaşımı, artan otomatik tarama trafiğine karşı tamamlayıcı bir katman sunar. Ayrıca aynı VPS üzerinde harici erişime açık farklı servisler barındırıyorsanız, port ve kimlik doğrulama düzenini baştan planlamak için VPS yönetim rehberi iyi bir başlangıç noktasıdır.

Manuel Nginx Yapılandırması ile Karşılaştırma

Ölçüt Manuel Nginx Nginx Proxy Manager
Öğrenme eğrisi Yapılandırma sözdizimi bilgisi gerekir Temel arayüz bilgisi yeterli
Sertifika yenileme Zamanlayıcı ve betik kurulumu gerekir Otomatik, arayüzden yönetilir
Esneklik Sınırsız Yüksek, ancak arayüzle sınırlı
Değişiklik riski Yazım hatası tüm siteleri düşürebilir Kayıt bazlı, geri alma kolay
Kaynak tüketimi Yalnızca Nginx Nginx + panel + veritabanı

Bakım, Güncelleme ve Yedekleme

Kurulum bittikten sonra sürdürülebilirlik üç rutine dayanır. Güncelleme için dizin içinde docker compose pull ve ardından docker compose up -d komutlarını çalıştırmak yeterlidir; sürüm notlarını okumadan büyük sürüm atlamamak, veritabanı şeması değişikliklerinde sorun yaşamamak adına önemlidir. Yedekleme için data, letsencrypt ve Compose dosyasının kendisini düzenli aralıklarla sunucu dışına kopyalayın; yalnızca veritabanını almak, sertifikaları kaybetmeniz durumunda yeterli olmaz. İzleme tarafında ise docker compose logs çıktısını ve disk doluluk oranını takip etmek, sertifika yenilemelerinin sessizce başarısız olduğu durumları erken yakalamanızı sağlar.

Sık Yapılan Hatalar

  • 81 portunu internete açmak: Panelin ele geçirilmesi, tüm trafiğin yeniden yönlendirilmesi anlamına gelir.
  • Yanlış hedef adres kullanmak: Konteyner ortamında localhost yazmak, yönlendirmenin kendine dönmesine yol açar.
  • DNS yayılımını beklemeden sertifika istemek: Doğrulama başarısız olur ve tekrar denemelerde limitlere takılabilirsiniz.
  • Gerçek istemci IP’sini kaybetmek: Uygulama seviyesinde IP tabanlı kısıtlama kullanıyorsanız, ileri düzey ayarlarda ilgili başlıkların iletilmesini sağlamalısınız.
  • WebSocket desteğini açmayı unutmak: Canlı bildirim ve sohbet özellikleri sessizce çalışmaz hale gelir.

SSS

Nginx Proxy Manager için hangi sunucu kaynakları yeterli?

Yalnızca yönlendirme yapacaksa 1 vCPU ve 1 GB RAM çoğu küçük kurulum için yeterlidir. Arkasında veritabanı veya ağır uygulamalar çalışacaksa RAM’i en az 2 GB’a çıkarmak, sertifika ve günlük dosyaları için de ayrı disk alanı bırakmak önerilir.

Panelin yönetim arayüzünü nasıl güvene alabilirim?

En pratik yöntem, 81 portunu güvenlik duvarında yalnızca kendi IP adresinize açmak veya SSH tüneliyle yerel porta yönlendirmektir. Bunun yanında paneli bir alt alan adına taşıyıp Access List ile ek kimlik doğrulama eklemek ikinci bir katman sağlar.

Aynı sunucuda birden fazla alan adı barındırabilir miyim?

Evet. Her alan adı için ayrı bir proxy host tanımlamanız yeterlidir. Sınır, sunucunuzun CPU, RAM ve disk kapasitesidir; ters vekil katmanı kendisi çok az kaynak tüketir.

Let’s Encrypt sertifikası yenilenmezse ne olur?

Sertifika süresi dolduğunda ziyaretçiler tarayıcı uyarısı görür. Yenilemenin çalışmaması genellikle 80 portunun kapalı olması, DNS kaydının değişmesi veya letsencrypt dizininin izinlerinin bozulmasından kaynaklanır. Günlükleri kontrol edip alan adının doğru sunucuyu gösterdiğini doğrulayın.

Docker olmadan da kurulabilir mi?

Uygulama Docker imajı üzerinden dağıtılmak üzere tasarlanmıştır. Konteynersız kurulum teknik olarak mümkün olsa da bağımlılık yönetimi ve güncelleme açısından belirgin biçimde daha zahmetlidir; bu nedenle konteyner yaklaşımı standart kabul edilir.

Yapılandırmayı yedekten nasıl geri dönerim?

Servisi durdurup data ve letsencrypt dizinlerini yedekten geri kopyalayın, ardından docker compose up -d ile yeniden başlatın. Sürümler arasında geri dönüş yapacaksanız, yedeğin alındığı sürümle aynı imaj etiketini kullanmak veritabanı uyumluluğu açısından güvenli olur.