Synology::django 프로젝트 띄우기


 1. django를 시놀로지에서 돌려보자

django라는 python 프레임워크로 블로그를 만들었습니다. 이제 만들었던 컨텐츠를 공개해야 하는데, 웹호스팅 업체를 쓰든지, 클라우드서비스를 사용하든지 아니면 기기하나를 24시간 돌리면서 전용서버를 만들든지 해야합니다. 이 3가지 방법 중 앞 2개는 비용이 들고, 뒤에 1개는 비현실적입니다. 아, 그런데 뒤에 1개를 NAS로 이용하면 매우 현실적이지! 그래서 시놀로지에서 django 프로젝트를 띄워보기로 했습니다.

시놀로지에서 django를 실행하는 방법이 2가지 있는데, 시놀로지의 Docker앱에서 django이미지를 사용해서 django 컨테이너를 띄우는 방법과, Ubuntu이미지를 일단 생성한 후에 그 위에 django에 필요한 라이브러리등을 하나하나 설치해 주는 방법입니다. 물론 전자가 간편하죠. 그런데 장기적으로는 자유도가 높은 후자가 더 편할 수 있습니다. 

2. ubuntu이미지를 사용한다

1) Docker 메뉴 레지스트리에서 ubuntu를 선택해서 이미지를 추가합니다.

2) Docker 메뉴 이미지에서 ubuntu를 선택해서 컨테이너 설정을 합니다.
  -고급설정에 들어가서 "볼륨추가","포트설정"

3) 제어판 메뉴 외부엑서스에서 "라우터구성"으로 2)에서 설정한 포트를 개방합니다.
  -저장버튼을 누르는걸 잊지마세요!

4) Docker 메뉴 컨테이너에서 ubuntu를 선택한 후 터미널 탭을 선택합니다.

5) apt 업데이트를 위해 명령어 입력
apt update

6) apt 업그레이드를위해 명령어 입력
apt upgrade

7) python 설치를위해 명령어 입력
apt install python3.8

8) pip 설치를위해 명령어 입력
apt install python3-pip

9) django 설치를위해 명령어 입력
pip3 install django

10)프로젝트 생성을위해 명령어 입력
django-admin startproject [프로젝트이름]

12) _prj로 끝나는 폴더 안에 있는 settings.py라는 파일에서 ALLOWED_HOSTS 를 시놀로지 DDNS명으로 수정
ALLOWED_HOSTS=['{DDNS이름}',]

11) manage.py 라는 파일이 있는 곳으로 디렉토리 이동하여 서버실행을 위해 명령어 입력
python3 manage.py runserver 0.0.0.0:[포트번호]
0.0.0.0 과, 포트번호를 직접 지정해서 띄워주는 것이 중요합니다. 이것을 지정 안하면 디폴트값 127.0.0.1:8000으로 기동되는데, 이러면 접속이 안됩니다.


12) 새브라우저에서  접속해보기
http://{DDNS이름}:포트번호

문제없이 동작하면 아래와 같은 화면을 보여줍니다.



3. django이미지를 사용한다

django이미지를 이용하면 약간은 번거로움을 덜 수 있습니다.
위에 Ubuntu를 이용했던 방법에서 1~4에 해당하는 것은 ubuntu부분을 전부 djnago로 바꿔서 설정하시면 됩니다. 그리고 터미널에서 프로젝트 생성(10)부터 똑같이 해주면 됩니다. 리눅스머신에 이미 관련 라이브러리가 모두 설치되어있는 상태의 이미지라서 5~9까지의 설정을 따로 안해도 됩니다.

문제없이 동작하면 아래와 같은 화면을 보여줍니다.


위와는 약간 다르네요. 이미지 구성등에 차이가 있는걸까요...

추가. 메모

- 간간히 생략되어있는 작업들이 있습니다. 장고 프로젝트 생성하기 전에 프로젝트를 생성할 폴더를 만든다던가, settings.py를 터미널에서 직접 수정하기 위해 vim에디터를 설치한다던가. 또한 프로젝트 생성후의 마이그레이션에 대한 것도 생략되어있습니다. git을 이용한 버젼관리도 으레 하게되는데, 그것도 생략...했지만, 소스코드를 가져올땐 git을 이용했기때문에, git도 설치했었습니다. 가상환경(venv)은 코드짤때는 했는데, docker에서는 굳이 해줄 필요를 못느껴서 안했습니다. 어차피 컨테이너 하나하나가 가상환경이라는 생각에...

-0.0.0.0과 127.0.0.1 한쪽은 접속이 되고 한쪽은 접속이 안되는것은 왜 일까 찾아 봤습니다. 이런 혜자스러운 포스팅(일문)이 있군요. (더구나 djnago를 예로들어 설명) 127.0.0.1은 루프백어드레스로 머신자기자신을 가르키는 어드레스지만 그것이 django서버를 실행한 머신과 일치하지 않을때 127.0.0.1를 이용해 접근할 수가 없네요. 반면, 0.0.0.0은 자기자신이라는 의미는 없고, 모든 인터페이스와 바인딩될수 있다는 것을 의미한다고 합니다. 

처음에 코드를 짠 단말기에서는 127.0.0.1로 서버를 기동해도 머신과 서버가 같은 단말 안에 존재해서 접속이 잘됐는데, 시놀로지를 이용해서 컨텐츠를 띄우려고 보니 NAS와 실제 조작하는 머신이 달라지게 되니까 접속이 안되었던 것이네요. 항상 느끼는거지만 네트워크는 어렵습니다. 이 문제를 해결하려고 2개월정도 네트워크랑 리눅스 공부를 따로하고, 하는 김에 자격증도 땃는데. 흑흑. 그래도 어렵네요.

-이정도면 홈블로그정도는 아주 훌륭하게 만들수 있습니다. 정말 재미있었어요.