Menu

메모용 개발 블로그

전체보기 > 기타 >

개인 서버 Traefik으로 전환 소감

2023-10-18 16:23:35

도입 계기

기존 개인 서버에서는 Nginx를 이용하여 리버스 프록시를 사용하고 있었습니다.

그런데 우연하게 Traefik이라는 프로젝트를 알게되었고 모든 문서를 읽지는 않았지만 일단 본 기능만으로도 충분히 매력적이었고 기존의 불편함을 개선 가능하다고 생각하였습니다.

우선은 제가 느낀 매력은 아래와 같으며, 너무 규모가 큰 서비스가 아니거나 저 처럼 컨테이너 위주로 서비스를 구축한 홈 서버 혹은 적은 규모의 서비스에서 상당히 유용한 프로젝트라고 생각하였습니다.

도입 후 만족하는 이유

1. 도커 친화적

Traefik은 다양한 환경을 지원하는데. 이 중 도커 역시 지원합니다.

컨테이너를 생성 할 때 label에 웹 설정을 붙여주는 것으로 Traefik은 알아서 도커 컨테이너의 변화를 추적하여 설정을 반영합니다.

이게 상당히 매력적인 점이 기존에 Nginx를 사용하면서 새로운 서비스를 만들 때마다 Nginx를 설정파일을 생성하고 Nginx 문법 검사 한번 쳐 주고 Nginx 재시작을 해줘서 반영을 하는 방식이였는데.

이건 설정파일이 도커 명령어 혹은 docker-compose 파일에 동봉되어 있다보니 관리가 같이 들어가므로 너무 편했습니다.

2. 편리한 인증서 관리

기존에 certbot을 이용해서 인증서를 관리하여 왔습니다.

갱신이야 renew를 주기적으로 돌아가도록 cron에 예약걸어주면 되는 것이라 문제는 없었지만

새로운 서비스를 사용할 때. 매번 명령어도 실행해주고 Nginx에서 인증을 제대로 할 수 있도록 추가 설정도 해줘야하고 Nginx도 재시작해줘야하는 것을 생각하면 상당한 불편함이였는데.

Traefik은 내장되어서 정말 설정 몇 줄로 자동으로 동작합니다.

제가 해줘야 할 일은 첫 Traefik 구축 시 아래 세 줄

- "--certificatesresolvers.resolver.acme.email=이메일"
- "--certificatesresolvers.resolver.acme.storage=acme.json"
- "--certificatesresolvers.resolver.acme.httpchallenge.entrypoint=web"

서비스 당 아래 세 줄

- traefik.http.routers.api.tls=true
- traefik.http.routers.api.tls.certresolver=resolver
- traefik.http.routers.api.entrypoints=websecure

이거면 그냥 컨테이너만 실행하면 알아서 인증서 받고 https로 동작합니다.

3. 간단한 서비스 추가

임시 혹은 리뷰앱 목적으로 간단하게 서비스를 추가한다면 Traefik은 그냥 구축해놓고 명령어 하나 CI/CD 동작 중에 실행만 시켜주면 그만입니다.

sudo docker run \
    --network=net0\
    -l 'traefik.http.routers.[동적 생성 값].rule=Host(`[동적 생성 값].lazyig.com`)'\
    -l 'traefik.http.routers.[동적 생성 값].tls=true'\
    -l 'traefik.http.routers.[동적 생성 값].tls.certresolver=[인증서 설정]'\
    -l 'traefik.http.routers.[동적 생성 값].entrypoints=websecure'\
    traefik/whoami

그냥 잘 구축된 Traefik에 이런식으로 한번만 딱 실행해주면 알아서 인증서받고 알아서 리버스 프록시도 잘 됩니다.

docker-compose도 당연히 명령어와 큰 차이가 없으므로 몹시 간단하게 서비스가 추가 가능 합니다.

4. 잘 정리된 공식 문서

사용법 자체도 간편한 것도 있지만 공식 문서의 가이드가 잘되어 있다.

https://doc.traefik.io/traefik/

각 옵션 항목 마다 toml, yaml, cli로 어떻게 적용하는지 복붙으로 다 해먹을 수 있도록 친절하게 설명해놓았다.

5. 대시보드

image-20231019011752085

깔끔한 대시보드가 내장되어 있습니다.

간단하게 서비스 상태를 볼 수 있어서 의외로 만족합니다

단점

1. 성능

Nginx에 비해서 밀린다.

아무래도 Nginx는 C로 작성했고 Traefik은 Go로 작성했으므로 구글링에서 퍼포먼스 비교 벤치마크를 보면 Nginx에 비해서 처리 가능한 요청수가 밀린다.

이러한 부분이 민감하면 아쉬운 선택일 수 있다.

2. 비교적 적은 사용자 수

물론 traefik에 관심을 가지는 사람이 많다는 것은 스타수로도 확인이 가능하지만, 그래도 누적되온 자료와 사용량은 nginx가 더 많다.

후기

변경하고 매우 만족스럽습니다.

전보다 설정이 간편해지니까. 너무나 좋습니다.

물론 사용하면서 세세한 문제가 있다면 해결해나가야겠지만 현재로는 기존에 사용하던 것 모두 잘 동작합니다.