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.
- sudo apt-get remove docker docker-engine docker.io containerd runc
- sudo apt-get update
- sudo apt-get install \
- 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
- echo \
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
- 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:
- Traefik konfigürasyon dosyaları
- Bu dosya tüm sertifikaları saklamak için kullanılır
- Traefik için konfigürasyon dosyası
- Portainer konfigürasyon dosyaları
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.