시놀로지에 서버를 띄우기 위해서 다음과 순서로 진행할 예정이다. 처음으로는 외부에서 NAS에 접속 가능하게 DDNS를 설정해 줄 것이고 그 다음으로는 외부에서 NAS 도커로 접속할 포트를 열어주고 공유기의 포트포워딩 설정을 해준다. 로컬에서 도커 환경의 Django 프로젝트를 생성하고 깃허브로 올린 후 나스를 SSH 접속하여 깃허브를 풀해오고, docker compose 를 이용해 도커를 실행시킨다.
1. 외부에서 시놀로지에 접속하기 위한 설정
- 외부 접속을 위해 DDNS를 활성화 하고 인증서를 발급받는다. (인증서를 먼저 발급받아도 상관없다) 서버가 https 로 돌아가지 않으면 일부 외부 api 활용 시 웹훅을 http 주소로는 사용못하게 막아놓은 곳이 있어서 필수로 인증서는 있어야 한다.
- 공유기 포트포워딩을 통해 외부에서 NAS 접속이 가능하게 한다. 내부포트는 변경되어야 안전하다.
- DSM 패키지센터에서 Docker와 Git Server 를 다운로드한다.
- DSM 제어판에서 SSH를 열어준다. (추후 터미널로 접속해야 하기 때문에)
2. 로컬에서 Django 프로젝트 생성
원래 AWS EC2에 올라가져 있는 프로젝트를 사용 안하고 아예 새로 처음부터 만들어보려 한다. 로컬에서는 pipenv 가상환경에서 django를 띄우고 이를 도커화 할 계획이다. 아래에서 진행할 때는 pip, pipenv, django-admin 등 기본적으로 필요한 툴은 설치되어 있고 사용 방법을 안다고 가정하고 진행. 참고로 OS는 Mac 을 사용하고, Vscode에 터미널은 ZSH를 사용한다. (폰트는 D2coding)
- pipenv 가상환경에서 진행 한다.
pipenv install
- 가상환경에 들어간다.
pipenv shell
- django 프로젝트 설치
django-admin startproject config .
- 마이그레이션 및 실행해본다.
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
3. Django Rest Framework 설치 및 세팅
우선 나스에 서버를 올리려는 이유는 Synology Chat 채팅봇을 만들기 위함이고, 하단의 내용은 간단하게 접속하여 연결하는 과정이다.
- 우선 DRF 를 깔고 채팅봇 앱 chatbot을 생성한다.
pipenv install djangorestframework
python manage.py startapp chatbot
- config > settings.py 를 다음과 같이 수정한다.
* 중간에 rest_framework_jwt, corsheaders 는 추가하였다.
ALLOWED_HOSTS = ['*'] #수정
...
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', #추가
'rest_framework_jwt', #추가
'corsheaders', #추가
'chatbot', #추가
]
...
# TIME ZONE 수정
TIME_ZONE = 'Asia/Seoul'
...
# REST FRAMEWORK 관련 설정 추가
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
),
}
- chatbot > models.py
* 우선 로그 저장용 Log 모델을 추가해놓았다.
from django.db import models
class Log(models.Model):
raw_data = models.CharField(max_length=10000, blank=True)
log_create_date = models.DateTimeField(auto_now_add=True)
last_update = models.CharField(max_length=10000, blank=True)
view_count = models.IntegerField(default="1")
- chatbot > serializers.py
from rest_framework import serializers
from chatbot.models import Log
class LogSerializer(serializers.ModelSerializer):
class Meta:
model = Log
fields = '__all__'
- chatbot > viewsets.py
* rest_framework의 viewsets를 사용할 예정이기 때문에 해당 파일을 만들었다. 대부분을 class based view 를 사용할 예정
from rest_framework import viewsets
from . serializers import LogSerializer
from . models import Log
class LogViewSet(viewsets.ModelViewSet):
queryset = Log.objects.all()
serializer_Class = LogSerializer
- config > router.py
* rest_framework 의 라우터를 이용하여 url을 연결하려 한다.
from chatbot.viewsets import LogViewSet
from rest_framework import routers
router = routers.DefaultRouter()
router.get_api_root_view().cls.__name__ = "SYNOLOGY KIMCHI SERVER API"
router.get_api_root_view().cls.__doc__ = "SYNOLOGY KIMCHI SERVER LIST"
router.register('log', LogViewSet)
- config > urls.py
from django.contrib import admin
from django.urls import path,include
from .router import router
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(router.urls)),
]
- 마이그레이션을 진행하고 실행시켰을 때 다음과 같은 화면을 볼 수 있다.
python manage.py makemigrations
python manage.py migrates
python manage.py runserver
다음화에서는 로컬에서 Docker를 이용하여 프로젝트를 컨테이너화 하고 nginx 와 gunicorn으로 실행하는 것을 다루도록 하겠다.
'Synology > 1. NAS를 웹서버로 사용하기' 카테고리의 다른 글
6. [시놀로지에 웹서버 띄우기] vscode ssh-remote 로 nas로 원격 접근하여 코딩하기 (0) | 2021.12.08 |
---|---|
5. [시놀로지에 웹서버 띄우기] nginx https 설정하기 (0) | 2021.12.08 |
4. [시놀로지에 웹서버 띄우기] Synology에 장고 웹서버 배포하기 (docker, nginx, django, gunicorn) (0) | 2021.12.07 |
3. [시놀로지에 웹서버 띄우기] Docker 컨테이너로 묶고 Github에 Push하기 (docker, nginx, django, gunicorn) (0) | 2021.12.07 |
1. [시놀로지에 웹서버 띄우기] 시놀로지DS920+ 도입 과정 (0) | 2021.12.07 |