django 배치 nginx + uwsgi / gunicorn

8245 단어 django
windows 에서 개발 한 후 Liux 에 배치 합 니 다.
환경:
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

배치 완료

좋은 웹페이지 즐겨찾기