문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| python:django:nginx [2023/04/04 14:31] – [Nginx 설정] taekgu | python:django:nginx [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| + | ====== Nginx / uWsgi / Django 연결하기 ====== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | ===== 설정 ===== | ||
| + | |||
| + | ==== uWSGI 실행 테스트 ===== | ||
| + | <code bash> | ||
| + | uwsgi --http :8000 --home / | ||
| + | | ||
| + | </ | ||
| + | * --http :8000 [포트번호지정] | ||
| + | * --home [virtualenv 가상환경 디렉토리를 지정] | ||
| + | * --chdir [manage.py가 들어있는 Django 프로젝트 디렉토리를 지정] | ||
| + | * --static-map [static 디렉토리 지정] | ||
| + | * --module [WSGI 모듈을 지정] | ||
| + | ==== uWSGI 옵션 설정 ==== | ||
| + | |||
| + | <code ini / | ||
| + | [uwsgi] | ||
| + | uid=foo | ||
| + | base=/ | ||
| + | |||
| + | # the virtualenv (full path) | ||
| + | home=/ | ||
| + | chdir=/ | ||
| + | |||
| + | module=conf.wsgi: | ||
| + | env=DJANGO_SETTINGS_MODULE=conf.settings.product | ||
| + | |||
| + | # process-related settings | ||
| + | # uWSGI 프로세스를 master로 돌아가게 해줍니다. | ||
| + | master=true | ||
| + | |||
| + | # maximum number of worker processes | ||
| + | processes=5 | ||
| + | |||
| + | max-requests=5000 | ||
| + | daemonize=/ | ||
| + | |||
| + | # UNIX socket 파일의 위치입니다. socket file의 위치를 잡아줘도 되며 localhost와 port를 명시해줘도 됩니다. | ||
| + | socket=/ | ||
| + | # UNIX socket 소유자 | ||
| + | chown-socket=%(uid): | ||
| + | # UNIX socket에 대한 권한 설정입니다. 666을 해야 실행이 가능합니다. | ||
| + | chmod-socket=660 | ||
| + | # uWSGI를 통해서 생성된 파일들은 삭제하는 옵션입니다. | ||
| + | vacuum=true | ||
| + | |||
| + | # thread 사용을 앱(uWSGI) 내에서 가능하게 해줍니다. | ||
| + | enable-threads = true | ||
| + | # 단일한 python interpreter를 사용하게 하는 옵션입니다. | ||
| + | single-interpreter = true | ||
| + | # master말고 각각의 worker에(master에서 spawn한 자식들) 앱을 로드하는 설정입니다. | ||
| + | lazy-apps = true</ | ||
| + | |||
| + | |||
| + | ===== 서비스 등록 스크립트 생성 ===== | ||
| + | |||
| + | **/ | ||
| + | |||
| + | |||
| + | <code ini / | ||
| + | [Unit] | ||
| + | Description=uWSGI Emperor service | ||
| + | |||
| + | [Service] | ||
| + | ExecStart=/ | ||
| + | --emperor / | ||
| + | User=foo | ||
| + | Group=www-data | ||
| + | Restart=on-failure | ||
| + | KillSignal=SIGQUIT | ||
| + | Type=notify | ||
| + | NotifyAccess=all | ||
| + | StandardError=syslog | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | |||
| + | </ | ||
| + | |||
| + | **--emperor** 옵션으로 **uwsgi.ini** 파일이 들어있는 디렉토리를 지정한다. | ||
| + | |||
| + | ===== uWSGI 서비스 등록 ===== | ||
| + | |||
| + | <code bash> | ||
| + | sudo systemctl start uwsgi | ||
| + | sudo systemctl enable uwsgi | ||
| + | </ | ||
| + | |||
| + | ===== uWSGI 서비스 구동 확인 ===== | ||
| + | |||
| + | <code bash> | ||
| + | systemctl status uwsgi | ||
| + | </ | ||
| + | |||
| + | 만약 구동 실패시 에러 로그는 / | ||
| + | |||
| + | |||
| + | ===== Nginx 설정 ===== | ||
| + | ==== 사이트 설정 추가 ==== | ||
| + | |||
| + | **/ | ||
| + | |||
| + | |||
| + | <code default / | ||
| + | upstream django { | ||
| + | server unix:/// | ||
| + | } | ||
| + | |||
| + | server { | ||
| + | listen 80 default_server; | ||
| + | listen [::]:80 default_server; | ||
| + | |||
| + | # | ||
| + | charset | ||
| + | |||
| + | location / { | ||
| + | uwsgi_pass django; | ||
| + | include / | ||
| + | } | ||
| + | |||
| + | location /static { | ||
| + | alias / | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== 사이트 추가 ==== | ||
| + | |||
| + | <code bash> | ||
| + | sudo ln -s / | ||
| + | </ | ||
| + | |||
| + | ==== nginx 설정 문법 검사 및 재기동 ==== | ||
| + | |||
| + | <code bash> | ||
| + | sudo nginx -t | ||
| + | sudo systemctl restart nginx | ||
| + | </ | ||
| + | |||
| + | ==== 방화벽 해제 ==== | ||
| + | |||
| + | 사용하는 Port에 대한 방화벽확인 | ||
| + | <code bash> | ||
| + | sudo ufw delete allow 8000 | ||
| + | sudo ufw allow 'Nginx Full' | ||
| + | </ | ||
| + | |||
| + | ===== 한 서버에 여러 Django 애플리케이션 ===== | ||
| + | ==== 시스템 전역 uWSGI 설치 ==== | ||
| + | |||
| + | <code bash> | ||
| + | sudo apt-get install python3-dev python3-pip python3-setuptools | ||
| + | sudo -H pip3 install uwsgi | ||
| + | </ | ||
| + | |||
| + | ==== uWSGI 설정 ==== | ||
| + | 여러 애플리케이션의 **.ini** 파일을 **/ | ||
| + | |||
| + | <code ini> | ||
| + | [Unit] | ||
| + | Description=uWSGI Emperor service | ||
| + | |||
| + | [Service] | ||
| + | ExecStart=/ | ||
| + | Restart=on-failure | ||
| + | KillSignal=SIGQUIT | ||
| + | Type=notify | ||
| + | NotifyAccess=all | ||
| + | StandardError=syslog | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | </ | ||
| + | |||
| + | **ExecStart** 변수에서 **--emperor / | ||
| + | |||
| + | 시스템 전역적으로 동작하므로 **User**, **Group** 변수 설정을 없앤다. | ||
| + | |||
| + | 그리고 시스템 전역의 uWSGI를 이용하므로 가상환경의 uWSGI는 굳이 설치하지 않는다. | ||
| + | |||
| + | ==== Nginx 설정 ==== | ||
| + | |||
| + | **upstream** 정의 이름이 각 애플리케이션 서버마다 중복되지 않도록 주의한다. | ||
| + | |||
| + | **server_name**에서 도메인 이름을 올바로 선언하고 정적파일, | ||
| + | |||
| + | ==== 참고문헌 ==== | ||
| + | [[https:// | ||