Traefik'i Docker Container'lar için ters proxy olarak kullanma.
Ö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
Ö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.
Önce htpasswd için gerekli paketleri yüklüyoruz.
sudo apt-get install apache2-utilsDaha 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_PASSWRODProgramdan çıktı şu şekilde görünecektir:
admin:$apr1$9r5rUTis$nqG/J4R7365QtB7JBlc2N0https://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 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
.keyve.crtolarak tanımlıyoruz. (Sertifika dosyamızı.keyve.crtolarak 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_PASSWORDkısmına gelecek.
Ö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-alpineDaha 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 -dDocker 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-alpineArtı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=80Yukarıdaki şekilde bir ayarlama ile uygulamalarınızı Traefik ile yayına alabilirsiniz.

