nginx + uwsgi + centos 배치 django 공략

7327 단어
얼마 전에 django 로 작은 것 을 썼 습 니 다. django 의 완벽 한 구조 체계 와 놀 라 운 admin 관리 인터페이스 덕분에 저 는 아주 적은 코드 로 기능 을 완 성 했 습 니 다.그리고 명령 행 입력
python manage.py runserver 8080

시원 하 게 움 직 이기 시 작 했 습 니 다.
사람 에 게 가 져 다 줄 것 은 아무래도 nginx 에 배치 해 야 합 니 다. 이것 은 관례 때 문 만 이 아니 라 django 자체 가 가지 고 있 는 개발 용 웹 서버 가 불안정 하기 때 문 입 니 다.
운영 엔지니어 로 서 각종 배치 작업 에 능숙 해 야 한다. 나 는 초보 이기 때문에 그것 을 가지 고 연습 하 자.그래서 인터넷 에서 배 치 된 글 을 많이 찾 아 봤 는데 그 절차 에 따라 내 려 오 면 구덩이 가 많 고 하 나 를 채 우 고 또 하 나 를 채 워 서 N 여 만 에 배 치 를 성공 적 으로 했 습 니 다.그 원인 을 규명 하 다
4. 567917. 첫째, 대부분의 글 은 배치 절 차 를 설명 할 뿐 그 중의 원리 에 대해 언급 하지 않 았 다. 나 같은 초보 자 에 게 는 구름 과 안개 속 에 있 는 것 같다
4. 567917. 둘째, 서로 다른 Liux 시스템 버 전에 차이 가 존재 하고 시스템 의존 과 소프트웨어 설치 에 불확실 성 이 존재 하 며 스스로 모색 하 는 것 은 두 가지 법칙 이다
앞 에는 쓸데없는 말 이 너무 많 고, 아래 는 중점 이다.웹 개발 과 배치 에 경험 이 있 는 학생 들 은 생산 환경의 웹 응용 배치 에 대해 웹 응용 + 웹 응용 서버 소프트웨어 + 웹 서버 소프트웨어 의 조합 작업 이 어야 한 다 는 것 을 알 아야 한다.웹 응용 프로그램 은 말 그대로 웹 프로젝트 입 니 다. 이것 은 자바 웹 프로젝트, django 프로젝트 또는 phop 프로젝트 일 수 있 습 니 다.웹 응용 서버 소프트웨어 는 웹 응용 프로그램 을 실행 하 는 곳 입 니 다. 예 를 들 어 자바 용 tomcat 서버, django 용 uwsgi 서버 입 니 다. 정상 적 인 상황 에서 웹 프로젝트 를 응용 서버 소프트웨어 에 배치 하면 대외 적 으로 서 비 스 를 제공 할 수 있 습 니 다.다만 이 경우 외부 모든 요청 은 (동적 요청 이 든 정적 요청 이 든) 웹 애플 리 케 이 션 서버 소프트웨어 로 처리 되 며, 사용자 가 적은 경우 에는 이 정도 면 충분 하지만, 사용자 수가 늘 어 나 면 서버 시스템 의 부하 도 고려 해 야 하 며, 서버 부하 의 균형 적 인 분 배 를 하지 못 하면방문 피크 상황 에서 예측 할 수 없 는 심각 한 결 과 를 초래 할 수 밖 에 없다.이때 가 바로 우리 의 웹 서버 소프트웨어 가 도움 이 될 때 입 니 다. 웹 서버 소프트웨어 에서 흔히 볼 수 있 는 것 은 바로 유명한 apache 와 nginx 입 니 다. 이 를 사용 하여 서버 소프트웨어 와 결합 하면 우 리 는 웹 사이트 의 동정 분 리 를 쉽게 실현 할 수 있 습 니 다. 정적 파일 요청 은 apachee 와 nginx 에 게 맡 깁 니 다.동적 요청 은 apache 와 nginx 에서 해당 하 는 응용 서버 소프트웨어 로 전 송 됩 니 다.그림 으로 표시 하면 다음 과 같다.
웹 응용 서버 소프트웨어
웹 응용 서버 소프트웨어 + 웹 서버 소프트웨어
본 고 는 주로 nginx + uwsgi 가 django 응용 에 서 비 스 를 제공 하 는 것 을 소개 하 는데 apache 를 선택 하지 않 은 이 유 는 회사 의 생산 환경 이 대부분이 nginx 가 서버 소프트웨어 를 만 들 었 기 때문이다.
먼저 본 논문 의 시스템 환경 을 소개 할 필요 가 있 습 니 다. 본 고 는 centos 6.7 + python 2.7.9 + django 1.9 를 사용 합 니 다. 참고 로 배치 배치 배치 가 환경 이 매우 중요 하지만 그 종 류 를 떠 나 지 않 고 원리 + 검색 을 알 면 모든 것 이 간단 해 집 니 다.
django 응용 프로그램 실행
1. Liux 시스템 설치 에 필요 한 소프트웨어 의존
이러한 의존 도가 설치 되 지 않 으 면 python, pip, django, uwsgi 등 소프트웨어 를 뒤에서 컴 파일 할 때 오류 가 발생 할 수 있 습 니 다.아직 이런 의존 간 의 관 계 를 잘 모 르 고 있 습 니 다. 불필요 할 수도 있 지만, 현재 로 서 는 배치 성공 이 왕도 입 니 다!
  sudo yum groupinstall "Development tools"
  sudo yum install openssl openssl-devel sqlite-devel zlib-develbzip2-devel  ncurses-devel readline-devel tk-devel 
  sudo yum install pcre pcre-devel pcre-static

