Cloud Computing/WEB

[Python/WEB] 내가 만든 웹 페이지 서버에 배포하기 (3) Django를 uWSGI와 NGINX를 이용해 배포하기

74059 2023. 6. 29. 10:55

아래와 같은 구성으로 진행됩니다.


[내가 만든 웹 페이지 서버에 배포하기]

(1) Django를 활용한 웹페이지 만들기

(2) Django에 DB/Cache 연결하기

(3) Django를 uWSGI와 NGINX를 이용해 배포하기    𖦹현재 포스터𖦹

(4) 내가 배포한 웹으로 HAproxy 구성하기

 

 

[포스터 참고]

(1) Django를 활용한 웹페이지 만들기:  https://hyewon-s-dev.tistory.com/8

 

[Python/WEB] 내가 만든 웹 페이지 서버에 배포하기 (1) Django를 활용한 웹페이지 만들기

아래와 같은 구성으로 포스터 업로드 예정입니다. 참고해주세요. [내가 만든 웹 페이지 서버에 배포하기] (1) Django를 활용한 웹페이지 만들기 𖦹현재 포스터𖦹 (2) Django에 DB/Cache 연결하기 (3) Djan

hyewon-s-dev.tistory.com

 

(2) Django에 DB/Cache 연결하기: https://hyewon-s-dev.tistory.com/9

 

[Python/WEB] 내가 만든 웹 페이지 서버에 배포하기 (2) Django에 DB/Cache 연결하기

아래와 같은 구성으로 포스터 업로드 예정입니다. 참고해주세요. [내가 만든 웹 페이지 서버에 배포하기] (1) Django를 활용한 웹페이지 만들기 (2) Django에 DB/Cache 연결하기 𖦹현재 포스터𖦹 (3) Djan

hyewon-s-dev.tistory.com

 

(4) 내가 배포한 웹으로 HAproxy 구성하기: https://hyewon-s-dev.tistory.com/12

 

[WEB Server/Linux] HAproxy 수동 설치 및 config 파일 구성

아래와 같은 구성으로 진행됩니다. [내가 만든 웹 페이지 서버에 배포하기] (1) Django를 활용한 웹페이지 만들기 (2) Django에 DB/Cache 연결하기 (3) Django를 uWSGI와 NGINX를 이용해 배포하기 (4) 내가 배포

hyewon-s-dev.tistory.com

 


 

 

진행하기에 앞서, 먼저 nginx와 uwsgi에 대해 간단하게 개념 정리 해보겠습니다.

 

NGINX웹 서버 소프트웨어이고, 서버의 경량화를 위해 존재합니다.

uWSGI웹 서버와 파이썬 통신을 위한 게이트웨이로, Django나 Flask와 같이 Python 언어를 웹 서버가 읽지 못하기 때문에, uWSGI를 이용해 NGINX가 Python언어를 이해할 수 있도록 다리 역할을 해줍니다.

(이거 저만 몰랐을지 모르겠는데, uWSGI 읽는 법: 위스기 입니다)

 

 

 

이제 만든 Django를 uWSGI와 NGINX로 배포해보겠습니다. 

 

[진행 환경] Linux CentOS7

uWSGI와 NGINX 설치는 yum을 이용하지 않고 설치하기 때문에, 다른 환경에서 작업하시는 분들께서도 참고 가능하십니다.

 

 

1. uwsgi 수동 설치

수동으로 설치함으로써 로그 위치, 설정 등을 원하는대로 변경할 수 있다는 장점이 있습니다. uwsgi 버전은 가장 latest한 버전을 설치해주었습니다.(2.0.20버전이었네요)

cd /home/user/apps/uwsgi
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar -zxvf uwsgi-latest.tar.gz
cd uwsgi-2.0.20
make

make 하실 때, 1번 포스터를 따라 python 설치를 수동으로 설치하셨다면 에러가 뜨셨을 것입니다.

[에러 메시지]  make: python3: Command not found

Makefile 내의 파이썬 위치를 재설정 해주어야 합니다. uwsgi-2.0.20 아래에 Makefile 파일을 vi 에디터로 열어 아래와 같이 파이썬 위치를 재작성해줍니다.

PYTHON := /home/user/apps/python/python/bin/python3.6

그리고 다시 make 명령어를 입력해주면 정상적으로 설치 되실겁니다.

 

설치된 uwsgi의 데몬 위치는 uwsgi-2.0.20 아래에 있습니다. 버전확인을 통해 설치되었는지 확인해줍니다.

cd /home/user/apps/uwsgi/uwsgi-2.0.20
./uwsgi --version

 

uwsgi 데몬을 실행시킬 때, 길게 입력하는게 번거로우니 alias를 이용해 별칭을 지정해 줍시다.

alias uwsgi=/home/user/apps/uwsgi/uwsgi-2.0.20/uwsgi

 

 

2. uwsgi 실행해보기

