updated 2106-01-21
SITE_ID 설정
만약 이 SITE_ID 를 사용한다면 db table 의 domain 값도 수정해야 한다.
이 SITE_ID 는 django_site table 에 설정되어 있는 값인데, 이녀석은 get_current_site() 등을 이용해서 현재 site 의 domain 을 가져오려고 하면, 이 django_site table 에서 SITE_ID 에 해당하는 녀석을 가져오게 된다.(물론 django.contrib.sites 를 사용하지 않는 경우에는 안그렇지만) 여하튼 그래서 이녀석에 대한 setting 을 위해서, DB table 의 domain 값을 설정해준다.
--------------------
여기서는 Django Deployment checklist 의 내용을 정리할 것이다.
Critical settings
SECRET_KEY
장고에서 사용하는 녀석인데, 이녀석은 소스코드 안에 포함시키지 않고, deploy 하는 server 에 직접 설정해 주라고 한다. 그리고 어디서도 쓰지 않는 unique 한 값으로 해준다. 이것이 hacker 가 SECRET_KEY 를 얻는 확률을 줄여준다고 한다.DEBUG 옵션 끄기
settings 에 있는 DEBUG 를 False 로 설정해야 한다. 장고 세팅 설정은 아래 글을 참고하자.환경 관련 세팅
ALLOWED_HOSTS
DEBUG = False 라면 ALLOWED_HOSTS 의 지정된 녀석만 접근 가능하다. 이게 CSRF 공격을 막아준다. ALLOWED_HOSTS 에 설정된 내용과 request 의 host header 를 비교한다. 보통 내 domain name 을 적어주면 된다.
ALLOWED_HOSTS = ['.mydomain.net']
이 부분을 장고에서 하지 않고, 앞단의 server(nginx 등) 에 맡겨놓으면 쓸데없는 error log 를 줄일 수 있다.
주의할 점은 이렇게 ALLOWED_HOSTS를 setting 하고 나면, 당연한 이야기지만, ip 로 접근하는 등의 작업은 안된다. 그러므로, 테스트를 원한다면, ip 등도 적어주면 된다. 하지만, 이것은 반대로 보안의 문제가 되므로, 되도록 안하는 것이 좋다.
주의할 점은 이렇게 ALLOWED_HOSTS를 setting 하고 나면, 당연한 이야기지만, ip 로 접근하는 등의 작업은 안된다. 그러므로, 테스트를 원한다면, ip 등도 적어주면 된다. 하지만, 이것은 반대로 보안의 문제가 되므로, 되도록 안하는 것이 좋다.
CACHES
memcaches 등을 사용한다면 설정을 해 준다. 개발과, 실제 release(production) 의 설정이 다를 것이다. 최소한 default value 는 적어줘야 한다.CACHES = { 'default': { # local memory cache 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', } }
DATABASES
database 연결설정, password 설정을 하자. database 의 password 는 위에서 이야기한 SECRET_KEY 처럼 관리하는 것이 좋다.그리고 DATABASE 를 연결할 수 있는 host 를 web server 로 제한시키고, 주기적인 백업을 하도록 설정한다.
추가로, 당연한 이야기지만, DB에서 root 계정이외에 web application 을 위한 계정도 따로 만들어서 사용하자.
Email 설정
EMAIL_BACKEND 를 설정 해 주자. 이녀석이 EMAIL 을 보낼 때 사용할 녀석이다. 아래는 기본값이다.EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
그리고 email 주소를 설정해 주자. django 에서 request 처리하는데에 error 가 발생하면 email 주소를 error email 을 보내준다.
그리고 자동응답용 메일에 from 부분을 setting 해줄 수 있는데, 그 부분은 DEFAULT_FROM_EMAIL 를 참고하면 된다. 참고로 DEFAULT_FROM_EMAIL 의 기본값은 "webmaster@localhost" 이기 때문에 바꿔주는 것이 좋다.
# ##### MANAGER CONFIGURATION
# See: https://docs.djangoproject.com/en/dev/ref/settings/#admins
ADMINS = (
('Your Name', 'myemail_address@example.com'),
)
# See: https://docs.djangoproject.com/en/dev/ref/settings/#managers
MANAGERS = ADMINS
# #### END MANAGER CONFIGURATION
STATIC_ROOT 과 STATIC_URL
개발 서버에서는 자동으로 되는데, 실제 production 에서는 설정을 해줘야 한다. STATIC_ROOT 은 실제 파일이 있는 경로를 설정해 주면 되고,STATIC_URL 은 이 STATIC_ROOT 에 있는 파일을 접근하는 url 이 된다.
자세한 설정은 Managing static files (e.g. images, JavaScript, CSS) 를 참고하자.
MEDIA_ROOT 와 MEDIA_URL
MEDIA 는 유저가 upload 하는 contents 를 이야기한다. 그래서 주의할 점은 web server 가 이 믿을 수 없는 contents 를 함부로 execute 하지 못하게 해야 한다고 한다.HTTPS
https 를 사용할 때는 http 를 모두 https 로 redirect 시키는 작업이 필요하다고 한다. 실제로 이러지 않으면, https 에서의 동작을 http 로 수행해서, session cookie 등의 정보를 그대로 가져올 수 있다.CSRF_COOKIE_SECURE
이 녀석을 True 로 설정하자. 그러면 CSRF COOKIE 가 http 로 넘어가지 않게 해준다. 주의할 점은 이 녀석은 http 를 사용할 것이라면 False 로 설정해야 csrf cookie 가 http 에서도 설정이 된다.SESSION_COOKIE_SECURE
이 녀석을 True 로 설정하자. 그러면 SESSION_COOKIE 가 http 로 넘어가지 않게 해준다. 주의할 점은 이 녀석은 http 를 사용할 것이라면 False 로 설정해야 csrf cookie 가 http 에서도 설정이 된다.Performance 최적화
CONN_MAX_AGE
CONN_MAX_AGE 를 설정하는 것이 속도에 좋은 영향을 줄 수 있다고 한다. 이건 db connection 의 최대 유지시간이라고 보면 된다. 자세한 사항은 Databases > Persistent connections 를 참고하면 된다.TEMPLATES 설정
TEMPLATES 설정에서 cached loader 설정을 해주라고 한다. 이녀석은 template 이 매순간 compile 해서 client 로 보내지는데, 이 부분을 memory 에 cache 하고 있다가, 같은 template 요청이 올 때 보내주는 방식이다. class cached.Loader 를 참고하면 된다.# #### TEMPLATE CONFIGURATION # See : https://docs.djangoproject.com/en/1.8/ref/settings/#templates TEMPLATE = [{ 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [normpath(join(SITE_ROOT, 'templates'))], 'OPTIONS': { 'loaders': [ ('django.template.loaders.cached.Loader', [ 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ]), ], # see : https://docs.djangoproject.com/en/1.8/ref/templates/upgrading/ 'context_processors': [ 'django.contrib.auth.context_processors.auth', 'django.core.context_processors.debug', 'django.core.context_processors.i18n', 'django.core.context_processors.media', 'django.core.context_processors.static', 'django.core.context_processors.tz', 'django.contrib.messages.context_processors.messages', 'django.core.context_processors.request', ] }, }] # #### END TEMPLATE CONFIGURATION
Error reporting
LOGGING
예상치 못한 error 를 위한 logging 을 잘 설정해야 한다. 필요한 곳에 log 를 집어놓고, 이녀석이 error log 를 발생시키면 admin 에게 mail 로 알려주게 할 수 도 있다. 여러가지 예제는 아래 경로를 참고하자.- https://docs.djangoproject.com/en/1.8/topics/logging/#examples
- Logging | Django documentation | Django
- logging configuration example
ADMIN 과 MANAGER
기본적으로 500 error 는 admin 에 설정된 주소로 mail 을 보내고, 404 관련 에러는 MANAGER 에 설정된 email 로 보낸다. 관련해서는 아래 링크를 참고하자.Error page
기본적으로 error page 를 제공한다고 한다. 이 녀석들을 override 하려면 template folder 에 404.html, 500.html 403.html, 400.html 이런식으로 넣어주면 된다고 한다. view 를 수정해도 된다.Python Options
django 는 아시다시피 python 을 사용한다. 이 python 을 실행할 때 -R option 을 사용하라고 한다. 이 녀석이 새로운 python instance 마다 새로운 salt 를 가지고 hash 를 만든다고 한다.이것이 외부의 DoS 공격을 예방하게 해 준다고 한다. 추측은 Rainbow table attack 등을 막는데에 도움을 줄 듯 하기도 하다.
댓글 없음:
댓글 쓰기