[Python/WEB] 내가 만든 웹 페이지 서버에 배포하기 (3) Django를 uWSGI와 NGINX를 이용해 배포하기
아래와 같은 구성으로 진행됩니다.
[내가 만든 웹 페이지 서버에 배포하기]
(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 포트로 확인하실 수 있습니다.
내용이 부족해 이해하기 힘든 부분이나, 더 추가하길 원하는 부분이 있으시다면 댓글 남겨주세요!
피드백, 틀린 부분 지적 환영입니다 :)