장고:우분투에 올리기(nginx 사용)

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동

장고! 웹 프레임워크! 틀:장고

  1. 장고:개요
  2. 장고:웹페이지설계
    1. 장고:앱
    2. 장고:url
    3. 장고:model
      1. 장고:DB
      2. 장고:모델 필드
      3. 장고:모델의 변경
    4. 장고:view
      1. 장고:클래스형 뷰, 제네릭 뷰
      2. 장고:view 각종 기능
    5. 장고:template
    6. 장고:static. 정적파일 사용하기
      1. 장고:CSS 사용하기
      2. 장고:JS 사용하기
      3. 장고:글꼴 사용
      4. 장고:부트스트랩
    7. 장고:media. 미디어 파일 사용하기
  3. 장고:관리자페이지
  4. 장고:settings.py
  5. 장고:기능구현
    1. 장고:회원관리
    2. 장고:유저
    3. 장고:커스텀 유저
    4. 장고:소셜로그인
    5. 장고:입력받기
    6. 장고:저장된 내용 활용하기
    7. 장고:변수 내보내기
    8. 장고:글쓰기
    9. 장고:페이징(페이지나누기)
    10. 장고:답변쓰기(댓글쓰기)
    11. 장고:추천,즐겨찾기
    12. 장고:새글(최신글) 나타내기
    13. 장고:썸머노트 설치
    14. 장고:네비게이션 바 만들기
    15. 장고:검색기능
    16. 장고:카테고리 만들기
    17. 장고:사진 올리기
    18. 장고:파일 업로드
    19. 장고:이메일app 만들기
    20. 장고:매직 그리드
  6. 장고:웹서비스
    1. 장고:Git
    2. 장고:리눅스에 올리기
    3. 장고:우분투에 올리기(nginx 사용)
    4. 장고:도커로 올리기
  7. 장고:팁

개요[편집 | 원본 편집]

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 ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/default

확인 및 변동사항 적용 설정파일을 테스트하고,

재시작한다.

sudo nginx -tsudo 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 를 통해 해당 포트를 사용하는 프로세스를 종료시킬 수 있다.