Konfigurasi Portainer Dan Traefik Menggunakan Docker Compose
Pada artikel sebelumnya kita sudah menggunakan docker-compose
untuk menjalankan portainer. Tapi port yang digunakan masih default 9000
dan belum menggunakan https
. Kali ini kita akan menggunakan Traefik
sebagai reverse proxy untuk redirect traffic dari/ke luar menuju ke portainer sehingga port yang terbuka hanya 80 (http) dan 443 (https).
Daftar Isi:
Prasyarat:
- Docker Engine & Docker Compose
- Domain/sub domain yang sudah disiapkan
Buat File docker-compose.yml
untuk Traefik
Untuk mempermudah kelola foldernya, kita buat file docker-compose.yml
terpisah antara Traefik dan Portainer.
mkdir traefik
cd traefik/
touch docker-compose.yml
nano docker-compose.yml
Isikan kode berikut pada docker-compose.yml
yang ada didalam folder traefik
version: '3.8'
networks:
routing:
driver: bridge
services:
traefik:
image: traefik:2.9.1
restart: always
container_name: reverse_proxy_traefik
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./configs/traefik.yml:/etc/traefik/traefik.yml
- ./configs/dynamic:/etc/traefik/dynamic
- ./certificates/acme.json:/etc/traefik/acme/acme.json
networks:
- routing
Buat File acme.json
mkdir certificates
touch certificates/acme.json
chmod 600 certificates/acme.json
Buat File traefik.yml
mkdir configs
nano configs/traefik.yml
Isikan file traefik.yml
dengan kode dibawah ini.
## static configuration
global:
# Send anonymous usage data
sendAnonymousUsage: false
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
file:
directory: /etc/traefik/dynamic
watch: true
certificatesResolvers:
letsencrypt:
acme:
tlschallenge: true
httpchallenge:
entrypoint: web
email: alamat@email.com
storage: /etc/traefik/acme/acme.json
log:
level: ERROR
sesuaikan alamat@email.com
dengan email anda, untuk verifikasi ssl let’s encrypt.
Buat File global-middlewares.yml
dan tls.yml
mkdir configs/dynamic
touch configs/dynamic/global-middlewares.yml
touch configs/dynamic/tls.yml
untuk file global-middlewares.yml
isikan berikut
http:
middlewares:
redirect-to-https:
redirectScheme:
scheme: https
permanent: true
hsts-minimal:
headers:
stsSeconds: 31536000
stsIncludeSubdomains: false
stsPreload: false
forceSTSHeader: true
hsts-standard:
headers:
stsSeconds: 31536000
stsIncludeSubdomains: true
stsPreload: false
forceSTSHeader: true
hsts-full:
headers:
stsSeconds: 31536000
stsIncludeSubdomains: true
stsPreload: true
forceSTSHeader: true
sedangkan untuk tls.yml
isikan berikut
tls:
options:
default:
minVersion: VersionTLS12
mintls13:
minVersion: VersionTLS13
Jalankan traefik terlebih dahulu
docker-compose up -d
Buat File docker-compose.yml
untuk Portainer
Setelah Traefik jalan, lanjutkan dengan portainer.
cd ~
mkdir portainer
touch portainer/docker-compose.yml
isikan kode berikut
version: "3.3"
services:
portainer:
container_name: portainer
image: portainer/portainer-ce:2.16.0
command: -H unix:///var/run/docker.sock
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik_webgateway"
# https
- "traefik.http.routers.portainer.rule=Host(`portainer.contoh.com`)"
- "traefik.http.routers.portainer.tls=true"
- "traefik.http.routers.portainer.tls.certresolver=letsencrypt"
- "traefik.http.routers.portainer.entrypoints=websecure"
# http (redirect to https)
- "traefik.http.routers.portainer-http.rule=Host(`portainer.contoh.com`)"
- "traefik.http.routers.portainer-http.entrypoints=web"
- "traefik.http.routers.portainer-http.middlewares=redirect-to-https@file"
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
networks:
- routing
volumes:
portainer_data:
external: true
Sesuaikan domain portainer.contoh.com
dengan domain yang sudah kita siapkan. Jangan lupa untuk create volume terlebih dahulu
docker volume create --name=portainer_data
Setelah semua selesai, jalankan docker-compose.yml
pada portainer
Sharing is caring!