CLIEN

본문 바로가기 메뉴 바로가기 보기설정 테마설정
톺아보기 공감글
커뮤니티 커뮤니티전체 C 모두의광장 F 모두의공원 I 사진게시판 Q 아무거나질문 D 정보와자료 N 새로운소식 T 유용한사이트 P 자료실 E 강좌/사용기 L 팁과강좌 U 사용기 · 체험단사용기 W 사고팔고 J 알뜰구매 S 회원중고장터 B 직접홍보 · 보험상담실 H 클리앙홈
소모임 소모임전체 ·굴러간당 ·주식한당 ·아이포니앙 ·MaClien ·일본산당 ·방탄소년당 ·자전거당 ·개발한당 ·소시당 ·이륜차당 ·안드로메당 ·나스당 ·걸그룹당 ·영화본당 ·골프당 ·가상화폐당 ·클다방 ·AI당 ·육아당 ·사과시계당 ·디아블로당 ·패스오브엑자일당 ·리눅서당 ·IoT당 ·젬워한당 ·노젓는당 ·창업한당 ·소셜게임한당 ·노키앙 ·축구당 ·윈폰이당 ·여행을떠난당 ·바다건너당 ·물고기당 ·라즈베리파이당 ·캠핑간당 ·패셔니앙 ·3D메이킹 ·X세대당 ·ADHD당 ·AI그림당 ·날아간당 ·배드민턴당 ·야구당 ·농구당 ·블랙베리당 ·곰돌이당 ·비어있당 ·FM당구당 ·블록체인당 ·보드게임당 ·활자중독당 ·볼링친당 ·냐옹이당 ·문명하셨당 ·클래시앙 ·콘솔한당 ·요리한당 ·쿠키런당 ·대구당 ·DANGER당 ·뚝딱뚝당 ·개판이당 ·동숲한당 ·날아올랑 ·전기자전거당 ·e북본당 ·갖고다닌당 ·이브한당 ·도시어부당 ·FM한당 ·맛있겠당 ·포뮬러당 ·안경쓴당 ·차턴당 ·총쏜당 ·땀흘린당 ·하스스톤한당 ·히어로즈한당 ·인스타한당 ·KARA당 ·키보드당 ·꼬들한당 ·덕질한당 ·어학당 ·가죽당 ·레고당 ·LOLien ·Mabinogien ·임시소모임 ·미드당 ·밀리터리당 ·땅판당 ·헌팅한당 ·오른당 ·MTG한당 ·소리당 ·적는당 ·방송한당 ·PC튜닝한당 ·찰칵찍당 ·그림그린당 ·소풍간당 ·심는당 ·품앱이당 ·리듬탄당 ·달린당 ·Sea마당 ·SimSim하당 ·심야식당 ·윈태블릿당 ·미끄러진당 ·나혼자산당 ·스타한당 ·스팀한당 ·파도탄당 ·퐁당퐁당 ·테니스친당 ·테스트당 ·빨콩이당 ·공대시계당 ·터치패드당 ·트윗당 ·VR당 ·시계찬당 ·WebOs당 ·위스키당 ·와인마신당 ·WOW당
임시소모임
고객지원
  • 게시물 삭제 요청
  • 불법촬영물등 신고
  • 쪽지 신고
  • 닉네임 신고
  • 제보 및 기타 제안
© CLIEN.NET
공지[점검] 잠시후 서비스 점검을 위해 약 30분간 접속이 차단됩니다. (금일 18:15 ~ 18:45)

나스당

강좌 traefik 설정 1. docker-traefik 올리기 14

8
2020-07-28 08:59:44 175.♡.190.135
이치로


소개

클라우드(docker, kubernetes 등)에 특화된 golang 기반의 reverse proxy 앱입니다. 설정을 raw text로 관리하는 것을 선호하는 편이고(nginx proxy manager는 sqlite db를 사용하죠) docker를 즐겨 사용하는 제 환경에 이점이 많아서 기존에 사용하던 앱 https://github.co/SteveLTN/https-portal 에서 넘어온지 꽤 되었습니다. 이미 여기서만 소개가 두어번 된 적이 있으니 자세한건 검색해보세요.