django만 runserver 시켰을 때 정상적으로 작동하는 잘 만들어진 프로젝트를, uwsgi와 결합시켰을 때 정상적으로 실행되는지 간단하게 확인해봅니다. chdir에는 django 프로젝트 위치를 작성해주시면 됩니다.

cd /home/user/apps/myweb
uwsgi --http :8000 --chdir /home/user/apps/myweb --module myewb.wsgi

 

그리고 {ip주소}:8000 으로 접속하시게 되면 uwsgi가 적용된 django 프로그램을 보실 수 있습니다.

 

만약, 여기서 css 적용이 안되신다면 아래 링크 참고하시어 collectstatic을 해주시고 재실행 하시면 되실 겁니다.

https://hyewon-s-dev.tistory.com/10

 

[WEB/Error] Django + uWSGI + NGINX + HAproxy 진행 시 CSS 적용 안되는 에러 및 해결 방법 총정리

제대로 정리된게 없어서 진짜 오진장 삽질하고, 이건 써야겠다 하고 생각만 오만번 하다가 이제 정리.. 여기서의 에러는 크롬 검사 눌렀을 때, css 파일 자체가 보이지 않는 상황을 말함. 서버에

hyewon-s-dev.tistory.com

 

uwsgi 종료(할당된 8000 포트 종료)는 pid 번호 찾아서 kill 시켜주시면 됩니다.

netstat -tupln
sudo kill -9 {8000 포트의 PID 번호}

 

 

3. uwsgi.ini 셋팅

위에서 정상적으로 실행된 것을 확인하셨다면, uwsgi.ini 파일을 만들어 uwsgi 실행에 필요한 설정들을 저장해줍니다.

파일 위치는 django 프로그램 만들어둔 바로 아래에 두시면 됩니다. (위 포스터로 따라오고 계신다면 /home/user/aps/myweb 바로 아래에 두시면 됩니다.)

[uwsgi]
#enable-threads = true

# project dir
chdir=/home/user/apps/myweb

# log (if exist this option, yu can execute on background)
daemonize=myweb_uwsgi.log

# Django wsgi module
module=myweb.wsgi

# save socket dir
socket=myweb.sock

# socket access authority
chmod-socket=666

# remove socket file when uwsgi kill
vacuum=true

 

위와 같이 셋팅해준 uwsgi.ini 파일을 이용해 uwsgi를 실행시켜줍니다.

uwsgi --ini uwsgi.ini

/home/user/apps/myweb 아래에 myweb.sock 파일이 생성되었다면, 정상적으로 실행중인 상태입니다.

 

 

4. NGINX 설치

nginx는 따로 포스터를 만들어둔게 있어서, 아래 링크 참고하시어 설치하고 오시면 됩니다. (NGINX 수동설치)

https://hyewon-s-dev.tistory.com/2

 

[WEB Server/Linux] NGINX 수동 설치 및 HTTP/HTTPS + stats page 적용

CentOS에서 yum을 이용하지 않고 수동으로 설치합니다. [설치 환경] CentOS7 1. NGINX 파일 설치 및 압축 풀기 NGINX 버전 1.16.1로 설치 진행했습니다. 아래 링크에서 버전 확인하고 설치하시면 될 것 같습

hyewon-s-dev.tistory.com

 

 

5. NGINX에 uWSGI 적용하기

앞서 django와 uWSGI를 연결한 myweb.sock으로 NGINX를 연결해보겠습니다. nginx.conf 파일을 수정해 주셔야 합니다. (위 포스터 참고하셨다면, make install 이후의 conf 파일은 home/user/apps/nginx/nginx/conf 안에 있습니다.nginx.conf와 nginx.conf.default 둘 다 수정시켜주세요)

upstream django, location /static 추가시켜주시고, location / 은 수정시켜주세요. (80, 443 포트 둘 다)

http {	
    upstream django {
        server unix:/home/user/apps/myweb/myweb.sock;
        # server 0.0.0.0:8000;
    }
    
    server {
    	listen			80;
        server_name		localhost;
        
        location /static {
            alias /home/user/apps/myweb/static;
        }

        location / {
            uwsgi_pass django;
            include /home/user/apps/nginx/nginx/conf/uwsgi_params;
        }
        ...
        ...
    }
    
    server {
        listen       443 ssl;
        server_name  localhost;

        ...
        ...

        location /static {
            alias /home/user/apps/myweb/static;
        }

        location / {
            uwsgi_pass django;
            include /home/user/apps/nginx/nginx/conf/uwsgi_params;
        }
	...
        ...
    }
}

그리고 nginx 재시작 해주시면 django + uwsgi + nginx 적용되신걸 80, 443 포트로 확인하실 수 있습니다.

 

내용이 부족해 이해하기 힘든 부분이나, 더 추가하길 원하는 부분이 있으시다면 댓글 남겨주세요!

 

 

 

피드백, 틀린 부분 지적 환영입니다 :)