시놀로지에 도커 우분투 컨테이너 설치 후, 웹서버 구축

시놀로지 도커 웹서버 구축

시놀로지 운영체제가 리눅스 기반이긴 하지만, 중요 기능들이 빠져 있어서 리눅스에서 돌아가는 무언가를 본격적으로 돌리기에는 안되는 것도 많다.
파이썬 기반의 flask를 이용해서 간단한 웹서버를 돌려보려고 하는데, 시놀로지에 ssh로 접속해서 이것저것 패키지를 설치하면 안되더라…
패키지 설치하는 방법을 찾다보니, 앗싸리 우분투 컨테이너 올려서 돌리는 것이 낫겠다고 판단. 기록차 글을 남겨둔다.

우분투 컨테이너 설정

시놀로지 도커에 우선 우분투 컨테이너를 올려야 한다. 아.. 요즘에는 도커라는 명칭을 다른 회사에서 못 쓰기에, 시놀로지에는 “컨테이너 매니저”라는 패키지로 제공한다.

컨테이너 매니저(Container Manager)에서 레지스트리 메뉴를 선택하고, “ubunbu”를 입력해서 검색한다. 그러면, 이미지가 리스트로 나타나고, 젤 위에 있는 ubuntu 리스트를 더블 클릭한다. 그리고 태그를 선택하십시오 부분에 22.04 버전을 선택하고 설치한다. 버전은 취향(?) 맞게 알아서 선택.

컨테이너 매니저에서 컨테이너 메뉴로 이동해서 “생성” 버튼을 클릭한다. 일반 설정 화면이 나오는데, 이미지는 방금 설치한 ubuntu:22.04를 선택하고 컨테이너 이름은 마음에 드는 걸로… 그리고 다음 버튼 클릭.

고급 설정에서 포트 설정을 해줘야 한다. 우선 나는 2개 포트를 세팅했다. 9876과 9877. 9876 포트는 ssh를 위한 포트이고, 9877은 flask로 띄울 웹서버를 위한 포트이다. 볼륨 설정은 시놀로지와 도커간에 공유할 파일이 없으므로, 설정하지 않았다. 네트워크 설정도 브릿지 그대로 두고, 다음 버튼을 누르면 우분투 컨테이너 세팅은 끝난다.

이렇게 세팅해 놓으면, vividian.net:9876 포트로 접속하면, 우분투 컨테이너로 9876 포트로 들어간다.
9876 포트가 SSH용으로 사용할 것이라서, 나중에 SSH 접속 세팅을 9876으로 바꿔줘야 한다.
그리고, 9877 포트는 웹서버를 위한 포트이므로, 역방향 프록시에서 세팅을 해줘야 한다.

도메인 설정

우분투 컨테이너 세팅을 맞췄다면, 이제 서브도메인을 추가하자.
CNAME으로 서브도메인을 추가하자. 아래 스샷은 Cloudflare에서 DNS 세팅화면이다. test로 추가했다고 한다면, 이제 test.vividian.net 으로 접속하면 우분투 컨테이너로 접속이 되도록 해야 한다.

역방향 프록시 설정

웹에서 test.vividian.net 으로 접속하면, 우분투 컨테이너로 연결되도록 역방향 프록시를 설정해야 한다.
시놀로지에서 “제어판” > “로그인 포털” > “고급” > “역방향 프록시” > “생성” 버튼을 누른다. 그러면 역방향 프록시 규칙을 입력하는 곳이 나오는데, 다음과 같이 2개를 만들자.

  • HTTP 접속
    • 소스
      • 프로토콜: HTTP
      • 호스트 이름: test.vividian.net
      • 포트: 80
    • 대상
      • 프로토콜: HTTP
      • 호스트 이름: localhost
      • 포트: 9877
  • HTTPS 접속
    • 소스
      • 프로토콜: HTTPS
      • 호스트 이름: test.vividian.net
      • 포트: 443
    • 대상
      • 프로토콜: HTTP
      • 호스트 이름: localhost
      • 포트: 9877

HTTP / HTTPS 모두 대상 프로토콜은 HTTP로 입력시킨다. 우분투 컨테이너 내의 파이썬 flask 웹서버는 https 연결 못 받는다.

공유기 포트포워딩 설정

자 이제 포트포워딩 차례다. 시놀로지 내부만 뚫어봤자 도로묵이니, 외부 연결 세팅을 하자. 아이피타임 공유기 기준으로 간단하다. 앞에 우분투 컨테이너 포트 적었던 영역대를 그대로 연결시켜주면 된다.

내부 IP주소는 시놀로지에 할당된 주소로 적고, 프로토콜은 9876~9877 두 번 적어주자.

이렇게만 하면 flask 로 웹서버 구동하고 접속이 가능하다. 하지만, SSH로 연결해서 코딩을 하든 뭘 하든 해야 하기 때문에 앞에 할당한 9876 포트로 접속할 수 있도록 세팅을 하자.

“컨테이너 매니저” > “컨테이너” > 생성한 우분투 컨테이너에서 오른쪽 마우스 버튼을 누르면, 터미널 열기 메뉴가 나타난다. 우선 접속하면 컨테이너에 접속이 가능하다.

만약 터미널 열기를 눌렀는데도 Socket error 메시지가 뜬다면, 나스에 접속한 브라우저를 바꾸거나, 캐시를 삭제해주자.

터미널에서 해야할 것은 아래와 같다. 내용이 길어져서 따로 적진 않는다. 이 내용으로 설명한 다른 블로그도 많기 떄문에…

  • 아이디 생성
  • 아이디에 관리자 권한 부여
  • 우분투 SSH 패키지 설치
  • SSH 세팅에서 접속 포트를 9876 으로 수정!!
  • SSH 서비스 시작 (service ssh restart)

이렇게 세팅하면 콘솔이나 putty 같은 프로그램으로 ssh 접속이 가능하다.

Python
PS C:\Users\vividian> ssh test@vividian.net -p9876
test@vividian.net's password:
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 4.4.302+ x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.
Last login: Wed May 15 09:03:55 2024 from 172.17.0.1
test@ubuntu-1:~$

flask 웹서버

우분투 컨테이너에 SSH로 접속을 해서 이런저런 패키지를 설치하고, flask 웹서버에서 포트 넘버를 9877 로 적어주면 된다.

Bash
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9877)

그럼 이제 웹브라우저로 test.vividian.net 에 접속하면 hello, world! 가 보이게 될 것이다.

SSL 설정

그런데, 웹브라우저에 안전하지 않음이라고 뜰 것이다. 시놀로지 인증서를 업데이트 해주자.
test라는 cname이 추가되었으므로, 기존 인증서 추가발급하면서 test.vividian.net 추가해주면 된다.

  • 제어판 > 보안 > 인증서 > 새 인증서 추가
  • 인증서 제공자에서 Let’s Encrypt 선택
  • 도메인 주제 대체이름에 test.vividian.net 이 추가되도록 기존 세팅 업데이트

끝.


댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