들어가기 전에

- 시놀로지 DSM 6.2.3의 docker 가정 (아무래도 특수한 경우에도 가능하면 일반적인 경우 응용이 쉽겠죠)

- /volume1/docker 경로에 모든 파일을 저장한다고 가정 (도커 패키지를 /volume2에 설치했다면 알아서...)

- docker-compose로 설명 (앞으로 도커를 계속 쓸것 같다 싶으면 지금이라도 배워두는 것을 추천합니다)

- lets encrypt 인증서를 입힐 수 있는 도메인이 필요

- 모든 연결이 https를 사용

- GUI가 아닌 쉘에서 진행



준비

docker-compose.yml

먼저 링크의 내용을 /volume1/docker/docker-compose.yml에 저장합니다. 이미 있으면 추가합니다.

https://pastebin.com/M3H9j9FL

주석을 달아놓았으니 읽어보세요.


.env 파일

docker-compose.yml에 환경변수로 대체 해놓은 것들이 있습니다. 이걸 지정해줍시다.


파일이 없으면 touch /volume1/docker/.env로 파일을 만들고 편집기로 열어서 아래 항목을 추가합니다.

# PATH
DOCKER_ROOT=/volume1/docker

# TRAEFIK
TRF_DOMAIN=dsm.mydomain.com
TRF_LE_EMAIL=example@gmail.com

우분투나 다른 시스템에서는 docker root가 /volume1/docker가 아닐 수 있기 때문에 다른데 적용할때는 저 경로만 고쳐주면 되므로 편합니다. TRF_DOMAIN은 traefik dashboard가 올라가는 대표 도메인이고 추가 도메인은 나중에 설명하겠습니다. TRF_LE_EMAIL은 lets encrypt 인증에 필요한 email 주소입니다. 쓰던 분들은 쓰던게 있겠죠? 그거 입력하시면 됩니다.


traefik 관련 파일/폴더

아직 바로 올리지는 말고 traefik 관련 파일들이 저장되는 폴더/파일을 준비합니다.


쉘에서 traefik 폴더를 만듭니다.

mkdir /volume1/docker/traefik 


acme 인증서 키가 저장되는 json파일을 생성해야 하는데 권한이 까다로우니 빈파일을 먼저 만들고, chmod로 권한을 주면 됩니다.

touch /volume1/docker/traefik/acme.json
chmod 600 /volume1/docker/traefik/acme.json


docker-compose.yml을 보면 traefik.log 파일과 rules 폴더도 볼륨매핑해줄거라서 없으면 에러가 날테니 만들어줍니다.

touch /volume1/docker/traefik/traefik.log
mkdir /volume1/docker/traefik/rules


이제 docker 폴더로 가서 리스트 명령어를 쳐보면

cd /volume1/docker
ls -al

아래 항목들이 있어야 합니다.

docker-compose.yml
.env
traefik/rules
traefik/acme.json
traefik/traefik.log



traefik 서비스 올리기

이제 현재 위치가 /volume1/docker인지 확인하고 (pwd 명령어로 확인 가능)

docker-compose up -d traefik

으로 서비스를 올려봅니다. 명령어 실행 위치가 중요한 이유는 명령어 실행경로에 있는 .env 파일만 적용되기 때문입니다.


docker-compose logs traefik

으로 로그 확인해봅니다. 


딱히 에러는 없겠지만 위에 적은 docker-compose.yml을 그대로 적용했다면 lets encrypt가 production이 아닌 staging (테스트 용도) 서버로 적용되어 있기 때문에 잘 되는 것을 확인했으면 그 줄을 주석처리하고 저장한 다음 다시

docker-compose up -d traefik

하면 됩니다.


이제 아까 TRF_DOMAIN에 설정했던 도메인에 /traefik을 붙여서 브라우저로 접속하면 대시보드가 뜹니다. 저는 서브도메인을 안 좋아해서 서브패스로 대부분 서비스를 올립니다. 그래서 이 글에서는 dsm.mydomain.com/traefik으로 접속되도록 했지만 traefik.mydomain.com으로 하고 싶으시면 나중에 응용해서 하셔도 됩니다.



