django 배치 nginx + uwsgi / gunicorn
8245 단어 django
환경:
win10 pycharm2017 ubuntu14
배치 전 이해:
python 전문 처리
tomvat java
nginx 상대 apache 의 장점:
경량급, 같은 웹 서비스 로 apache 보다 더 적은 메모리 와 자원 을 차지 합 니 다.
병발 저항, nginx 처리 요청 은 비동기 비 차단 이 고 apache 는 차단 형 이 며 높 은 곳 에서 nginx 를 보 내 면 저 자원 저 소모 고성능 을 유지 할 수 있 습 니 다.
고도 모듈 화 된 디자인 으로 작성 모듈 이 상대 적 으로 간단 합 니 다 지역 사회 가 활발 하고 각종 고성능 모듈 이 신속하게 출시 되 었 습 니 다 apache 상대 nginx 의 장점:
rewrite, nginx 의 rewrite 보다 강하 다 모듈 이 너무 많아 서 기본적으로 생각 나 는 것 을 모두 찾 을 수 있다 bug 가 적 고 nginx 의 bug 가 상대 적 으로 많 습 니 다 초 안정 존재 하 는 이유 입 니 다. 일반적으로 성능 이 필요 한 웹 서 비 스 는 nginx 를 사용 합 니 다.성능 이 필요 없 이 안정 만 원한 다 면 apache 하 세 요.후자 의 각종 기능 모듈 은 전자 보다 실현 된다. 예 를 들 어 ssl 의 모듈 은 전자 보다 좋 고 설정 할 수 있 는 항목 이 많다.
여기 서 주의해 야 할 것 은 epoll (freebsd 는 kqueue) 네트워크 IO 모델 은 nginx 처리 성능 이 높 은 근본 적 인 이유 이지 만 모든 상황 에서 epoll 이 전승 을 거 둔 것 이 아니 라 그 자체 가 정적 서 비 스 를 제공 하 는 것 은 몇 개의 파일 만 있 을 뿐 apache 의 select 모델 은 epoll 보다 더 높 은 성능 을 가 질 수 있 습 니 다.물론 이것 은 인터넷 IO 모델 의 원리 에 따라 만 든 가설 일 뿐 진정한 응용 은 실측 한 다음 에 다시 이야기 해 야 한다.
일반 배치 방안:
nginx + uwsgi
nginx+gunicorn
개인 체험:
gunicorn 배치 설정 이 상대 적 으로 간단 합 니 다. nginx 는 대량의 정적 파일 을 처 리 했 습 니 다. gunicore 는 몇 안 되 는 요청 만 처리 하고 경량급 웹 응용 사이트 에 적합 합 니 다.
uwsgi 배치 설정 은 상대 적 으로 복잡 하지만 여전히 경량급 웹 에 있어 서 차이 가 많 지 않 습 니 다. 설정 이 복잡 하기 때문에 높 은 가소성 과 선택 성 을 결정 하고 성능 도 gunicorn 보다 좋 을 것 입 니 다.
uwsgi 와 gunicorn
본 고 는 아 리 운 (ubuntu 14) + nginx + uwsgi 배 치 를 중심 으로
프로 세 스: 서버 (클 라 우 드 서버, 네트워크 ip 있 으 면 외부 네트워크 로 접근 가능) > my sql - server 설치 > nginx 설치 > virtuanenv 설치 > git 설치 > django 프로젝트 clone 을 Linux 에 설치 > uwsgi 설치 > 각 설정 수정 > 배치 완료, 외부 네트워크 접근
서버:
아 리 클 라 우 드 서버 구 매 (Ubuntu 시스템 또는 습관 적 으로 구축 가능 한 서버 시스템)
아 리 클 라 우 드 서버: 클 라 우 드 서버 ECS > 보안 그룹 규칙 추가 > http 프로 토 콜 의 80 포트 추가
루트 가 아 닌 사용자 에 게 배치 하 십시오. 그렇지 않 으 면 안전 하지 않 습 니 다. 나중에 uwsgi 도 warning 할 것 입 니 다. 루트 에서 uwsgi 를 실행 할 것 입 니 다.
\ # 루트 사용자 아래 에서 이 명령 을 실행 하여 새 사용 자 를 만 듭 니 다. yzh 는 사용자 이름 입 니 다.root@localhost: ~ \ # useradd - m - s / bin / bash yzh \ # 새로 만 든 사용 자 를 슈퍼 권한 그룹 에 추가 합 니 다.root@localhost: ~ \ # usermod - a - G sudo yzh \ # 새 사용자 에 게 비밀 번 호 를 설정 합 니 다 \ # 비밀 번 호 를 잃 었 을 때 문자 가 표시 되 지 않도록 주의 하 세 요. 키보드 가 고 장 났 다 고 생각 하지 마 세 요.정상 입력 하면 됩 니 다.root@localhost: ~ \ # passwd 1234 \ # 만 든 새 사용자 로 전환root@localhost: ~ \ # su - yzh \ # 전환 에 성 공 했 습 니 다. @ 기호 앞 에는 루트 가 아 닌 새 사용자 이름 이 있 습 니 다.yzh@localhost:~$
새 사용 자 를 만 들 고 전환 하 는 데 성 공 했 습 니 다.새 서버 라면 버 전이 너무 낡 아서 뒤에 소프트웨어 를 설치 하 는 데 문제 가 생기 지 않도록 시스템 을 업데이트 하 는 것 이 좋다.다음 두 명령 을 실행 합 니 다:
yzh@localhost:~$ sudo apt-get updateyzh@localhost:~$ sudo apt-get upgrade
다음은 필요 한 소프트웨어 를 설치 할 수 있 습 니 다. 여기 서 우리 가 필요 로 하 는 소프트웨어 는 my sql - server, Nginx, Git 과 virtualenv 가 있 습 니 다.
sudo apt-get install mysql-server
sudo apt isntall mysql-client
sudo apt install libmysqlclient-dev
sudo apt-get install nginxsudo pip install virtualenv
sudo apt-get install Git
my sql - server: 데이터 베 이 스 는 많 지 않 습 니 다.
CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
먼저 데이터 베 이 스 를 만 들 고 데이터베이스 사용자 이름, 비밀번호, 데이터베이스 이름 이 개발 시 와 일치 하 는 것 을 권장 합 니 다. 프로젝트 의 setting. py 의 수정 을 줄 일 수 있 습 니 다.
관련 강좌
https://www.linuxidc.com/Linux/2017-06/144805.htm
Nginx 는 정적 파일 요청 을 처리 하 는 데 사 용 됩 니 다.예 를 들 어 우리 가 블 로그 글 의 상세 한 페이지 를 방문 할 때 서버 는 다음 두 가지 요청 을 받 습 니 다.
글 의 상세 한 정 보 를 표시 합 니 다. 이 정 보 는 보통 데이터베이스 에 저장 되 어 있 기 때문에 데이터 베 이 스 를 호출 하여 데 이 터 를 가 져 와 야 합 니 다.
그림, css, js 등 서버 의 한 폴 더 에 존재 하 는 정적 파일.
이전 요청 에 대해 블 로그 글 의 데 이 터 는 Django 를 통 해 데이터베이스 에서 가 져 와 야 합 니 다. Nginx 가 처리 하지 못 하면 이 요청 을 Django 에 전송 하여 Django 가 처리 하도록 합 니 다.다음 정적 파일 에 대한 요청 은 정적 파일 이 있 는 폴 더 로 가 져 오 면 Nginx 가 대신 처리 하고 Django 를 귀 찮 게 하지 않 습 니 다.
Django 로 정적 파일 을 가 져 오 는 데 는 시간 이 많이 걸 리 지만 Nginx 는 효율적으로 처리 할 수 있 습 니 다. 이것 이 바로 우리 가 Nginx 를 사용 해 야 하 는 이유 입 니 다. (물론 그 기능 은 이것 뿐만 이 아 닙 니 다)
관련 강좌
https://www.linuxidc.com/Linux/2016-09/134907.htm
virtualenv 는 python 가상 환경 을 구축 하여 프로젝트 분리 개발 에 편리 하도록 소개 하지 않 습 니 다.
가상 환경 구축 강좌:
https://www.cnblogs.com/technologylife/p/6635631.html
Git 일반 시스템 은 windows 의 git 와 같은 기능 을 가지 고 있 습 니 다. GitHub 의 프로젝트 원본 을 다운로드 하 는 데 사 용 됩 니 다.
자신의 python 프로젝트 를 github 에 올 리 는 방법 에 대해 서 는 pycharm 통합 기능 을 사용 하여 항목 을 github 에 올 리 는 것 이 서버 에 쉽게 올 릴 수 있 는 튜 토리 얼 이 있 습 니 다.
https://www.cnblogs.com/Jacck/p/7889326.html
프로젝트 를 원본 코드 에 올 리 기 전에 windows 에서 프로젝트 의 모든 python 의존 팩 을 추출 합 니 다.
서버 에 한꺼번에 설치 하 는 것 을 편리 하 게 하기 위해 서, 우 리 는 모두 requirements. txt 라 는 텍스트 파일 에 의존 할 것 입 니 다.로 컬 가상 환경 활성화 (가상 환경 을 사용 했다 면) 프로젝트 의 루트 디 렉 터 리 에 들 어가 실행 합 니 다.
pip freeze > requirements.txt
명령:
프로젝트 루트 디 렉 터 리 에 쓰기
requirements. txt 모든 의존 패키지 와 대응 하 는 버 전
추천 디 렉 터 리 구조:
/home/yzh/
sites/
도 메 인 이름. com /
env/
django 프로젝트 이름 /
다음은 가상 환경 디 렉 터 리 동급 폴 더 아래
git clone
https://github.com/xxxx/xxxxx
가상 환경 에 진입 하 다
항목 루트 디 렉 터 리 포함 에 들 어가 기 (
requirements. txt 파일):
pip install - r requirements. txt 모든 의존 설치
django 의 setting 파일 의 수정:
DEBUG
=
False
ALLOWED_HOSTS
=
[
'127.0.0.1'
,
'localhost '
,
'. 도 메 인 이름. com'
]
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
정적 파일 수집
가상 환경 에서 계속 실행
python manage.py collectstatic
static 디 렉 터 리 로 정적 파일 수집 명령:
데이터베이스 생 성
python manage.py makemigration
python manage.py migrate
명령 으로 데이터베이스 파일 만 들 기:
슈퍼 유저 만 들 기
python manage.py createsuperuser
Django 관리 배경 에 들 어 갈 수 있 도록 슈퍼 사용 자 를 만 들 라 고 명령 합 니 다.이것 은 현지 개발 때 와 같다.
설정 nginx
uc_nginx.conf
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name ip ; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /media; # django media
}
location /static {
alias /static; # django static
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include uwsgi_params; # the uwsgi_params file you installed
}
}
이 프로필 을 nginx 시작 프로필 에 추가 합 니 다.
sudo ln -s /conf/nginx/uc_nginx.conf /etc/nginx/conf.d/
다음은
uwsgi 와 gunicorn 배치 의 두 방향 중 하 나 를 선택 하 십시오.
nginx + uwsgi 배치 사용 하기
설치
pip install uwsgi
테스트
uwsgi --http :8000 --module MxOnline.wsgi
설정 파일 로 uwsgi 시작 하기
uwsgi.ini , :
# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir =
# Django's wsgi file
module = .wsgi
# the virtualenv (full path)
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# the socket (use the full path to be safe
socket = 127.0.0.1:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
virtualenv =
logto = /tmp/mylog.log
:
chdir: ,
module: wsgi
processes:
virtualenv:
uwsgi -i uwsgi.ini uwsgi
배치 완료
프로젝트 코드 를 수정 한 후 uwsgi 를 다시 시작 하여 프로젝트 업 데 이 트 를 완료 해 야 합 니 다.
pkill -f uwsgi
다시 시작 하 는 것 과 같 습 니 다.
nginx + gunicorn 배치 사용 하기
참고 문헌
https://www.zmrenwu.com/post/20/
pip install gunicorn
Gunicorn 으로 서버 프로 세 스 시작 하기:
(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application
배치 완료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.