Skip to content

barisates/traefik-reverse-proxy-for-docker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

traefik-reverse-proxy-for-docker

Traefik'i Docker Container'lar için ters proxy olarak kullanma.

Network

Öncelikle Docker üzerinde Traefik ve uygulama container'larının ortak çalışacağı bir network oluşturuyoruz.

docker network create web

Yeni oluşturduğumuz Docker Network'ümüzü güvenlik duvarı üzerinden yapılandırmamız gerekiyor. Bunun için aşağıdaki adımları takip ediyoruz.

  • Yeni oluşturduğumuz Docker Network'ümüzün VPS üzerindeki Connection DEVICE bilgisine erişmemiz gerekiyor. Docker Network'lerini listeliyoruz.
docker network ls

Buradaki NETWORK_ID bilgisi ile VPS üzerindeki network bağlantılarımızı karşılaştırarak doğru bağlantıya yetkilendirme yapacağız.

  • Daha sonra VPS üzerindeki network bağlantıları listeliyoruz.
nmcli connection show

DEVICE alanındaki değer ile bağlantımıza güvenlik duvarı üzerinden yetkilendirme yapacağız.

  • Firewall üzerinden yeni oluşturduğumuz Docker Network'üne yetki tanımlıyoruz.
firewall-cmd --permanent --zone=trusted --change-interface=br-ff48477ab8a4
firewall-cmd --reload

Traefik

Öncelikle Traefik Dashboard erişim için bir yönetici parolası oluşturacağız. Traefik yapılandırma dosyasında yönetici giriş bilgileri şifreli bir şekilde tutuluyor. Bu bilgileri iki şekilde şifreleyebilirsiniz.

htpasswd kullanarak bilgileri şifreleyebilirsiniz;

Önce htpasswd için gerekli paketleri yüklüyoruz.

sudo apt-get install apache2-utils

Daha sonra htpasswd ile Dashboard için kullanacağımız şifreyi oluşturuyoruz. SECURE_PASSWROD alanına kullanmak istediğini şifrenizi girin.

htpasswd -nb admin SECURE_PASSWROD

Programdan çıktı şu şekilde görünecektir:

admin:$apr1$9r5rUTis$nqG/J4R7365QtB7JBlc2N0
Htpasswd Generator kullanarak bilgileri şifreleyebilirsiniz;

https://hostingcanada.org/htpasswd-generator/ adresi üzerinden Username ve Password alanlarını doldurduktan sonra Mode alanını *Apache specific salted MD5 (insecure but common) seçerek şifrenizi oluşturabilirsiniz.

Traefik Yapılandırma Dosyası

Traefik Dashboard şifremizi hazırlıladıktan sonra traefik.toml dosyamızı hazırlıyoruz. Ben repo içerisine örnek bir dosya bıraktım.

Yapılandırma dosyamız aşağıdaki gibi görünecek;

defaultEntryPoints = ["http", "https"]

[entryPoints]
  [entryPoints.dashboard]
    address = ":8080"
    [entryPoints.dashboard.auth]
      [entryPoints.dashboard.auth.basic]
        users = ["admin:YOUR_SECURE_PASSWORD"]
  [entryPoints.http]
    address = ":80"
      [entryPoints.http.redirect]
        entryPoint = "https"
  [entryPoints.https]
    address = ":443"
      [entryPoints.https.tls]
      [[entryPoints.https.tls.certificates]]
      certFile = "certs/yourdomain.com.crt"
      keyFile = "certs/yourdomain.com.key"

[api]
entrypoint="dashboard"

[docker]
domain = "yourdomain.com"
watch = true
network = "web"
  • Traefik'i bütün istekleri https üzerine yönlendireck şekilde yapılandırıyoruz.
  • Yayın yapacağımız adresimizin sertifika dosyasını örnekteki gibi .key ve .crt olarak tanımlıyoruz. (Sertifika dosyamızı .key ve .crt olarak nasıl ayıracağımızı bu repoda anlattım; https://github.com/barisates/docker-registry-server#ssl-certificate)
  • Bir önceki adımda oluşturduğumu şifremiz YOUR_SECURE_PASSWORD kısmına gelecek.

Traefik Konteynırımızı Çalıştırıyoruz

Öncelikle Traefik için bir docker-compose dosyası hazırlıyoruz. Ben repo içerisine örnek bir dosya bıraktım, içerik aşağıdaki gibi görünüyor;

version: "3"
services:
  traefik:
    network_mode: web
    container_name: traefik
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./certs:/certs
    ports:
      - 80:80
      - 443:443
    labels:
      - traefik.frontend.rule=Host:monitor.yourdomain.com
      - traefik.port=8080
    image: traefik:1.7.2-alpine

Daha sonra root klasörüne gidiyoruz. Yapılandırma dosyamızı (traefik.toml), docker-compose ve sertifika dosyalarımızı bu dizine kopyalıyoruz. root klasörümüz aşağıdaki gibi görünecektir.

root
│   traefik.toml
│   docker-compose.yml 
└───certs
     │   yourdomain.com.crt
     │   yourdomain.com.key

Şimdi Treafik konteynırımızı çalıştırabiliriz;

docker-compose up -d

Docker komutları ile Traefik konteynırınızı başlatmak için;

docker run -d \
  --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $PWD/traefik.toml:/traefik.toml \
  -v $PWD/certs:/certs \
  -p 80:80 \
  -p 443:443 \
  -l traefik.frontend.rule=Host:monitor.yourdomain.com \
  -l traefik.port=8080 \
  --network web \
  --name traefik \
  traefik:1.7.2-alpine

Artık aynı VPS üzerinde çalışan Docker konteynırlarınızı, SSL desteği ile birlikte barındırabilirsiniz. Örnek olarak bir uygulamayı yayına alalım;

version: "3"

services:
  your-project-name:
    image: registry.yourdomain.com/your-project:latest
    network_mode: web
    container_name: your-project-name
    restart: always
    labels:
      - traefik.backend=your-project-name
      - traefik.frontend.rule=Host:api.yourdomain.com
      - traefik.docker.network=web
      - traefik.port=80

Yukarıdaki şekilde bir ayarlama ile uygulamalarınızı Traefik ile yayına alabilirsiniz.

About

Using Traefik as a reverse proxy to host Docker Containers.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published