2. 컴 파일 설치 python 2.7
centos 6.7 은 python 2.6 을 가지 고 있 으 며, django 1.9 를 실행 하 는 프로젝트 가 잘못 되 었 습 니 다. 그래서 python 2.7.9 를 다시 컴 파일 하여 설치 하 였 습 니 다.
  sudo ./configure
  sudo make && sudo make install

3. django 설치
  sudo pip install django

기본 다운로드 버 전 은 django 1.9 버 전 입 니 다.pip 의 설치 에 대해 서 는 소개 가 많 지 않 습 니 다. 상기 환경 이 설치 되 어 있 으 면 pip 7.2 를 컴 파일 하여 설치 하 는 것 이 쉽 습 니 다.기본 pip 설치 속도 가 느 리 면 douban 미 러 를 다운로드 원본 으로 사용 할 수 있 습 니 다.
sudo pip install django -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

4. django 실행
django 프로젝트 가 있 는 디 렉 터 리 로 전환 하여 실행 합 니 다.
python manage.py runserver 8080,

그리고 브 라 우 저 에 127.0.0.1: 8080 을 입력 하 십시오. 만약 에 방문 이 성공 하면 django 의 운행 환경 이 정상 적 이라는 것 을 설명 합 니 다.
2. uwsgi 를 이용 하여 서 비 스 를 제공 합 니 다.
1. uwsgi 설치
  sudo pip install uwsgi

2. uwsgi 시작
django 프로젝트 의 홈 디 렉 터 리 로 전환 합 니 다. djano 1.9 를 사용 하고 있다 면
  django-admin startproject  your_proj_name

그러면 홈 디 렉 터 리 에 yourproj_name / wsgi. py 파일.이 때 는 홈 디 렉 터 리 에 만 입력 하 십시오.
  uwsgi --http :8080 --module your_proj_name.wsgi

웹 프로젝트 를 실행 할 수 있 습 니 다. 이 때 탐색 에 127.0.0.1: 8080 을 입력 하면 성공 적 으로 방문 할 수 있 습 니 다. 이 는 응용 서버 배치 가 성공 적 이 고 대외 적 으로 서 비 스 를 제공 할 수 있 음 을 설명 합 니 다.이러한 서 비 스 를 제공 하 는 방식 은 다음 과 같다.
the web client uWSGI Django
대부분의 경우 브 라 우 저 는 uwsgi 와 직접 대화 하지 않 고 nginx 를 중간 장치 로 전송 하거나 처리 요청 을 합 니 다.
nginx
1. nginx 설치
  sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm #  nginx yum 
  sudo yum info
  sudo yum install nginx

