프로그래밍/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. 접속 후 확인