장고:우분투에 올리기(nginx 사용)
장고! 웹 프레임워크! 틀:장고
개요[편집 | 원본 편집]
runserver는 사실 개발용 기능이다. 웹 서버에 올리기 위해선 아파치 같은 웹서버용 소프트웨어를 실행시켜야 한다.
gunicorn[편집 | 원본 편집]
개요[편집 | 원본 편집]
- 파이썬 WSGI서버 중 하나.(파이썬을 웹서버와 중계하는 역할.)
- 웹서버와 장고를 연결시켜주는 기능.
사용[편집 | 원본 편집]
과정 | 설명 | 방법 |
---|---|---|
설치 | 가상환경 내에서 설치해주자.
(runserver를 실행시켰을 때 잘 돌아감을 확인한 후 진행하자.) |
pip install gunicorn
|
테스트 | manage.py 가 있는 곳에서 gunicorn wsgi의 경로 를 입력해준다.
(필자의 경우 gunicorn --bind 0:8000 config.wsgi:application) --bind 0:8000은 모든 IP에서 8000번 포트로 들어오는 걸 허용한다는 의미. 이걸 입력해주면 [2020-12-19 23:41:50 +0900] [86493] [INFO] Starting gunicorn 20.0.4과 같이 뜬다. (해당 도메인으로 들어가보자. runserver로 진행한 것과 동일하게 뜰 것이다.) |
gunicorn --bind 0:8000 config.wsgi:application
|
유닉스 소켓으로 서비스 | 유닉스 계열 시스템에선 포트방식보단 유닉스 소켓방식이 더 선호된다.
백그라운드에서 실행되게 하자. 소켓파일은 /tmp/gunicorn.sock 으로 생성된다. 소켓방식으로 띄우면 단독으로 gunicorn 테스트는 불가. |
gunicorn --bind unix:/tmp/gunicorn.sock config.wsgi:application &
|
종료[편집 | 원본 편집]
다른 것들을 테스트하기 위해 종료해야 할 때가 있다. pkill -f gunicorn
nginx[편집 | 원본 편집]
아파치와 같은 웹서버.
사용[편집 | 원본 편집]
과정 | 설명 | 방법 |
---|---|---|
설치 | 가상환경 내에서 설치해주자. | sudo apt install nginx
|
설치 확인 | 제대로 설치가 되었는지 확인 | nginx -v
|
설정파일 작성(sites-available) | 설정 디렉터리 아래에 설정파일을 만든다.(mysite로 만들 때) 다음과 같이 파일을 작성한다.server {
# 받을 포트.
listen 8000;
# 고정아이피.
server_name id8436.iptime.org;
#location = /favicon.ico { access_log off; log_not_found off; }
# static 디렉터리 파일. # static 디렉터리 주소.
location /static {
alias /home/id8436/projects/mysite/static;
}
# static으로의 설정 외의 연결은 이곳에서 처리하게끔.
location / {
include proxy_params;
proxy_pass http://unix:/tmp/gunicorn.sock;
# gunicorn 소켓경로를 지정해준다.
}
}
|
sudo nano /etc/nginx/sites-available/mysite |
설정파일 작성(site-enabled) | site-available 안의 설정파일 중 활성화시키고 싶은 것들을 관리한다.
기존 default 설정을 삭제하고 위에서 작성한 설정파일을 링크해둔다. |
sudo rm /etc/nginx/sites-enabled/default
|
확인 및 변동사항 적용 | 설정파일을 테스트하고,
재시작한다. |
sudo nginx -t sudo systemctl restart nginx
|
이외 설정[편집 | 원본 편집]
과정 | 설명 | 방법 |
---|---|---|
이외 설정 | 굳이 안건드려도 된다.
기본 설정파일은 /etc/nginx/nginx.conf sudo nano /etc/nginx/nginx.conf 형태로 기초 설정파일을 만질 수 있다. ***설정을 만진 후엔 재시작해주어야 한다. |
|
업로드 용량 제한 | 413 Request Entity Too Large 에러가 뜬 경우.
nginx.conf 파일 항목 http 내에 client_max_body_size 20M; 형태로 내용을 추가한다. |
이외 명령들[편집 | 원본 편집]
명령 | 설명 |
---|---|
sudo /etc/init.d/nginx start
|
쓸 일이 있을진 모르겠지만...(나중에 필요없으면 지우자.) nginx 시작 |
sudo systemctl start nginx | 시작 |
sudo systemctl stop nginx | 종료 |
변경사항 반영[편집 | 원본 편집]
git으로 변경사항을 반영해도 변경내용이 적용되지 않는 경우가 있다...그럴 땐 다음의 과정을 따라주자.
탬플릿 변형은 별다른 작업 없이도 반영된다. 파이썬 파일을 변경했을 때만 적용하면 된다.
과정 | 설명 |
---|---|
gunicorn 끄기
(이상하게 재시작만으론 안된다. 굳이 껏다 켜야 한다;) |
pkill -f gunicorn
|
gunicorn 실행(백그라운드) | gunicorn --bind unix:/tmp/gunicorn.sock config.wsgi:application --daemon
|
문제 파악[편집 | 원본 편집]
static 이 안불러와짐.[편집 | 원본 편집]
runserver에서 잘 나오던 이미지, 스크립트 따위가 서버에 올려두면 안나오는 경우가 있다. 이때 개발자도구의 'network'를 살펴보면 해당 요소에서 404 에러가 뜨는데, 이는 확장자가 PNG인데, png로 불러왔다든가 하는.. 굉장히 사소한 오류에서 기인한다.
포트가 사용중임[편집 | 원본 편집]
sudo fuser -k 포트번호/tcp 를 통해 해당 포트를 사용하는 프로세스를 종료시킬 수 있다.