Bu rehber, makinenizde Docker’ın zaten kurulu ve çalışır durumda olduğunu varsaymaktadır.
Adım 1: Portainer Verileri için Bir “Volume” Oluşturun
Portainer’ın ayarlarının ve verilerinin kalıcı olması için özel bir depolama alanı (volume) oluşturmak en iyi pratiktir. Bu sayede Portainer konteynerini silip yeniden oluştursanız bile ayarlarınız kaybolmaz.
docker volume create portainer_data
Bu komut, Docker’ın yönettiği portainer_data adında bir depolama alanı oluşturur.
Adım 2: Portainer Konteynerini İndirin ve Başlatın
Şimdi Portainer’ı kendi konteyneri içinde çalıştıracağız. Aşağıdaki komutu kopyalayıp terminalinize yapıştırın ve çalıştırın:
docker run -d \
-p 8000:8000 \
-p 9443:9443 \
–name portainer \
–restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Komutun Açıklaması:
docker run -d: Konteyneri arka planda (detached) çalıştırır.
-p 8000:8000 -p 9443:9443: Port yönlendirmesi yapar.
9443 portu, Portainer’ın web arayüzüne ulaşacağınız HTTPS portudur. Tarayıcıda bu portu kullanacaksınız.
8000 portu ise eski versiyonlar ve Portainer Agent için kullanılır. İkisini de açmakta fayda var.
–name portainer: Konteynere “portainer” ismini verir. Bu sayede daha sonra docker stop portainer gibi komutlarla kolayca yönetebilirsiniz.
–restart=always: Konteyner herhangi bir sebeple durursa veya makine yeniden başlarsa, Portainer’ın otomatik olarak yeniden başlamasını sağlar.
-v /var/run/docker.sock:/var/run/docker.sock: EN ÖNEMLİ KISIM. Bu komut, ana makinenizdeki Docker motoruna (daemon) erişim izni verir. Portainer bu sayede diğer konteynerleri yönetebilir.
-v portainer_data:/data: 1. adımda oluşturduğumuz portainer_data volume’ünü konteynerin içindeki /data klasörüne bağlar. Portainer tüm ayarlarını buraya kaydeder.
portainer/portainer-ce:latest: Çalıştırılacak Docker imajını belirtir (Portainer Community Edition’ın en son sürümü).
Adım 3: Portainer Arayüzüne Erişin ve İlk Ayarları Yapın
Tarayıcınızı açın ve şu adrese gidin:
https://localhost:9443 (eğer kendi bilgisayarınıza kurduysanız)
https://<sunucunuzun_ip_adresi>:9443 (eğer bir sunucuya kurduysanız)
Tarayıcınız bir SSL sertifika uyarısı verecektir (Bağlantınız gizli değil gibi). Bu normaldir çünkü Portainer kendi kendine imzalanmış bir sertifika kullanır. “Gelişmiş” ve “Yine de devam et” (veya benzeri) seçenekleriyle güvenle ilerleyebilirsiniz.
Karşınıza ilk kurulum ekranı gelecek. Burada bir yönetici (admin) kullanıcısı oluşturmanız istenir.
Bir kullanıcı adı (admin olabilir) belirleyin.
Güçlü bir şifre oluşturun ve tekrar yazın.
“Create user” butonuna tıklayın.
Bir sonraki ekranda Portainer’ın hangi Docker ortamını yöneteceğini seçeceksiniz.
“Get Started” butonuna tıklayarak yerel Docker ortamını (az önce komutla izin verdiğimiz) seçin.
Artık Hazırsınız!
Bu adımlardan sonra Portainer’ın ana kontrol paneline ulaşacaksınız. Artık sol menüyü kullanarak:
Containers: Çalışan konteynerlerinizi yönetebilirsiniz.
Images: İndirdiğiniz imajları görebilirsiniz.
Volumes: Oluşturduğunuz depolama alanlarını yönetebilirsiniz.
Stacks: Yeni çok-konteynerli uygulamalar kurabilirsiniz.
VDS’de Docker Ortamını Portainer ile Yönetilebilir Hale Getirdim: Karşılaşılan Zorluklar ve Çözümler
Portainer Kurulum Süreci: Docker Konteyneri Olarak Entegrasyon
Docker’ın gücünü web arayüzüyle birleştiren Portainer, konteyner yönetimini inanılmaz derecede kolaylaştırıyor. Kurulum adımları ve kullandığım teknik ortam şu şekildeydi:
Teknik Ortam:
- VDS Özellikleri: 4 çekirdek CPU, 8 GB RAM, 60 GB Disk
- İşletim Sistemi: Ubuntu 22.04 LTS
- SSH İstemcisi: PuTTY
- Docker: Önceden kurulmuş ve çalışır durumda.
- DNS Yönetimi: Cloudflare
- Alan Adı: portainer.umutramazanegi.com
Kurulum Adımları:
- Portainer Veri Birimi Oluşturma: Portainer’ın kalıcı verilerini saklamak için docker volume create portainer_data komutuyla bir Docker volume oluşturdum.
- Portainer Konteynerini Çalıştırma: Konteyneri uygun portları ve volume’ü bağlayarak başlattım:
- docker run -d -p 8000:8000 -p 9443:9443 –name portainer –restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
Kritik Zorluklar ve Kapsamlı Çözümler
Her güzel başlangıçta olduğu gibi, Portainer kurulumunda da bazı teknik engellerle karşılaştım. İşte en önemlileri ve nasıl aştığım:
Zorluk 1: HATA 521 (Web server is down) – Cloudflare ve SSL/TLS Çakışması
Alan adı üzerinden Portainer’a erişmeye çalıştığımda bu hatayla karşılaştım. Sorunun temel nedeni, Cloudflare ile sunucumdaki 9443 numaralı port arasındaki SSL/TLS iletişimindeki tutarsızlıktı.
Çözüm Adımları:
- Sunucu Firewall Kontrolü: UFW’nin pasif olduğunu ve ek bir kısıtlama olmadığını doğruladım.
- Cloudflare SSL/TLS Ayarları: Cloudflare’de SSL/TLS şifreleme modunu “Flexible” yerine “Full (Tam)” olarak güncelleyerek sorunu çözdüm. Bu, Cloudflare’in sunucumla olan iletişiminin uçtan uca şifrelenmesini sağladı.
- HSTS Sorunu: Tarayıcımın HSTS önbelleğinde kalan eski güvenli bağlantı politikaları nedeniyle bağlantı engelleniyordu. Tarayıcımın HSTS önbelleğini temizleyerek (chrome://net-internals/#hsts üzerinden alan adı için politikayı sildim) bu sorunu da aştım.
Zorluk 2: Alan Adı ile Güvenli (HTTPS) Erişim ve Port Yönlendirme
Doğrudan IP adresi ve port (https://<IP>:9443) ile erişim yerine, https://portainer.umutramazanegi.com gibi daha profesyonel bir erişim sağlamak istedim. Portainer’ın kendi sertifikası bu noktada bir köprü görevi görecekti.
Nihai Çözüm: Cloudflare Origin Rule
Bu sorunu çözmek için Cloudflare’de bir Origin Rule oluşturdum. Bu kural, portainer.umutramazanegi.com alan adına gelen tüm isteklerin, sunucumdaki 9443 portuna güvenli bir şekilde yönlendirilmesini sağlıyor. Böylece kullanıcılar artık sadece alan adını yazarak Portainer’a erişebiliyor.
Zorluk 3: Portainer Şifre Sıfırlama Hatası (
Portainer’ın şifresini unuttuğumda veya sıfırlamam gerektiğinde karşılaştığım bu hata, veritabanı erişim sorununu işaret ediyordu.
Çözüm:
Ana Portainer konteynerini geçici olarak durdurdum (docker stop portainer), ardından şifre sıfırlama yardımcı aracını çalıştırarak (docker run –rm -v portainer_data:/data portainer/helper-reset-password) şifreyi sıfırladım ve sonrasında Portainer’ı tekrar başlattım (docker start portainer).
İlk Ayarlar ve Yönetim: Kullanıcılar, Ekipler ve Stack’ler
Portainer’a başarılı bir şekilde eriştikten sonra, ortamı daha kullanışlı hale getirmek için şu adımları attım:
- Yönetici Hesabı Oluşturma: İlk erişimde varsayılan yönetici hesabı için güçlü bir şifre belirledim.
- Ortam Yönetimi: Portainer’ın Docker ortamıma doğru şekilde bağlandığından emin oldum. Yanlışlıkla eklenen yinelenen ortamları temizledim.
- Kullanıcı ve Takım Yapılandırması: developers adında bir takım oluşturdum ve standart kullanıcılar tanımladım. Bu, yetkilendirmeyi daha granüler hale getirdi.
- Stack (Uygulama Yığını) Oluşturma ve Yetkilendirme: Portainer’ın kendi içinde docker-compose.yml dosyalarını kullanarak uygulamaları çalıştırma yeteneği olan Stack’ler oluşturdum. Ardından, Access control ve Authorized teams ayarlarıyla, oluşturduğum developers takımına bu stack’lerin yönetim yetkisini atadım.
Gelecek Adım: Proxy Manager Kurulumu (Nginx Proxy Manager)
Portainer’ın kurulumu ve temel yönetimi tamamlandı. Ancak, VDS sunucumda birden fazla web servisi veya uygulaması barındırmak istediğim için, Nginx Proxy Manager gibi bir Ters Proxy (Proxy Manager) kurma zamanı geldi.
Bu araç sayesinde:
- Farklı alan adlarını (örn. blog.umutramazanegi.com) tek bir IP adresi üzerinden yönetebileceğim.
- Tüm servislere HTTPS üzerinden güvenli erişim sağlayacağım.
- Port yönetimi ve SSL sertifikası entegrasyonunu kolayca yapabileceğim.
Bu konudaki deneyimlerimi de bir sonraki yazımda paylaşacağım.
Sizler de Docker ve Portainer ile çalışırken ne gibi benzersiz zorluklarla karşılaştınız? Özellikle alan adı, proxy ayarları ve erişim kontrolleriyle ilgili aklınızda kalan ipuçları veya deneyimleriniz varsa, lütfen yorumlarda paylaşmanızı rica ederim.