장고:우분투에 올리기(nginx 사용): 두 판 사이의 차이

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동
92번째 줄: 92번째 줄:
|<code>sudo rm /etc/nginx/sites-enabled/default</code><br>
|<code>sudo rm /etc/nginx/sites-enabled/default</code><br>


<code>sudo ln -s /etc/nginx/sites-available/mysite</code>
<code>sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/default</code>
|-
|-
|확인 및 변동사항 적용
|확인 및 변동사항 적용

2022년 7월 7일 (목) 14:56 판

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

  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 &

문제 파악

static 이 안불러와짐.

runserver에서 잘 나오던 이미지, 스크립트 따위가 서버에 올려두면 안나오는 경우가 있다. 이때 개발자도구의 'network'를 살펴보면 해당 요소에서 404 에러가 뜨는데, 이는 확장자가 PNG인데, png로 불러왔다든가 하는.. 굉장히 사소한 오류에서 기인한다.

포트가 사용중임

sudo fuser -k 포트번호/tcp 를 통해 해당 포트를 사용하는 프로세스를 종료시킬 수 있다.