728x90

6.X DSM이 구축된 시놀로지를 가지고 있다면, Docker를 이용한 Redmine 설치가 가능하다. "시놀로지 Redmine 설치" 같은 검색어로 Google에서 검색하면 시놀로지를 이용한 Redmine 설치방법이 매우 자세히 잘 나온다.

그런데, 회사에서 사용하려다보니, 자연스럽게 SSL 적용이 필요했고, 이를 위한 작업을 하려고 하는데, 이 방법이 잘 소개 되지 않는다. Reverse Proxy를 이용하라든가, Docker 이미지 내 SSL 인증서를 탑재하라는 등 다양한 의견들이 있었다.

문제

최초 시놀로지의 Docker 기반의 Redmine을 기본 설치하면 30002 포트로 열리는데, 이 포트로 다이렉트 하게 접속 ( http://192.168.99,100:30002 )하면 잘 연결되었다. 그래서 방화벽에서도 NAT 로 해당 포트를 연결해서 제대로 연결된 것을 볼 수 있었다. 이번에는 HTTPS 로 변경하려고 했다. 

제어판 -> 응용 프로그램 포털 -> 역방향 프록시 까지 이동한 뒤,

 생성을 통해서 다음과 같이 만들었다.

즉 외부에서 https://myredmine.server.com:30003 으로 접속하면, http://localhost:30002 로 접속을 해준다는 의미이다. 다른 서버도 이런식으로 설정했었다. 그리고 방화벽에서도 30003에 대해서 열어주었다. 여기까지는 순조로왔다. 최초 접속을 해보니, 정상적으로 Redmine이 떳다.

그런데, 문제가 Submit만 하면 400 Bad Request가 떴다. 즉 "확인" 버튼만 누르면 무조건 저 페이지가 뜨면서 정상적으로 동작하지 않았다. 이 부분을 해결하기 위해 다양한 사이트를 뒤적거리기 시작했다.

해결 방법

의외로 간단한 문제였다. Reverse Proxy를 적용할 때, HTTPS 적용을 하려면, 이 Redmine의 컨테이너에 환경변수를 하나 추가해야 한다. "REDMINE_HTTPS" 를 true로 설정해야 한다. 물론 이렇게 하면 http로 접속이 제대로 안된다. 

방법은 다음과 같다.

먼저 패키지 센터에 들어가 "설치됨" 을 선택한 뒤, Redmine 항목에 들어간다. 그러면 아래와 같은 화면이 나오는데, 실행 중인 경우 "중지" 버튼을 눌러 중지 시켜준다.

그리고 난 뒤, Docker 설정 창에 들어간다. 컨테이너를 선택하고 이번에 새롭게 만들어진 redmine 컨테이너를 선택한다. 이 상태에서 편집을 누른다.

설정 창에서 "환경" 탭을 클릭 한 뒤, "+"를 클릭한다. 그러면 새롭게 입력할 수 있는 창이 뜨는데, 그 안에 "REDMINE_HTTPS" 라는 이름을 넣고, 값에는 "true" 라고 넣는다.

이제 다시 패키지 센터로 돌아가 "중지 됨" 상태를 "실행 중" 상태로 바꾸기 위해 "실행" 버튼을 클릭하면 된다. 

 

결론

정확한 원리는 모르지만, Reverse Proxy에서는 https로 받은 신호를 제대로 Redmine 서버에는 돌려주는데, Redmine 서버에서 html을 만들 때, http 코드로 생성되서 발생된 것으로 생각한다. 그래서 Docker Container 설정 중 환경 변수로 설정함으로써, 모든 I/O를 https 로 처리될 수 있도록 해주는 것 같다. 

단, 이 작업은 외부에 접근하여 연결할 수 있는 도메인주소가 필요하고, SSL 인증서가 필요하다. 유료 도메인이 없으면, DDNS를 찾아 등록하고, 유료 SSL 인증서가 없다면, Let's Encrypt를 이용해서 생성해도 된다. 
"시놀로지 DDNS" 로 검색하고, "시놀로지 Let's Encrypt"를 검색하면 방법이 나온다.
이렇게 해서 최소한 NAS가 도메인 주소로 연결하고 인증서까지 잘 적용되었다는 상태에서 아래의 단계를 진행해야 한다.

728x90

+ Recent posts