최근 Python 웹 개발이 필요한 혁신적인 프로젝트를 해야 했기 때문에 매우 다재다능한 Python 웹 프레임워크인 django를 공부했습니다.
ngix가 왜 필요한가요?
먼저 django만 사용하면 웹사이트 구축을 위해 이 세 가지를 결합해야 하는 이유에 대해 이야기해 보겠습니다. 예를 들어 일부 정적 리소스를 요청해야 한다면 django가 필요합니다. 이를 모두 처리하면 요청이 합리적으로 분산되지 않으며 ngix가 이 문제를 해결할 수 있습니다(이 프로젝트는 로드 밸런싱을 고려할 필요가 없는 것 같습니다~~ 하지만 개선). 성능은 항상 필요함), ngix는 구성을 통해 일부 동적 요청을 보낼 수 있습니다. Django가 이를 처리하고 정적 요청을 직접 처리해야 하는 경우에도 웹사이트에서 PHP 페이지를 실행해야 한다면 ngix가 확실히 좋은 선택입니다. . PHP 요청은 처리를 위해 Apache에 배포되고 Apache는 소켓 포트를 통해 통신합니다. 그런 다음 처리된 결과를 클라이언트에 반환합니다.
그럼 uwsgi는 왜 필요한가요?
WSGI는 웹 서버 게이트웨이 인터페이스입니다. 웹 서버(예: nginx)와 애플리케이션 서버(예: uWSGI 서버) 간의 통신을 위한 사양입니다. 그러면 uwsgi는 uwsgi와 WSGI 프로토콜을 모두 구현하는 웹 서버입니다. 간단히 말하면 uwsgi를 사용하면 uwsgi에서 django를 시작할 수 있고, ngix는 포트를 통해 uwsgi와 통신합니다. 이 과정에서 gjango는 wsgi 서버의 기능을 구현하고 ngix는 wsgi 클라이언트의 기능을 구현합니다. 웹 내부에서 ngix는 서버 역할을 합니다 (컴퓨터의 많은 소프트웨어 통신은 클라이언트-서버 모드입니다. 예를 들어 파일 리소스는 서비스이고 애플리케이션은 이 서비스를 호출하기 위해 해당 프로토콜을 구현합니다). 이는 ngix와 django 간의 uwsgi 전송을 실현합니다.
ngix가 django와 직접 통신하도록 하면 어떨까요?
uWSGI는 wsgi 프로토콜이나 fcgi 프로토콜을 사용하지 않고 대신 약 10배 강력하다고 알려진 자체 uwsgi 프로토콜을 생성합니다. fcgi 프로토콜로.
uWSGI의 주요 기능은 다음과 같습니다.
◆초고속 성능.
◆낮은 메모리 사용량(apache2 mod_wsgi의 절반 수준으로 측정됨)
◆여러 앱 관리.
◆상세 로그 기능(앱 성능 및 병목 현상 분석에 활용 가능)
◆ 고도로 맞춤설정 가능합니다(메모리 크기 제한, 특정 횟수 제공 후 다시 시작 등).
이 세 가지의 원칙은 다음과 같습니다.
<span><code>the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django</code></span>
배포 시작
1. ngix 설치 sudo apt-get install ngix
내 머신이 있기 때문에 또한 apache도 있습니다. 다음과 같이 ngix의 수신 포트를 8080
으로 수정해야 합니다
server { listen 8080 default_server; listen [::]:8080 default_server ipv6 root /var/ngix; #将根目录改为/var/ngix index index.html index.htm; }
2 .Install django
파이썬 자체 패키지 관리자 easy_install을 사용하여 easy_install django를 설치하면 최신 버전이 자동으로 설치됩니다
3. uwsgi 설치
<code>apt-get install python-dev #不安装这个,下面的安装可能会失败 pip install uwsgi 如果是apt-get安装就需要 sudo apt-get install uwsgi-plugin-python </code>도구가 설치되면 프로젝트 구성을 시작할 수 있습니다. 제가 사용하는 개발 환경은 자동으로 django 프로젝트를 생성할 수 있는 pycharm입니다. django를 실행할 필요가 없습니다. admin.py는 해당 프로젝트 파일을 생성합니다. 다음은 내 프로젝트
.
└── myproject
├── app │ ├── admin.py
│ ├── __init__.py
│ ├── 마이그레이션
│ │ └── __init__.py
│ ├── models.py
│ ├── 테스트.py
│ └── views.py
├── db.sqlite3
├── Manage.py
├── myproject
│ ├── django .xml
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── settings.py
│ ├── settings.pyc
│ ├── urls .py
│ ├── urls.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
├── 템플릿
└── test.py
django.xml 파일 내용은 다음과 같습니다.
소켓을 사용하여 ngix와 통신합니다. 포트 번호는 로컬 포트 8630입니다.
<uwsgi> <socket>127.0.0.1:8630</socket> <chdir>/var/ngix/myproject/myproject</chdir> <pythonpath>..</pythonpath> <module>wsgi</module> </uwsgi> 这里需要注意的是wsgi模块,网上很多都是错误的,直接用自动生成的就行。
그런 다음 ngix의 구성 파일에 추가해야 합니다
uwsgi는 ngix와 함께 제공되는 모듈입니다
location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8630; }
ngix를 다시 시작하세요. 서비스를 시작한 다음 uwsgi 서비스를 시작합니다.
$ uwsgi -x django.xml --plugin python
필요 django.xml이 있는 디렉토리에서 실행
마지막으로 브라우저에 127.0.0.1:8080을 입력하면 django 디버깅 페이지가 나옵니다~~
하루의 고민 끝에 완료
기타 배운 내용 요약: /etc/dpkg/info/에서 해당 설치 파일을 삭제하여 적절한 하위 문제를 해결합니다. 프로세스 시작 오류입니다. 삭제한 후에는 자동으로 제거해야 합니다
마지막으로 배포는 정말 큰 함정입니다! ! ! ! ! ! ! !
데이터 공유: wsgi 개념 uwsgi 개념 nginx 및 uWSGI 기반 Ubuntu에 Django 배포
uwsgi를 감독자 관리에게 넘겨주는 방법 available-modifier-requested-0 솔루션
uwsgi 매뉴얼
uwsgi를 사용한 django 배포에 관해 자주 묻는 질문 요약
Django 중국어 튜토리얼 더 완전한 영어 튜토리얼을 읽는 것이 좋습니다
위 내용은 제가 참고한 정보입니다
위 내용을 포함하여 ngix uwsgi django 조합 웹사이트 구축을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.