traefik 라우팅 이해하기

대시보드에 HTTP 항목을 살펴보면 지금 2개가 보일겁니다. 하나는 모든 http 요청을 https로 돌려주는 것. 그러므로 이제부터 모든 요청은 https :443으로 들어올겁니다. 여기는 tls (인증서) 적용이 필요 없죠. 그리고 두번째는 api를 이용한 대시보드로의 라우팅. 이걸 눌러서 들어가봅시다.


잘못된 형식의 이미지 링크입니다.


요청을 처리하는 과정 및 단계가 다이어그램으로 설명되어 있습니다.


일단 :443포트로 들어오는 요청에 대해서 traefik-rtr이라는 이름의 라우팅 룰을 적용합니다. 룰은 왼쪽 아래에 자세히 나와있는데 호스트명이 dsm.mydomain.com이고 path가 /traefik이나 /api로 시작하는 모든 요청에 대해서... 라는 뜻입니다. 여기에 leresolver라는 인증서 처리자가 인증서도 입히고 api@internal이라는 서비스로 최종 연결하는데, 그 사이에 미들웨어가 이름에 걸맞게 중간에 껴들어 이것저것 처리를 합니다. 여기서는 traefik-stripprefix라는 이름의 미들웨어를 적용하는데 요청에서 /traefik을 달고 들어오면 이 prefix 떼고 최종 서비스에 전달하는겁니다.


위에서 설명한 모든 설정은 docker-compose.yml의 traefik에 command와 labels을 살펴보시면 됩니다.


다음 글에서는 middleware를 몇 개 더 적용해 볼게요.



참고한 글

https://github.com/htpcBeginner/docker-traefik


이치로 님의 게시글 댓글
SIGNATURE
회원가입일 : 2004-08-24
쪽지는 바로바로 확인 못합니다.
 :)
서명 더 보기 서명 가리기
  • 주소복사
  • Facebook
  • X(Twitter)
댓글 • [14]
우정
IP 125.♡.166.136
07-28 2020-07-28 09:07:49
·
어마어마한 정성글이군요! 감사합니다.
삭제 되었습니다.
병따개님
IP 211.♡.80.1
07-28 2020-07-28 19:19:27
·
감사합니다~
기본적인 리버스 프록시기능만 사용하고 있었는데 덕분에 미들웨어도 적용해봐요.
근데 똑같이 사용해 보려고하니 안되는 것들이 있어서 저는 수정을 좀 해야 제대로 되네요 ㅠㅠ
이치로
IP 175.♡.190.135
07-29 2020-07-29 00:11:53
·
@병따개님님 보안을 위한 headers를 잘 맞춰줘야 하는것 같습니다. 저도 하다보니 문제 있는게 있네요;
병따개님
IP 211.♡.80.1
07-29 2020-07-29 18:42:57
·
@이치로님
headers쪽은 뭐가 뭔지 몰라서 그냥 그대로 적용했습니다. ㅠㅠ

networks: - backend 만 추가하니 에러가 나서 따로 external: 도 추가해줘야 되더라구요.
설정들을 기존에 yml로 구성을 해놔서 yml로 바꿔가며 하려니 수정을 해야 됐어요 ㅎㅎ

