제 블로그 글들을 읽는 모든 독자들을 위한 한마디: 저는 모든게 귀찮은 귀차니즘 max찍은 개발자로서 제가 사용해보고 글을 쓰는 기술들은 "어캐하면 더 쉽게 할수있을까" 와 "어캐 하면 재미있을까" 에서 나오는 글들입니다.
일단 저번 글에서 반말로 모든걸 했더니 기분이 너무 이상해 이번 글에서는 반존대를 할 생각입니다 선배들 설레게하는 반존대의 정석
물론 위 같이 반존대 싫어하시면 죄송합니다. 하지만 어쩔티비
요즘 대부분의 웹사이트는 접속을 하면 http가 아닌 https로 접속을 합니다. 그말은 즉슨 저희가 실서비스를 목표로 프로젝트를 진행하면 https가 되도록 해야된다는 겁니다. Https의 대한 자세한 내용은 벨로그에 넘치고 넘쳤으니 그걸 보러 가시고...
중요한 점은 크롬에서 http를 접속 하려고 하면 아래와 같이 뜬다는 점입니다.
서비스를 접속 하려고 하는데 저런 문구가 어디가 생각나는 빨간색이 보이면 다들 거부감이 들겠죠.
그럼 이걸 해결 하기 위해서는... SSL 인증을 받으면 됩니다.
SSL인증을 받을수있는 방식은 여러가지 방식이 있습니다.,
저는 그 중 직접 리버스 프록시 서버에 적용하는 방식으로 사용했습니다.
내 돈 뜯어가는 악덕 토끼
클라우드 서비스에서 인증서를 받고 그걸 거기서 또 설정하고 등등...을 거치다 보면 다 결국 돈! 입니다.
하지만 이건 회사에서 돈을 주는거도 아니고 프로젝트 정도에서 굳이 돈을 또 쓰기에는 아깝죠.
네 사실 저는 짠돌이 입니다 꼬우면 돈 주던가
그래서 결국 엔진엑스에 Lets Encrypt라는 무료 인증서 생성기를 사용하시는 분들이 많은데... 엔진엑스+Lets Encrypt조합에 문제가 몇가지 있습니다.
젤~~~ 위에 제가 이 글을 쓰는 이유를 적었었죠. 저는 매우 귀차니즘이 심한 개발자입니다.
90일마다 갱신을 하는 작업 자체가 너무 저한테는 어려운 일입니다. 이러면서 매일 게임 출석은 잘 합니다
그래서 나온 결과는: Traefik을 한번 써보자 였습니다.
커여운 울 고퍼짱
물론 단점도 존재하는 Reverse Proxy겸 Load Balancer (사실상 엔진엑스) 이지만 아주 큰 장점이 존재 합니다.
음..?
...
네 바로 저 부분에 제가 꽂혀서 사용했습니다. 이정도면 귀차니즘과 밀당하는 개발자
NGINX 에서 구현할때는 Certbot 으로 인증서 생성하고 그걸 또 엔진엑스에 사용하게 설정 하고 등등... 너무 복잡한 방법과 그걸 또 90일만에 또 갱신 해야되는 점을 없에주는 마법같은 내용이었습니다.
일단 트레픽 컨테이너를 띄웁니다.
traefik:
image: traefik:v2.9
command:
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.swarmMode=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entryPoints.web.http.redirections.entrypoint.scheme=https"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=<인증서 관련되서 알림 받을 이메일>"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--log.level=INFO"
- "--accesslog=true"
- "--api.dashboard=true"
ports:
- target: 443
published: 443
protocol: tcp
mode: host
- target: 8080
published: 8080
protocol: tcp
mode: host
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "traefik-certificates:/letsencrypt"
networks:
- 네트워크
위 같이 만들었으면 이제 https를 설정 해둘 서비스 (장고, 스프링, 등등)에 아래와 같은 labels를 도커 컴포즈에 추가 해주시면 끝납니다.
서비스이름:
image: 이미지
networks:
- 네트워크
deploy:
replicas: 2
labels:
- traefik.enable=true
- traefik.http.services.서비스이름.loadbalancer.server.port=8000
- traefik.http.routers.서비스이름.entrypoints=websecure
- traefik.http.routers.서비스이름.rule=Host(`<도메인 이름>`) && PathPrefix(`/api/v1`)
- traefik.http.routers.서비스이름.middlewares=서비스이름-stripprefix
- traefik.http.middlewares.서비스이름-stripprefix.stripprefix.prefixes=/api/v1
- traefik.http.routers.서비스이름.tls.certresolver=letsencrypt
네 저게 끝입니다. 네?
이제 <내 도메인>/api/v1
으로 들어가면 https로 잘 들어가지는걸 확인 할수있습니다.
그 와 동시에 저는 서비스 replicas:2
를 해놨기 때문에 위 백엔드 서비스가(컨테이너) 2개 생성되는데 트레픽에서 자동으로 두개의 컨테이너를 찾아서 로드 벨런싱을 해줍니다. 자동화 개꿀
트레픽이 생소하신 분들도 있고 엔진엑스로 사용하시는걸 좋아하시는분들도 있으신데 한번쯤 기회가 되면 트레픽을 사용해보는건 어떨까요? 특히 저와 같은 귀차니스트들은 아주 좋을겁니다.
읽어주셔서 감사합니다
개인 프로젝트 매번 인증 갱신하는데... 신박하네요 ㄷㄷ