현재 서버에서 12000, 12001, 12002, 12003포트로 서비스 하고 있는 것을 HTTP는 80, HTTPS는 443 단일 포인트로 서비스하도록 변경. 각 docker는 하위 주소로 접속하면 traefik에서 라우팅하게 만든다.
접속 포트는 80으로 동일하게 설정
# traefik-docker-compose.yml
version: '3.5'
services:
proxy:
image: traefik:v2.5
container_name: proxy
ports:
- "80:80"
- "443:443"
- "8000:8000" # 대시보드용 포트
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./acme.json:/acme.json
- ./traefik-users.htpasswd:/traefik-users.htpasswd
command:
- "--api.dashboard=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.dashboard.address=:8000" # 대시보드 전용 엔트리포인트
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
- "--certificatesresolvers.myresolver.acme.email=${EMAIL}"
- "--certificatesresolvers.myresolver.acme.storage=/acme.json"
- "--log.level=INFO"
labels:
- "traefik.enable=true"
# 대시보드 라우터 설정
- "traefik.http.routers.dashboard.rule=Host(`${SERVER_IP}`)"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.entrypoints=dashboard"
- "traefik.http.routers.dashboard.tls=true"
- "traefik.http.routers.dashboard.tls.certresolver=myresolver"
# 기본 인증 미들웨어 설정
- "traefik.http.routers.dashboard.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.usersfile=/traefik-users.htpasswd"
# 대시보드 서비스 포트 설정
- "traefik.http.services.dashboard.loadbalancer.server.port=8000"
networks:
- traefik-public
restart: always
environment:
- SERVER_IP=${SERVER_IP}
networks:
traefik-public:
name: traefik-public
driver: bridge