• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글

NPM - Easypanel을 이용해서 도커 서비스 쉽게 게시하는 방법

유로아빠 유로아빠 618

3

5

서버포럼 입문해서 가장 고민을 많이 했던 부분인데 어느 정도 답을 찾은것 같아서 그 결과물을 중간 보고합니다.

 

 

0. 사전 준비물

 

1. 클라우드플레어 도메인 + 와일드카드 인증서(Let's encrypt)

2. NPM (reverse proxy server) - EasyPanel과 다른 머신에 설치 (ex.. 시놀로지나 다른 리눅스 머신..)

3. 아무것도 설치하지 않은(특히 도커..) 깨끗한 리눅스 머신 (저는 ubuntu 22.04에 설치했습니다)

 

 

 

1. 작성 취지 및 개요

 

서버를 구성하고 서비스를 게시하는 이유가 다양하겠지만..

일단 알게되면 재미있고 편리하니까 스탠드얼론 앱이 아닌 온라인 서비스를 구축하게 되는것 같습니다.

게시하는 서비스의 종류와 갯수가 많아지면 '공인 ip(ddns host):service port'의 형태로는 서비스들을 관리하기 어려워지고 기억하고 접속하기도 힘들어집니다. 일단 포트를 외부로 많이 열어놓을수록 홈넷 보안에 불리한 점이 많아집니다.

 

그래서 저는 클라우드플레어를 통해서 도메인을 하나 구입해서 와일드카드 도메인(*.mydomain)을 A 레코드와 CNAME을 통해서 구성했고, SSL도 클라우드플레어 DNS challenge를 통한 와일드카드 인증서로 발급 받았습니다.

 

궁극적으로 외부에서 접속할 필요가 있는 서비스들은 리버스프록시(NPM)를 통해서 접속하도록 설정했고, 예외적으로 필요한 일부를 제외한 모든 포트들은 닫아놓았습니다.

 

외부에서 서비스를 호출했을때..

1. 실제 장비들의 관리페이지, 홈넷의 내부망 ip를 쓰는 서비스들은 npm을 통해서 연결해줬고..

2. EasyPanel을 통해서 설치한 도커 서비스들은 npm으로 도커 머신의 80이나 443으로 연결해주면.. 그 뒤부터는 traefik 서비스가 알아서 해당 컨테이너에 연결해주도록 했습니다.

NPM과 EasyPanel을 같은 장비에 설치하면 80/443 포트를 쓸 수 없으므로 반드시 다른 장비에 설치해줘야 합니다.

NPM - EasyPanel 구성도.png.jpg

아래 NPM 서비스 목록에서 동그라미 친 놈들은 호스트 네트워크를 통해서 연결을 받고..

밑줄 친 놈들은 도커가 설치된 리눅스 머신의 traefik 서비스를 통해서 연결을 받습니다.

그리고 전부 다 npm을 통해서 와일드카드 인증서의 적용을 받습니다. 참 편리하네요!

 

image.png.jpg

image.png.jpg

 

 

 

2. 리눅스에 easypanel을 설치합니다.

 

정말 쉽죠.. 터미널 명령줄 하나로 끝나니까요.

 

curl -sSL https://get.easypanel.io | sh

 

처음엔 잘 몰랐는데 traefik은 easypanel 내부에 통합되어있습니다.

그래서 기본적으로 traefik 관리 페이지도 비활성 상태입니다.

traefik 서비스가 정상적으로 작동해야 도커 머신으로 들어온 서비스 호출을 도커 컨테이너로 알아서 연결해주게 됩니다.

이 과정에서 easypanel 프로젝트 내부의 app 설정에서 domain 이름만 추가해주면 됩니다.

와일드카드 인증서는 npm으로부터 받습니다.

(easypanel의 설정 탭에서 traefik log를 열어보면.. level=error msg="Unable to obtain ACME certificate for domains \"service.mydomain.net\" 오류가 계속 뜨는게 보입니다.. 이건 traefik을 리버스프록시 최상단으로 올려야 해결될 것 같습니다)

 

image.png.jpg

 

 

 

3. Easypanel template로 portainer를 설치한다.

 

easypanel을 사용하다보면 서비스를 부수고 다시 설치하게 되는 경우가 생기는데 이 때 사용하지 않는 컨테이너와 이미지들이 자동으로 지워지지 않고 남아있게 됩니다.

portainer를 통해서 필요없는 컨테이너와 이미지들을 편리하게 지울 수 있습니다.

easypanel로 설치된 서비스들은 easypanel network 아래에 설치되게 됩니다(동일 네트워크 대역..).

템플릿을 설치할때 portainer의 최신버전 이미지를 지정하면 최신버전으로 설치될 것 같습니다.

저는 구버전으로 설치되서 easypanel 설정에서 도커 이미지를 최신으로 바꿔서 넣었는데 자동으로 다시 최신버전으로 deploy 하더라고요. ㄷㄷ

image.png.jpg

image.png.jpg

 

다른 기기에 설치된 도커 컨테이너나 이미지 파일들도 한곳에서 관리하기 위해서 다른 머신들에는 portainer/agent를 설치하고 포테이너 설정에서 연결해줬습니다.

아래 짤은 예시로 설치된 컨테이너들이고요.

10.0.1.x 대역을 쓰는 컨테이너들은 easypanel로 설치한 것들입니다.

 

image.png.jpg

 

 

 

4. EasyPanel의 template를 통해 원하는 서비스 게시하기

 

시범삼아서 owncloud와 filerun을 게시해봤습니다.

클릭 몇번으로 올라가네요.

물론 리버스프록시로 npm을 쓰기 때문에 traefik까지 연결해줘야하는 번거로움은 있지만, 서비스를 여러개 올리더라도 도커가 설치된 리눅스 머신의 포트가 겹치지 않을까 걱정하지 않아도 되어서 아주 편리했습니다.

다만 easypanel 프로젝트의 app 머신의 설정에 들어가서 도메인을 추가해주는 것만 챙겨주면 됩니다.

추가로 포트를 바꾸거나 외부로 포트를 노출해줄 필요가 전혀 없었습니다.

 

image.png.jpg

image.png.jpg

요건 owncloud..

image.png.jpg

 

 

 

5. 마무리 및 향후 과제

 

easypanel은 여러 도커 컴포즈 혹은 스웜을 통해서 올려야 되는 서비스를 원클릭으로 올려줄 수 있는 편리한 도구입니다.

traefik이 리버스 프록시부터 로드 밸런싱, 도커 머신들간의 연결 등등 아주 핵심적인 역할을 수행하는데요..

처음에는 traefik을 외부로 게시해서 리버스프록시 머신으로 써야만 하는줄 알고 스트레스를 받았었는데,

easypanel이 설치된 머신의 80/443 포트만 점유할 수 있으면 서비스를 이용하는데 전혀 문제가 없었습니다.

다만 traefik log를 보면 서비스 호스트 인증서 발급과 관련한 오류를 띄우고 있는걸 볼 수 있는데, 이건 npm을 통해서 와일드카드 인증서를 받을 수 있으니까 문제가 되지 않을것 같습니다.

 

향후 과제로는..

1. easypanel에 내장된 traefik의 관리 페이지를 살려서 쓸 수 있는지,

2. easypanel의 설정 파일을 직접 만져서 도커 네트워크에 속하지 않은 호스트 네트워크의 서비스들을 지정해줄 수 있는지..

3. 템플릿이 아닌 임의로 서비스를 구성해서 easypanel을 통해서 게시할 수 있을지..

가 궁금해졌는데요..

 

2번이 가능하다면 최종적으로는 traefik 서비스를 전적으로 리버스프록시 서버로 활용할 수 있게 되면서 npm을 건너뛰고 그냥 easypanel에서 원클릭으로 서비스를 올리고 설정한 도메인명으로 바로 접속할 수 있게 될 것 같습니다. 다만.. 도커 아닌 서비스들을 traefik 속으로 편입시켜야하는 과제를 해결해야 합니다.

 

서버의 세계는 정말 넓고도 넓은것 같습니다.

참 재미있네요. ^^

 

현직에 계신 분들도 있고 전문가 고수님들도 많으신데 눈을 어지럽혀드린건 아닌지 걱정됩니다.

그래도 이제 막 재미를 붙이신 분들을 위해 글을 써봤습니다.

 

감사합니다. ^^

신고공유스크랩
5
profile image 2등
달소 2023.05.04. 19:44
와,, 개요부터 필력이 장난이 아니시네요.
구축이유부터 상세한 설명까지 좋은 글 잘봤습니다.
Easypanel에 npm기능까지있으면 아주좋을텐데 trafik기반이라 해당 기능까지는 지원을 하지않아 아쉽더라구요.
좋은정보공유 감사드립니다 :)
profile image
유로아빠 글쓴이 2023.05.04. 21:37
달소
별말씀을요. ^^달소님 소개로 좋은거 많이 배웠습니다.
이번에 npm과 traefik이 적절히 공존할 수 있는 지점을 찾아서 만족스럽네요.
다만 easypanel 내장된 traefik 하나로 모든걸 해결할 수 있을지가 숙제로 남았습니다. 이건 해외 자료 검색해도 사례가 없더라고요. ㅠㅠ

서버포럼을 알게 되서 참 좋습니다.
연휴 즐겁게 보내세요. ^^
profile image
유로아빠 글쓴이 2023.05.05. 00:50
mistercorea
OneDev가 easypanel template에 있네요. jenkins는 아직 없는것 같습니다.
https://easypanel.io/docs/templates/onedev

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story

등록된 글이 없습니다.