미들웨어쪽 보다보니 구글auth도 사용 가능하던데 이거는 해보려는데 쉽게 되지 않네요.
이치로
IP 175.♡.190.135
07-29 2020-07-29 23:10:33 / 수정일: 2020-07-29 23:40:18
·
@병따개님님 forward auth 같은거 저도 해보고 싶었죠. 성공하시면 팁으로 올려주세요. 참고한 글에서는 auth를 관장해주는 authelia인가? 하는 앱으로 보내서 처리하는것 같더군요.
올드보이
IP 218.♡.242.151
07-29 2020-07-29 23:12:15 / 수정일: 2020-07-29 23:13:28
·
주말에 traefik 설정으로 보냈네요 ㅎ 자세한 내용 감사합니다. 저는 https://www.smarthomebeginner.com/synology-docker-media-server/ 에서도 도움을 많이 받았습니다. Google OAuth 는 따라 해보면 바로 적용 되는 군요.
이치로
IP 175.♡.190.135
07-29 2020-07-29 23:40:51
·
@올드보이님 제가 참고한 사이트와 같네요. 거기서 쓰는 github 저장소가 제가 링크한 곳입니다.
그럴수도있구나
IP 183.♡.135.240
07-30 2020-07-30 05:57:40
·
xxx.duckdns.org 사용중이고, 기존에 letsencrypt 인증서를 받아두지 않았다면
traefik 설치시에 자동으로 인증서가 받아지고 갱신되는 건가요?
아니면 linuxserver/letsencrypt 와 같은 이미지로 따로 인증서를 받아두어야하나요??
이치로
IP 175.♡.190.135
07-30 2020-07-30 07:58:44 / 수정일: 2020-07-30 09:42:59
·
딕디구리님// 새로받습니다. "아니면 linuxserver/letsencrypt 와 같은 이미지로 따로 인증서를 받아두어야하나요?? " 추가의 인증서 관리자가 필요 없습니다.
우라지라
IP 183.♡.64.228
08-01 2020-08-01 21:42:28
·
좋은 정보 감사드립니다. 시도중 Unable to obtain ACME certificate for domains 에러로 인증서를 생성 못하는것 같은데 혹시 이유를 알수 있을까요?
이치로
IP 110.♡.47.140
08-01 2020-08-01 23:49:03
·
@우라지라님 80번 포트가 전달이 안된다거나... 로그를 한번 보셔야할것같네요.
쌩크
IP 59.♡.187.130
10-07 2022-10-07 10:38:42
·
아... 네트웍 추가중에 에러 나는것 같은데.. 머릿속이 복잡하네요.

Creating network "frontend" with driver "bridge"
ERROR: Failed to program FILTER chain: iptables failed: iptables --wait -I FORWARD -o br-284cb99e1938 -j DOCKER: iptables v1.8.7 (nf_tables): RULE_INSERT failed (Invalid argument): rule in chain FORWARD
(exit status 4)
쌩크
IP 59.♡.187.130
10-07 2022-10-07 10:46:43
·
컨테이너를 모두 내리고, 도커를 중지시키고, systemctl restart docker 후에
docker-compse up -d 로 진행 성공했습니다.
쌩크
IP 59.♡.187.130
10-11 2022-10-11 14:48:21
·
대시보드가 안뜨는데 어디서부터 잘못된건지 모르겠군요... ;;;
새로운 댓글이 없습니다.
이미지 최대 업로드 용량 15 MB / 업로드 가능 확장자 jpg,gif,png,jpeg,webp
지나치게 큰 이미지의 크기는 조정될 수 있습니다.
목록으로
글쓰기
글쓰기
목록으로 댓글보기 이전글 다음글
아이디  ·  비밀번호 찾기 회원가입
이용규칙 운영알림판 운영소통 재검토요청 도움말 버그신고
개인정보처리방침 이용약관 책임의 한계와 법적고지 청소년 보호정책
©   •  CLIEN.NET
보안 강화를 위한 이메일 인증
안전한 서비스 이용을 위해 이메일 인증을 완료해 주세요. 현재 회원님은 이메일 인증이 완료되지 않은 상태입니다.
최근 급증하는 해킹 및 도용 시도로부터 계정을 보호하기 위해 인증 절차가 강화되었습니다.

  • 이메일 미인증 시 글쓰기, 댓글 작성 등 게시판 활동이 제한됩니다.
  • 이후 새로운 기기에서 로그인할 때마다 반드시 이메일 인증을 거쳐야 합니다.
  • 2단계 인증 사용 회원도 최초 1회는 반드시 인증하여야 합니다.
  • 개인정보에서도 이메일 인증을 할 수 있습니다.
지금 이메일 인증하기
등록된 이메일 주소를 확인하고 인증번호를 입력하여
인증을 완료해 주세요.