2. nginx 가 시작 하 는 프로필 설정
/ etc / nginx / nginx. conf 파일 은 include / etc / nginx / conf. d / 디 렉 터 리 에 있 는 모든 프로필 을 관리 하기 위해 서 / etc / nginx / conf. d / 아래 에 자신의 웹 프로젝트 의 프로필 을 만 듭 니 다. 예 를 들 어 my 를 새로 만 듭 니 다.site. conf 파일.설정 파일 에 다음 정 보 를 입력 하 십시오. (그 중에서 easy sysman 은 제 프로젝트 이름 입 니 다)
server {
  listen 8080;  #   nginx         
  server_name localhost;  #  
  error_log /var/log/easy_sysman/error.log;   #nginx    ,     ,                
  location / {
    include /etc/nginx/uwsgi_params;  
    uwsgi_pass 127.0.0.1:9090;  #      ,      9090  ,   uwsgi     
  }
  #error_page 404 /404.html;
  error_page 500 502 503 504 /50x.html;  
  location = /50x.html {
     root /usr/share/nginx/html;
  }
  location /static/ {
    alias /var/www/easy_sysman/static/;   #          
  }
  location /media/ {  
    alias /var/www/easy_sysman/media/;    #      ,         
  }
}

설정 파일 을 다 쓴 후에 설정 파일 의 정확성 을 확인 해 야 합 니 다.
nginx -t -c /etc/nginx/nginx.conf 

3. nginx 설정 디 렉 터 리 에 정적 파일 동기 화
먼저 django 프로젝트 setting. py 를 수정 하고 증가 합 니 다.
 STATIC_ROOT = '/var/www/easy_sysman/static/'

명령 줄 에 입력
 python manage.py collectstatic  

모든 정적 파일 을 nginx 의 색인 디 렉 터 리 로 자동 으로 복사 합 니 다.
4. uwsgi 시작:
django 프로젝트 디 렉 터 리 로 전환
uwsgi --socket 9090 --module easy_sysman.wsgi

더 복잡 한 프로필 로 시작 할 수 있 습 니 다. uwsgi - to - run - with - a - ini - file 을 참고 하 십시오.
5. nginx 시작
sudo service nginx start 

서버 ip: 8080 / 에 접근 하면 페이지 가 나타 날 수 있 습 니 다. 안 되면 검사 / var / log / easysysman / error. log 의 오류 내용 을 조금씩 수정 합 니 다.
이러한 서비스 제공 방식 은 다음 과 같다.
the web client the web server the socket uWSGI Django
밟 은 구덩이
1. nginx 를 시작 하 는 중 오류 발생
오류 로 그 를 볼 때 connect () to 127.0.0.1: 9090 failed (13: Permission denied) while connecting to upstream 의 오류 원인 은 selinux 입 니 다./ usr / sbin / status 를 눌 러 서 selinux 상 태 를 봅 니 다. enable 은 해결 방법 이 setenforce 0 이 고 getenforce 가 상 태 를 permissive 로 확인 하면 정상적으로 접근 할 수 있 을 것 이 라 고 설명 합 니 다.
2. 방화벽
centos 최소 화 설 치 는 기본적으로 firewalld 서 비 스 를 시작 하여 다른 기계 에서 웹 응용 프로그램 에 접근 할 수 없습니다.첫 번 째 반응 은 iptables 를 닫 고 시도 해 보 는 것 입 니 다. 그러나 그 자체 에 iptables 서 비 스 를 설치 하지 않 았 고 나중에 야 firewalld 가 있다 는 것 을 알 게 되 었 습 니 다.
 systemctl stop firewalld ;systemctl mask firewalld 

위 명령 을 입력 하여 해결
3. django 실행 오류
Traceback (most recent call last):File "", line 1, in 
File "/usr/lib/python2.6/site-packages/django/__init__.py", line 1, in 
from django.utils.version import get_versionFile "/usr/lib/python2.6/site-packages/django/utils/version.py", line 7, in 
from django.utils.lru_cache import lru_cacheFile "/usr/lib/python2.6/site-packages/django/utils/lru_cache.py", line 28
fasttypes = {int, str, frozenset, type(None)},
^SyntaxError: invalid syntax

해결 방법 은 python 2.7 설치 입 니 다.

좋은 웹페이지 즐겨찾기