Django + Nginx + uWSGI 배포
프로그래밍/Python
Django + Nginx + uWSGI 배포
이재만박사
2024. 3. 8. 15:10
1. pip freeze > requirements.txt
a. pip freeze 는 현재 설치되어 있는 python 라이브러리 목록 표시
b. requirements.txt 에 목록을 써서 배포할 때 표시
c. github에 requirements.txt 커밋
2. settings.py에서 ALLOWED_HOSTS = ['*'] 로 표시
3. 리눅스에서 다음 명령어 실행
a. sudo apt update
b. sudo apt upgrade
c. sudo apt install build-essential, pip3, python3
d. sudo pip3 install --upgrade pip
4.홈 디렉토리에 소스코드 다운로드
a. git clone https://github.com/xxxx
5. 가상환경 생성
a. sudo apt install virtualenv
b. virtualenv -p python3 venv
c. source venv/bin/activate
6. 패키지 설치
a. pip install -r requirements.txt
b. 설치하다가 pkg-config 없다고 에러나면 pkg-config 설치
i. sudo apt install pkg-config
c. 설치하다가 Command ‘pkg-config --exists mariadb' 뜨면 default-libmysqlclient-dev 설치
i. sudo apt install default-libmysqlclient-dev
7. 서버 실행
a. python manage.py runserver 0.0.0.0:8000
b. 확인 후 종료
8. 웹서버와 연결할 uwsgi 설치
a. pip install uwsgi
9. uwsgi.ini 작성 후 저장
a. vi uwsgi.ini
b. chdir=/home/ubuntu/{프로젝트폴더}
module={프로젝트내 파일이름}.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/home/ubuntu/{프로젝트폴더}/django.log
home=/home/ubuntu/{프로젝트 폴더}/venv
virtualenv=/home/ubuntu/pybo/venv
socket=/home/ubuntu/{프로젝트 폴더}/uwsgi.socket
chmod-socket=666
프로젝트 폴더 - manage.py가 있는 경로 디렉토리 이름
프로젝트 내 파일 이름 - settings.py 가 있는 경로 디렉토리 이름
c. chdir=/home/leejae/pybo
module=icube.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/home/leejae/pybo/django.log
home=/home/leejae/pybo/venv
virtualenv=/home/leejae/pybo/venv
socket=/home/eejae/pybo/uwsgi.socket
chmod-socket=666
i. xcube2 내의 pybo 디렉토리 안에 icube 프로젝트 생성시 작성
d. uwsgi --ini uwsgi.ini 입력
[uWSGI] getting INI configuration from uwsgi.ini 뜨면 통신 정상
10. nginx 설치
a. sudo apt install nginx
11. nginx.conf 수정
a. sudo vi /etc/nginx/nginx.conf
http {
upstream django {
server unix:/home/leejae/pybo/uwsgi.sock;
}
}
입력
c. uwsgi 사용하면 uwsgi.sock 생성 후 nginx 하고 연결됨
12. default 수정
a. sudo vi /etc/nginx/sites-enabled/default
b. location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass django;
}
location /static/
alias /home/xcube2/pybo/pybo/static;
}
location /media/ {
alias /home/leejae/pybo/pybo/media;
}
13. nginx 재시작
a. sudo service nginx restart
14. python 서버 실행 - 외부 접속을 위해 0:8000 으로 시작해야 함
a. python manage.py runserver 0:8000
15. 접속 후 확인