현재 서버에서 12000, 12001, 12002, 12003포트로 서비스 하고 있는 것을 HTTP는 80, HTTPS는 443 단일 포인트로 서비스하도록 변경. 각 docker는 하위 주소로 접속하면 traefik에서 라우팅하게 만든다.

목표

  1. game docker에서 docker compose로 같이 올리던 traefik을 별도의 docker compose로 분리한다.
  2. 분리해서 올린 docker에서 traefik을 export해서 다른 docker에서 사용
  3. game, admin, service, companion에서 별도의 traefik 설정을 추가해서 traefik 한 곳에서 관리하게 한다.

현재 상황

접속 포트는 80으로 동일하게 설정

Traefik을 올리기 위한 docker compose 설정

# 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

개별 서비스에서의 docker compose 설정