Portainer Nedir?

Portainer, Docker ortamlarını kolayca oluşturmanıza, yönetmenize ve bakımını yapmanıza olanak tanıyan güçlü, açık kaynaklı bir konteynır yönetim platformudur. Aşağıda portainer mimarisi görülmektedir. 


Traefik Nedir?

Traefik, HTTP ve TCP tabanlı uygulamalar için kolay, dinamik, otomatik ve hızlı bir açık kaynaklı reverse proxy ve yük dengeleyicidir(load balancer).

Traefik ve konteynır çalışma prensibi aşağıda görülmektedir;


Portainer kurulumuna başlamadan önce docker kurulumu yapılmalıdır. 


Ubuntu Üzerinde Docker Engine Kurulumu

Aşağıdaki komutları terminal üzerinde sırasıyla çalıştırın.

Sisteminizde hali hazırda önceden kurulmuş docker’ın eski versiyonları mevcut ise bunları kaldırmak için aşağıdaki komutu çalıştırın. İlk defa docker kurulumu için bu komutu çalıştırmaya gerek yoktur.
  • sudo apt-get remove docker docker-engine docker.io containerd runc
Gerekli apt paket yüklemelerini yapın;

  • sudo apt-get update
  • sudo apt-get install \
  ca-certificates \
  curl \
  gnupg \
  lsb-release

Docker'ın resmi GPG anahtarını ekleyin;

  • sudo mkdir -m 0755 -p /etc/apt/keyrings
  • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
İlgili repository için ayarlama yapın;
  • echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Apt paketlerini güncelleyin ve Docker engine,containerd ve docker compose için en son sürümleri kurun;

  • sudo apt-get update
  • sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Yeni bir konteynır oluşturarak kurulumun başarılı bir şekilde yapıldığını teyit edin. Bu komut bir test image’ı indirir ve onu bir konteynırda çalıştırır. Konteyner çalıştığında, bir onay mesajı yazdırır ve çıkar.
  • sudo docker run hello-world


Traefik ve Portainer Kurulumu 

Aşağıdakine benzer bir yapıda filesystem oluşturun;

  • Docker ile ilgili tüm şeylerin saklanacağı ana dizin:

/home/ubuntu/docker

  • Traefik ve Portainer için docker-compose içeren çekirdek dizin:
/home/ubuntu/docker/core
/home/ubuntu/docker/core/docker-compose.yml

  • Traefik konfigürasyon dosyaları
/home/ubuntu/docker/core/traefik-data

  • Bu dosya tüm sertifikaları saklamak için kullanılır
/home/ubuntu/docker/core/traefik-data/acme.json

  • Traefik için konfigürasyon dosyası
/home/ubuntu/docker/core/traefik-data/traefik.yml

  • Portainer konfigürasyon dosyaları
/home/ubuntu/docker/core/portainer-data


Dosyaları oluşturmak için aşağıdaki komutları terminalde sırayla çalıştırın;

  • mkdir -p /home/ubuntu/docker/core/traefik-data
  • mkdir -p /home/ubuntu/docker/core/portainer-data
  • touch /home/ubuntu/docker/core/traefik-data/acme.json
  • chmod 600 /home/ubuntu/docker/core/traefik-data/acme.json
  • touch /home/ubuntu/docker/core/traefik-data/traefik.yml

traefik.yml dosyasını açın ve aşağıdaki gibi düzenleyin. email@example.com yerine mail adresinizi yazın

api:

  dashboard: true


entryPoints:

  http:

    address: ":80"

  https:

    address: ":443"


providers:

  docker:

    endpoint: "unix:///var/run/docker.sock"

    exposedByDefault: false


certificatesResolvers:

  http:

    acme:

      email: email@example.com

      storage: acme.json

      httpChallenge:

        entryPoint: http


Traefik erişimi için güvenli bir şifre oluşturun. Bunun için önce htpasswd paketini yükleyerek aşağıdaki komutları sırasıyla çalıştırın; 

  • sudo apt install apache2-utils
  • echo $(htpasswd -nb ) | sed -e s/\\$/\\$\\$/g

Bir docker Proxy network oluşturun;

  • docker network create traefik-proxy

docker-compose.yml dosyasını aşağıdaki gibi düzenleyin;


version: '3'


services:

  traefik:

    image: traefik:v2.2

    container_name: traefik

    restart: unless-stopped

    security_opt:

      - no-new-privileges:true

    networks:

      - traefik-proxy

    ports:

      - 80:80

      - 443:443

    volumes:

      - /etc/localtime:/etc/localtime:ro

      - /var/run/docker.sock:/var/run/docker.sock:ro

      - ./traefik-data/traefik.yml:/traefik.yml:ro

      - ./traefik-data/acme.json:/acme.json

    labels:

      - "traefik.enable=true"

      - "traefik.http.routers.traefik.entrypoints=http"

      - "traefik.http.routers.traefik.rule=Host(`traefik.example.com`)"

      - "traefik.http.middlewares.traefik-auth.basicauth.users=username:password"

      - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"

      - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"

      - "traefik.http.routers.traefik-secure.entrypoints=https"

      - "traefik.http.routers.traefik-secure.rule=Host(`traefik.example.com`)"

      - "traefik.http.routers.traefik-secure.middlewares=traefik-auth"

      - "traefik.http.routers.traefik-secure.tls=true"

      - "traefik.http.routers.traefik-secure.tls.certresolver=http"

      - "traefik.http.routers.traefik-secure.service=api@internal"


  portainer:

    image: portainer/portainer:latest

    container_name: portainer

    restart: unless-stopped

    security_opt:

      - no-new-privileges:true

    networks:

      - traefik-proxy

    volumes:

      - /etc/localtime:/etc/localtime:ro

      - /var/run/docker.sock:/var/run/docker.sock:ro

      - ./portainer-data:/data

    labels:

      - "traefik.enable=true"

      - "traefik.http.routers.portainer.entrypoints=http"

      - "traefik.http.routers.portainer.rule=Host(`portainer.example.com`)"

      - "traefik.http.middlewares.portainer-https-redirect.redirectscheme.scheme=https"

      - "traefik.http.routers.portainer.middlewares=portainer-https-redirect"

      - "traefik.http.routers.portainer-secure.entrypoints=https"

      - "traefik.http.routers.portainer-secure.rule=Host(`portainer.example.com`)"

      - "traefik.http.routers.portainer-secure.tls=true"

      - "traefik.http.routers.portainer-secure.tls.certresolver=http"

      - "traefik.http.routers.portainer-secure.service=portainer"

      - "traefik.http.services.portainer.loadbalancer.server.port=9000"

      - "traefik.docker.network=traefik-proxy"


networks:

  traefik-proxy:

    external: true


Son olarak aşağıdaki komutu çalıştırarak konteynırları ayağa kaldırın;

  • docker-compose up -d

Tarayıcınızdan https://portainer.example.com adresine giderek portainer arayüzüne erişim sağlayabilirsiniz. Çıkan ekranda kullanıcı adı ve şifre oluşturduktan sonra sistem kullanıma hazır hale gelecektir.

Geri Bildirim

Bu içeriği faydalı buldunuz mu?