내용으로 건너뛰기
GaramX
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
현재 위치:
home
»
python
»
django
»
nginx
추적:
python:django:nginx
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Nginx / uWsgi / Django 연결하기 ====== * [[https://wikidocs.net/7387|nginx 및 uWSGI연동]] * [[https://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html|uWSGI와 nginx를 사용하여 Django와 웹 서버 설정하기]] * [[https://twowix.me/85|runserver로 실제 서버를 돌리면 안되는 이유]] ===== 설정 ===== ==== uWSGI 실행 테스트 ===== <code bash> uwsgi --http :8000 --home /home/mama/.pyenv/versions/maro --chdir /home/mama/garam/maro \ --static-map /static=/home/mama/garam/maro/gov/static --module conf.wsgi </code> * --http :8000 [포트번호지정] * --home [virtualenv 가상환경 디렉토리를 지정] * --chdir [manage.py가 들어있는 Django 프로젝트 디렉토리를 지정] * --static-map [static 디렉토리 지정] * --module [WSGI 모듈을 지정] ==== uWSGI 옵션 설정 ==== <code ini /home/foo/garam/run/maro_uwsgi.ini> [uwsgi] uid=foo base=/home/%(uid)/garam # the virtualenv (full path) home=/home/%(uid)/.pyenv/versions/maro chdir=/home/%(uid)/garam/maro module=conf.wsgi:application 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=/var/log/garam/maro_uwsgi.log # UNIX socket 파일의 위치입니다. socket file의 위치를 잡아줘도 되며 localhost와 port를 명시해줘도 됩니다. socket=/var/log/garam/maro.sock # UNIX socket 소유자 chown-socket=%(uid):www-data # 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> ===== 서비스 등록 스크립트 생성 ===== **/etc/systemd/system/uwsgi.service** 파일을 아래와 같은 내용으로 생성한다. <code ini /etc/systemd/system/uwsgi.service> [Unit] Description=uWSGI Emperor service [Service] ExecStart=/home/foo/django_test/venv/bin/uwsgi \ --emperor /home/foo/django_test/run User=foo Group=www-data Restart=on-failure KillSignal=SIGQUIT Type=notify NotifyAccess=all StandardError=syslog [Install] WantedBy=multi-user.target </code> **--emperor** 옵션으로 **uwsgi.ini** 파일이 들어있는 디렉토리를 지정한다. ===== uWSGI 서비스 등록 ===== <code bash> sudo systemctl start uwsgi sudo systemctl enable uwsgi </code> ===== uWSGI 서비스 구동 확인 ===== <code bash> systemctl status uwsgi </code> 만약 구동 실패시 에러 로그는 /var/log/syslog에서 확인할 수 있다. ===== Nginx 설정 ===== ==== 사이트 설정 추가 ==== **/etc/nginx/sites-available/django_test** 파일을 아래와 같은 내용으로 생성한다. <code default /etc/nginx/sites-available/django_test> upstream django { server unix:///usr/local/share/pythonblog/config/pythonblog.sock; } server { listen 80 default_server; listen [::]:80 default_server; #server_name www.xxxxxx.com charset utf-8; location / { uwsgi_pass django; include /etc/nginx/uwsgi_params; } location /static { alias /usr/local/share/pythonblog/staticfiles; } } </code> ==== 사이트 추가 ==== <code bash> sudo ln -s /etc/nginx/sites-available/django_test /etc/nginx/sites-enabled </code> ==== nginx 설정 문법 검사 및 재기동 ==== <code bash> sudo nginx -t sudo systemctl restart nginx </code> ==== 방화벽 해제 ==== 사용하는 Port에 대한 방화벽확인 <code bash> sudo ufw delete allow 8000 sudo ufw allow 'Nginx Full' </code> ===== 한 서버에 여러 Django 애플리케이션 ===== ==== 시스템 전역 uWSGI 설치 ==== <code bash> sudo apt-get install python3-dev python3-pip python3-setuptools sudo -H pip3 install uwsgi </code> ==== uWSGI 설정 ==== 여러 애플리케이션의 **.ini** 파일을 **/etc/uwsgi/sites** 디렉토리 한 곳으로 모은다. <code ini> [Unit] Description=uWSGI Emperor service [Service] ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites Restart=on-failure KillSignal=SIGQUIT Type=notify NotifyAccess=all StandardError=syslog [Install] WantedBy=multi-user.target </code> **ExecStart** 변수에서 **--emperor /etc/uwsgi/sites** 옵션을 두는 것이 핵심이다. 시스템 전역적으로 동작하므로 **User**, **Group** 변수 설정을 없앤다. 그리고 시스템 전역의 uWSGI를 이용하므로 가상환경의 uWSGI는 굳이 설치하지 않는다. ==== Nginx 설정 ==== **upstream** 정의 이름이 각 애플리케이션 서버마다 중복되지 않도록 주의한다. **server_name**에서 도메인 이름을 올바로 선언하고 정적파일, 로그파일 등의 절대경로를 정확히 지정한다. ==== 참고문헌 ==== [[https://wikidocs.net/6611|Nginx, uWSGI 배포 - https://wikidocs.net/6611 ]]
python/django/nginx.txt
· 마지막으로 수정됨: 2025/04/15 10:05 저자
127.0.0.1
문서 도구
문서 보기
이전 판
역링크
맨 위로