Python 3 + Django + uwsgi + nginx 배치
마지막 으로 코드 를 서버 에 배치 하 는 것 이 쉬 운 일이 라 고 생각 했 는데 여기 서 또 수많은 구 덩이 를 밟 을 줄 은 몰 랐 다.인터넷 에는 이와 관련 된 블 로그 가 많 지만 방법 마다 조금씩 다 르 기 때문에 사용 해 보 니 성공 적 으로 배치 되 지 못 하 는 방법 이 많다 (절망..).그래서 저 는 블 로 그 를 써 서 제 가 설정 하 는 과정 에서 의 상세 한 절 차 를 기록 하고 나중에 필요 할 때 이 블 로 그 를 보고 추억 하 는 것 도 편리 합 니 다.
설치 및 설정
기본 환경
: CVM S3, Ubuntu Server 16.04.1 LTS 64
python:3.5.2
mysql:5.7.23
pip3:18.1
설치 설정
1. django 및 그 관련 라 이브 러 리 의 설치
여기 서 우리 가 사용 하 는 django 버 전 번 호 는 1.9.5 입 니 다. 다음 명령 을 직접 실행 하면 성공 적 으로 설치 할 수 있 습 니 다.
pip3 install --user django~=1.9.5
주: 명령 에
--user
을 추가 하지 않 으 면 사용자 권한 에 문제 가 생 겨 설치 할 수 없습니다.그 밖 에 우 리 는 mysqlclient
와 pymysql
django 와 my sql 데이터 뱅 크 의 상호작용 을 실현 해 야 한다.pip3 install --user mysqlclient~=1.3.7
pip3 install --user pymysql~=0.9.2
2. uWSGI 의 설치
다음 명령 을 실행 하면 성공 적 으로 설치 할 수 있 습 니 다:
pip3 install --user uwsgi
주: 일반적으로 이렇게 설 치 된 uWSGI 는 문제 가 없습니다. 만약 여러분 이 안심 하지 않 는 다 면 인터넷 에서 uWSGI 를 테스트 하 는 방법 을 참고 하여 생략 할 수 있 습 니 다.
3. nginx 의 설치
다음 명령 을 실행 하면 성공 적 으로 설치 할 수 있 습 니 다:
sudo apt-get install nginx
주: 저 는 처음에 make 소스 코드 로 nginx 를 설 치 했 지만 설치 한 후에 사용 하기 가 매우 불편 하고 많은 경 로 를 찾 지 못 했 습 니 다.인터넷 에서 nginx 에 대한 설정 은 기본적으로 상기 명령 으로 설치 되 어 있 기 때문에 편리 하도록 저 는 상기 명령 을 사용 하여 직접 설치 하 는 것 으로 바 꾸 었 습 니 다.
쓰다
nginx
와 uWSGI
를 사용 하여 설정 할 때 가장 실수 하기 쉬 운 것 은 경로 문제 (얼굴 가리기) 이기 때문에 저 는 여기 서 먼저 제 프로젝트 구 조 를 제시 하고 구체 적 인 설정 방식 을 설명 하 겠 습 니 다.프로젝트 구조 (디 렉 터 리)
(.env) ubnutu@VM-0-10-ubuntu:~/WeChatTicket$( /home/ubuntu/WeChatTicket/ )
.
├── manage.py
├── configs.json
├── static/
├── WeChatTicket/
| └── wsgi.py # wsgi
└── deployment/
├── mysite_nginx.conf # nginx
├── mime.types # nginx
├── uwsgi_params # nginx uWSGI
├── nginx_error.log # nginx
├── nginx_access.log # nginx
├── mysite_uwsgi.ini # uWSGI
├── uwsgi.log # uWSGI
└── uwsgi.pid # uWSGI
파일 설정
1.
mysite_nginx.conf
에 다음 과 같은 내용 을 기록 합 니 다.# mysite_nginx.conf
#
user root;
events {
worker_connections 1024;
}
http {
# mime.types
include mime.types;
# nginx ( uWSGI , 9090 )
upstream django {
server 127.0.0.1:9090;
}
#
server {
#
listen 80;
#
server_name 236584.iterator-traits.com;
charset utf-8;
#
access_log /home/ubuntu/WeChatTicket/deployment/nginx_access.log;
error_log /home/ubuntu/WeChatTicket/deployment/nginx_error.log;
#
client_max_body_size 75M;
# uWSGI
location / {
alias /home/ubuntu/WeChatTicket/static/;
try_files $uri $uri/ @django;
}
location @django {
uwsgi_pass django;
include uwsgi_params;
}
}
}
2.
nginx
의 설정 폴 더 conf
에서 uwsgi_params
파일 을 deployment
디 렉 터 리 로 직접 복사 합 니 다.또는 deployment
디 렉 터 리 에 uwsgi_params
파일 을 직접 만 들 고 다음 내용 을 기록 합 니 다.uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
3.
nginx
의 설정 폴 더 conf
에서 mime.types
파일 을 deployment
디 렉 터 리 로 직접 복사 합 니 다.또는 deployment
디 렉 터 리 에 mime.types
파일 을 직접 만 들 고 다음 내용 을 기록 합 니 다.types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
application/font-woff woff;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
4.
mysite_uwsgi.ini
에 다음 과 같은 내용 을 기록 합 니 다.[uwsgi]
# django
socket = 127.0.0.1:9090
#
chdir = /home/ubuntu/WeChatTicket
# wsgi
module = WeChatTicket.wsgi
#
master = true
#
processes = 4
threads = 2
#
vacuum = true
# pid
pidfile = uwsgi.pid
#
daemonize = uwsgi.log
실행 (이 때 터미널 은 deployment 디 렉 터 리 아래 에 있 습 니 다)
1. 시작
uWSGI
:uwsgi --ini mysite_uwsgi.ini
이때 디 렉 터 리 아래 에
uwsgi.pid
와 uwsgi.log
두 개의 파일 이 추 가 된 것 을 발견 할 수 있다.2. 시작 nginx
:sudo nginx -c /home/ubuntu/WeChatTicket/deployment/mysite_nginx.conf
이때 디 렉 터 리 아래 에
nginx_error.log
와 nginx_access.log
두 개의 파일 이 추 가 된 것 을 발견 할 수 있다.사용 sudo
은 사용자 권한 의 제한 을 해결 하기 위해 서 입 니 다.3. 브 라 우 저 를 사용 하여 ip 주 소 를 입력 하고 서비스 가 올 바 르 게 배치 되 었 는 지 확인 합 니 다.첨부: 상용 명령
ps aux|grep nginx( uwsgi)
: 프로 세 스 상 태 를 봅 니 다.sudo nginx -c nginx.conf
: nginx.conf
의 설정 으로 nginx
서 비 스 를 시작 합 니 다.sudo pkill -9 nginx
: 강제 종료 nginx
서비스.uwsgi --ini uwsgi.ini
: 서 비 스 를 초기 화하 고 시작 합 니 다.uWSGI
: 서 비 스 를 중지 uwsgi --stop uwsgi.pid
하고 삭제 uWSGI
합 니 다.uwsgi.pid
: 다시 불 러 오기 uwsgi --reload uwsgi.pid
서비스.총결산
Python 3 + Django + uwsgi + nginx 배치 학습 은 여기 서 마 치 겠 습 니 다. 궁금 한 점 이 있 으 시 면 언제든지 말씀 하 세 요.문서 에 잘못된 점 이나 부족 한 점 이 있 으 면 비판 과 지적 을 환영 합 니 다.
참고 자료: 1. uwsgi 서비스 시작 (start) 정지 (stop) 재 불 러 오기 (reload) 2. uwSGI + django + nginx 의 작업 원리 절차 와 배치 과정 3. nginx 와 uwSGI 를 바탕 으로 Ubuntu 에 Django 를 배치 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.