Django 프로젝트 배치 -- Nginx + uwsgi 기록
7005 단어 Django 개발
Django 자체 서버 는 디 버 깅 할 때 만 사용 할 수 있 습 니 다. 프로젝트 가 정식 발표 되 었 을 때 더욱 안정 적 인 서버 가 필요 합 니 다. Apache 와 Nginx 는 모두 가능 합 니 다. 본 고 는 알 리 클 라 우 드 서버 에 Nginx 와 uwsgi 를 바탕 으로 Django 프로젝트 를 배치 하고 서버 엔 드 운영 체 제 는 CentOS 7 입 니 다.
WSGI 는 웹 서버 (예 를 들 어 nginx) 가 응용 서버 (예 를 들 어 uWSGI) 와 통신 하 는 규범 이다.uWSGI 는 WSGI 의 모든 인 터 페 이 스 를 실현 하고 빠 르 고 자기 복구, 개발 자 와 시스템 관리자 의 우호 적 인 서버 입 니 다.uwsgi 는 일종 의 선로 프로 토 콜 로 uwsgi 서버 자체 의 프로 토 콜 입 니 다.Nginx 는 경량급 웹 서버 이자 역방향 프 록 시 서버 다.
1. 배치 전 준비
1.1 Anaconda 설치
Anaconda 에는 Python 의 가방 과 의존 도가 많이 통합 되 어 있 으 며 Python 의 환경 은 Anaconda 를 사용 하여 구축 하 는 것 이 편리 합 니 다.우선 로 컬 에서 Anaconda 대응 버 전 을 다운로드 할 수 있 으 며, 다음 xftp 를 통 해 설치 본 을 원 격 호스트 로 전송 할 수 있 습 니 다.내 가 다운로드 한 설치 패 키 지 는: Anaconda 3 - 4.3.0 - linux - x8664.sh。 다음은 Anaconda 설치 패키지 가 있 는 디 렉 터 리 위치 에 들 어 갑 니 다. 저 는 설치 패 키 지 를 / root 디 렉 터 리 에 두 었 습 니 다. (저 는 리 눅 스 디 렉 터 리 에 대해 잘 모 르 고 뒤의 경 로 는 상황 에 따라 스스로 확인 할 수 있 습 니 다) 그 다음 에 이 디 렉 터 리 에 들 어가 다음 명령 을 수행 합 니 다.
cd /root
bash Anaconda3-4.3.0-Linux-x86_64.sh
설치 과정 에서 설치 경 로 를 선택 할 수 있 습 니 다. 저 는 Anaconda 를 / usr 디 렉 터 리 에 설 치 했 습 니 다.설치 완료 후 Anaconda 를 환경 변수 에 추가 할 수 있 습 니 다 (\ # 뒤에 설명 이 있 습 니 다):
vim ~/.bashrc # .bashrc
# export PATH=/usr/anaconda3/bin:$PATH
# Anaconda ,
source ~/.bashrc #
Anaconda 는 이렇게 설정 되 어 있 을 것 입 니 다. 테스트 해 볼 수 있 습 니 다. 터미널 에 입력 하 십시오.
[root@...] # python --version
Python 3.6.0 :: Anaconda 4.3.0 (64-bit)
Anaconda 를 설치 한 후 pip 3 를 업데이트 해 야 합 니 다. 다음 명령 을 사용 할 수 있 습 니 다.
[root@...] # pip3 install --upgrade pip
1.2 장고 설치
Anaconda 를 설치 한 후에 Django 의 설치 가 비교적 편리 합 니 다. pip 3 를 사용 하여 설치 합 니 다.
[root@...] # pip3 install django
1.3 설치 uwsgi
Anaconda 를 설치 한 후 uwsgi 의 설치 가 비교적 편리 합 니 다. pip 3 를 사용 하여 설치 합 니 다.
[root@...] # pip3 install uwsgi
1.4 설치 nginx
여기 서 저 는 lnmp 의 통합 설치 패 키 지 를 사용 하여 설 치 했 습 니 다. 인터넷 의 튜 토리 얼 도 많 으 니 참고 하 시기 바 랍 니 다.주: Centos 는 기본적으로 nginx 를 / usr / local / nginx / 디 렉 터 리 에 설치 합 니 다.
프로젝트 이전
Django 프로젝트 이전 에 제 가 직면 한 가장 큰 문 제 는 정적 파일 의 처리 입 니 다. 로 컬 디 버 깅 으로 인해 Django 프로젝트 의 DEBUG 를 True 로 설정 하면 Django 가 스스로 정적 파일 을 찾 을 수 있 습 니 다.하지만 프로젝트 가 출시 되면 DEBUG 모드 를 닫 아야 합 니 다. 수 동 으로 설정 해 야 합 니 다.우선 프로젝트 를 서버 로 전송 하고 프로젝트 폴 더 를 / home 디 렉 터 리 에 두 겠 습 니 다.프로젝트 가 출시 되 었 을 때 먼저 프로젝트 의 settings. py 에서 다음 과 같이 수정 해 야 합 니 다.
# settings.py ,
DEBUG = False #
ALLOWED_HOSTS = ['*'] #
정적 파일 처리 참고:https://blog.csdn.net/wjy397/article/details/51610872 프로젝트 의 settings. py 에서 수정 해 야 합 니 다:
# BASE_DIR
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# STATIC_URL
# '/static/', 404,
STATIC_URL = '/home/PersonalBlogSite/static/'
# STATIC_ROOT
#STATIC_ROOT
STATIC_ROOT = os.path.join(BASE_DIR,'static')
설정 이 완료 되 고 저 장 된 후 정적 파일 을 수집 하고 프로젝트 루트 디 렉 터 리 에서 다음 명령 을 수행 합 니 다.
python manage.py collectstatic
# STATIC_ROOT
프로젝트 폴 더 의 권한 은 최소 755 입 니 다. 그렇지 않 으 면 정적 자원 에 접근 할 수 없습니다. 프로젝트 디 렉 터 리 에서 다음 문 구 를 실행 할 수 있 습 니 다.
cd /home/PersonalBlogSite #
chmod -R 755 ./
제 프로젝트 에 사용 되 는 데이터 베 이 스 는 Django 가 자체 적 으로 가지 고 있 는 sqlite 입 니 다. 다른 데이터 베 이 스 를 사용 하려 면 데이터 베 이 스 를 클 라 우 드 로 옮 겨 야 합 니 다. 이 부분 은 다른 튜 토리 얼 을 참고 할 수 있 습 니 다.
3. uwsgi 설정
uwsgi 의 설정 방식 은 매우 많 습 니 다. 저 는 제 가 사용 하 는 방법 만 소개 합 니 다.프로젝트 의 루트 디 렉 터 리 에 uwsgi. ini 파일 을 새로 만 들 고 다음 내용 을 기록 하려 면 실제 프로젝트 내용 에 따라 수정 해 야 합 니 다 (\ # 후의 내용 삭제).
[uwsgi]
socket=127.0.0.1:8997 # nginx socket
chdir=/home/PersonalBlogSite #
wsgi-file=PersonalBlogSite/wsgi.py # wsgi.py ,
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log
uwsgi 의 시작 방식 은 프로젝트 루트 디 렉 터 리 에서 실 행 됩 니 다.
uwsgi --ini uwsgi.ini
uwsgi 의 종료 방식 은:
# pid kill
[root@...]# ps -ef | grep uwsgi
root 4482 1 0 10:27 ...
root 4961 4482 0 16:50 ...
root 4962 4482 0 16:50 ...
root 4963 4482 0 16:50 ...
root 4964 4482 0 16:50 ...
root 5041 4873 0 16:54 pts/0 00:00:00 grep --color=auto uwsgi
[root@...]# kill -9 4482
# uwsgi.pid ,
uwsgi --stop uwsgi.pid
4. Nginx 설정
nginx 설정 파일 을 엽 니 다. 보통 / usr / local / nginx / conf / nginx. conf 이 고 server 에 다음 과 같은 내용 을 추가 합 니 다.
server {
listen 80 #
root / #nginx
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8997; # uwsgi socket
}
location /static/ {
autoindex on;
root /home/PersonalBlogSite/; #
}
# svg
location ~ \.(eot|otf|ttf|woff|svg|woof2)$ {
add_header Access-Control-Allow-Origin *;
}
}
nginx 의 시작:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
service nginx start #
nginx 의 닫 기:
# kill, uwsgi
service nginx stop #
mdeditor 설정
django - mditor 를 사용 하지 않 았 다 면 여 기 는 건 너 뛸 수 있 습 니 다.설정 을 한 후에 저 는 이전에 사 용 했 던 django - mditor 가 효력 을 잃 었 다 는 것 을 알 게 되 었 습 니 다. CSS 와 JS 가 모두 불 러 올 수 없 었 습 니 다. URL 이 잘못 되 었 다 는 것 을 알 게 되 었 습 니 다. 저 는 루트 디 렉 터 리 에 있 는 static 디 렉 터 리 에 mdeditor 폴 더 를 수 동 으로 새로 만 들 었 고 static 파일 의 내용 을 모두 mdeditor 파일 에 복사 해서 mdeditor 파일 에 올 바 르 게 불 러 올 수 있 습 니 다.그러나 여전히 문제 가 존재 한다. 바로 사진 을 올 리 는 것 이 효력 을 잃 고 그림 을 불 러 올 수 없 기 때문이다. 그 이 유 는 URL 이 틀 렸 기 때문이다.프로젝트 의 settings. py 와 media 관련 설정 문 구 를 바 꾸 었 습 니 다.
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads') #
MEDIA_URL = '/home/PersonalBlogSite/uploads/' # MEDIA_ROOT
프로젝트 시작
먼저 nginx 시작:
service nginx start
다음은 uwsgi 를 시작 하여 프로젝트 루트 디 렉 터 리 에 들 어가 실행 합 니 다.
uwsgi --ini uwsgi.ini
이 때 서 비 스 는 정상적으로 시 작 될 것 입 니 다. 제 가 80 포트 를 사용 하기 때문에 다음 브 라 우 저 에 http: / 도 메 인 이름 이나 ip 주소 / 프로젝트 URL 을 직접 입력 하면 프로젝트 에 접근 할 수 있 을 것 입 니 다.
체험
이번 Django 프로젝트 는 정적 자원 을 불 러 올 때 특히 많은 시간 을 들 였 습 니 다. 브 라 우 저 에서 자원 을 불 러 올 때 발생 하 는 오류 알림 을 주의 하 라 고 알려 드 리 고 싶 습 니 다.nginx 서버 가 배 치 된 후에 URL 에 따라 서버 에 존재 하 는 모든 자원 에 접근 할 수 있 습 니 다. 제 문 제 는 대부분 설정 파일 이 설정 되 지 않 은 이유 입 니 다. 제 가 예전 에 nginx 서버 의 루트 디 렉 터 리 를 수정 하지 않 았 기 때문에 저 는 nginx 서버 의 디 렉 터 리 를 루트 디 렉 터 리 로 바 꾸 어 테스트 를 했 습 니 다. 그러면 좋 지 않 을 수도 있 지만 프로젝트 가 통 했 습 니 다.지금 나 는 django 의 설정 도 아직 배 워 야 할 부분 이 있 을 수 있다 는 것 을 알 게 되 었 다. nginx 의 설정 에 대해 서도 더 배 워 야 작은 문제 로 인해 어 쩔 수 없 지 않 을 것 이다.이 기록 은 참고 로 제공 할 뿐, 문제 가 있 으 면 나 는 최선 을 다 해 해답 하고 정정 할 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 프로젝트 배치 -- Nginx + uwsgi 기록Anaconda 에는 Python 의 가방 과 의존 도가 많이 통합 되 어 있 으 며 Python 의 환경 은 Anaconda 를 사용 하여 구축 하 는 것 이 편리 합 니 다.우선 로 컬 에서 Anaconda 대응...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.