이 글은 주로 Django의 nginx+uwsgi 배포에 대한 모든 문제점을 소개합니다(요약). 이제 꽤 괜찮다고 생각해서 공유해 보겠습니다. 보러오세요
최근 여름방학 동안 작성한 작은 프로젝트가 완성되어 클라우드 서버에 올려볼까 고민하다가 그냥 python3 매니저 runserver 0.0을 실행하면 될 것 같았습니다. 0.0:80 드디어 완료되었습니다. 이는 Django의 개발 모드에만 적용되며 이 경우 배포에는 웹 서버가 필요합니다. nginx
nginx를 사용했어요?
왜 nginx인가?
우선 작고, 매우 가볍고, 사용하기 쉽고, Apache만큼 복잡하지 않다고 생각하며, 인터넷에 Django를 배포하려면 nginx를 권장합니다.
Installation
여기에서는 건너뛰겠습니다. Linux 사용자는 소스 코드 설치를 권장합니다. 명령 설치가 nginx의 Taobao 2차 개발인 것처럼 보일 수 있기 때문입니다. 개인적으로는 여전히 원본 버전을 사용하는 것이 좋습니다.
uwsgi
이게 왜 아직도 필요한가요
간단히 말하면, nginx는 역방향 프록시 서버로 무엇을 할 수 있나요? 80과 같은 포트를 수신하려면 8000과 같은 역방향 프록시 포트를 구성하면 됩니다. 이런 방식으로 포트 80에 대한 모든 외부 사용자의 액세스는 실제로 포트 8000에서 데이터를 요청하지만 사용자는 실제로 통신하지 않습니다. 포트 8000. , 하지만 이 브리지는 80을 통과했습니다. 현재로서는 이것이 내 실제 포트를 숨길 수 있다고 생각합니다. 제안 사항이 있으면 메시지를 남겨주세요.
이 경우 실제로는 단일 사용자만 액세스할 수 있으므로 여러 사용자가 동시에 액세스할 수 있는 도구가 필요합니다. 바로 uwsgi입니다.
설치 방법은 무엇인가요?
pip install uwsgi
구성 파일
먼저 내 프로젝트의 파일 상태를 보여드리겠습니다.
FlyCold ├── FlyCold │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── manage.py ├── SchoolBuy │ ├── admin.py │ ├── forms.py │ ├── __init__.py │ ├── models.py │ ├── urls.py │ └── views.py └── templates
아래 설명은 간소화된 디렉터리 트리, 생성된 프로젝트 이름입니다. FlyCold의 경우 생성된 FlyCold 하위 디렉터리와 SchoolBuy 하위 디렉터리가 생성됩니다. 내 기본 코드는 SchoolBuy에 있고, settings.py는 Flycold 하위 디렉터리에 있으며, Manager.py는 FlyCold 루트 디렉터리에 있습니다.
설치 후 다음 내용으로 구성 파일을 만듭니다.
# myweb_uwsgi.ini file [uwsgi] # Django-related settings socket = :8080 #真实服务的端口 # Django项目根目录 (绝对路径) chdir = /home/lyt/FlyCold # wsgi.py文件在项目中的位置 module = FlyCold.wsgi # process-related settings # master master = true # 运行的进程数 processes = 4 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true
이 .ini 파일은 시작 시 어디에나 배치할 수 있습니다. uwsgi --ini ***.ini
구성 nginx
nginx.conf를 찾아 다음 내용을 작성하세요
server { #这里是访问时用到的端口 listen 80; server_name localhost; charset UTF-8; #这块存让日志文件 access_log /var/log/nginx/SchoolBuy_access.log; error_log /var/log/nginx/SchoolBuy_error.log; client_max_body_size 75M; location / { include uwsgi_params; #同uwsgi内容 uwsgi_pass 127.0.0.1:8001; #链接超时时间 uwsgi_read_timeout 30; } }
이런 식으로 nginx를 다시 시작하고 포트 80에 접속하면 효과를 볼 수 있습니다.
아직 질문이 있나요?
웹페이지의 정적 리소스에 액세스할 수 없다는 사실을 발견했을 수도 있습니다! ! 예를 들어, 관리 페이지는 매우 간단합니다. 이는 nginx+uwsgi+Django의 경우 nginx를 Django의 정적 리소스 처리를 위한 프록시로 사용할 수 없기 때문입니다. 간단히 말해서, Django는 이러한 종류의 작업을 수행하도록 허용되어서는 안 됩니다. 왜냐하면 nginx가 정적 리소스를 더 잘 처리할 수 있기 때문입니다. 정적 리소스의 경우 nginx가 이를 처리하도록 하세요.
일반적으로 정적 리소스에는 /media/로 시작하는 링크와 /static/으로 시작하는 링크라는 두 가지 유형의 정적 리소스가 있습니다. 정적은 일부 웹 사이트 원본 이미지, 비디오, js 및 CSS 파일을 처리하는 데 사용됩니다. Django 자체는 이러한 종류의 링크를 지원합니다. 그러면 /static/으로 시작하는 파일을 처리하기 위해 Django를 끄는 방법은 매우 간단합니다. setup.py에서 DEBUG 값을 False로 변경하면 Django는 /static/ 파일을 처리하지 않습니다.
/media/는 어떻습니까? 일반적으로 사용자가 업로드한 사진을 저장하고, 웹페이지에 표시할 때 /media/를 사용하고, settings.py에
MEDIA_URL = '/media/' #访问的前缀链接 MEDIA_ROOT = os.path.join(BASE_DIR, '../media') #存放文件的具体位置
를 설정한 다음 url.py에
from django.conf import settings from django.conf.urls.static import static if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
을 추가합니다
이것이 의미하는 바는 DEBUG=True일 때 /media/ 파일이 구문 분석되고 파일이 저장되는 위치가 두 번째 매개변수라는 것입니다.
이렇게 하면 프로덕션 환경에 배포할 때 DEBUG를 False로 변경하기만 하면 Django는 정적 및 미디어를 처리하지 않습니다.
정적 파일 수집
Django에는 nginx 분석을 용이하게 하기 위해 애플리케이션에서 사용되는 모든 정적 파일을 수집할 수 있는 도구가 있습니다. 구체적으로:
setting.py에서
Set STATIC_ROOT = os.path.join(BASE_DIR, '../collectedstatic')
이런 방식으로 수집된 정적 파일은 위 디렉터리에 저장됩니다. 이 도구를 실행하는 방법은 무엇입니까? python3 Manager.pycollectstatic
정적 파일을 구문 분석하도록 nginx 구성마찬가지로 nginx.conf
먼저 파일 상단에 사용자 루트
문을 추가하여 루트 사용자가 nginx를 실행할 수 있도록 합니다. 그렇지 않으면 정적 파일에 액세스할 때 메시지가 표시될 수 있습니다. 권한 없음
두 번째로 위에서 언급한 구성 파일 위치/앞에 다음 내용을 추가하세요location /static/ { autoindex on; alias /root/SchoolBuyWeb/collectedstatic/; } location /media/ { autoindex on; alias /root/SchoolBuyWeb/media/; }
별칭에 주의한 다음 설정한 디렉터리와 일치시키세요!
nginx를 다시 시작하면 이제 괜찮습니다~~
🎜🎜🎜
위 내용은 nginx+uwsgi(요약)_nginx를 사용하여 Django 배포와 관련된 모든 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!