ubuntu에서django 프로젝트를 배치합니다 (django+uwsgi+nginx)

4810 단어 개발하다
django 프로젝트 배치 uwsgi 설정
django 배포
프로젝트를 서버에 끌어다 놓고 setting을 하세요.py에서 데이터베이스 관련 설정
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #      
        'NAME': 'db_name', #    
        'USER': 'user_name', #      
        'PASSWORD': 'user_pwd', #     
        'HOST': '127.0.0.1', 
        'PORT': 3306, 
     }
 }

데이터베이스 마이그레이션 생성
python3 manage.py makemigrations 

데이터베이스 테이블 생성
python3 manage.py migrate

정적 파일 수집
python3 manage.py collectstatic

python manage.py collectstatic이 실행될 때,django는 기본적으로 STATICFILES에 정의된 것을 볼 수 있습니다DIRS의 카탈로그 및 INSTALLEDAPPS에 정의된 app의 static 디렉토리입니다.만약 이 디렉터리에 파일이 있다면, 파일을 전부 수집하여 STATIC 로 복사합니다.ROOT 디렉토리에 있습니다.setting.py의 정적 디렉터리는 일반적으로 이렇게 설정해야 한다.
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

그리고 setting 파일에서 주의해야 할 세부 사항,allowed 설정host 도메인 이름으로 액세스 가능
ALLOWED_HOSTS = ['127.0.0.1','www.XXX.com']

도메인을 사용하려면 도메인 구매 사이트에서 분석을 하고 자신의 도메인과 서버 공망 IP를 연결해야 하며 도메인을 등록하는 것이 가장 좋다.
DEBUG = False

setting에서.py에서 DEBUG=True를 설정할 때django는 정적 파일을 찾을 수 있지만 배치된 경우 이 옵션을false로 끄는 것을 권장합니다. 그렇지 않으면 404의 웹 상태에서 사이트의 모든 URL을 볼 수 있습니다. 스캔되지 않으면 자발적으로 노출되는 것과 같습니다.그러나 DEBUG=False 시,django는 정적 파일을 더 이상 처리할 수 없습니다. 이때nginx를 설정해서 정적 파일을 찾아야 합니다.
django가 성공적으로 시작되었는지 테스트하려면 아래 코드를 사용하십시오.
python3 manage.py runserver 0.0.0.0:8000

이때 사이트 8000 포트를 통해서도 방문할 수 있지만 두 가지 문제가 있다. 첫째, 정적 파일이 분실되고 사이트의 모든 양식이 분실된다. 둘째, 클라이언트 브라우저가 서버 데이터가 불러오지 않았을 때 자발적으로 닫으면 Connection reset bypeer 이상을 던진다. 클라이언트가 이미 닫혔고 서버가 자발적으로 데이터를 보내기 때문이다.이 이상은 uwsgi를 설정해서 uwsgi를 시작해서 해결할 수 있습니다.
ps:작은 구덩이가django의 시간대 설정입니다. 기본적으로 미국이고setting에서 사용할 수 있습니다.py에서 아래 코드를 설정하여 중국 시간대로 변경합니다.
TIME_ZONE = 'Asia/Shanghai'

uwsgi 배포
처음에는 왜 uwsgi를 붙여야 하는지 몰랐고 직관적으로django가 있다고 생각했다. 게다가nginx가 정적 파일을 찾아주면 된다. 나중에 프로젝트에서 가장 직접적인 반응은 마운트 상태에서 클라이언트를 닫는 것이다. 서버는 이상을 던지고 코드에서 포착했지만 효과가 없었다.uwsgi 설치
pip3 install uwsgi

설치가 완료되면 명령줄 시작 프로그램을 통해 직접 테스트할 수 있습니다
uwsgi --http :8000 --chdir /root/project_name -w project_name.wsgi

uwsgi는 ini 스크립트를 통해 시작할 수 있습니다. ini 스크립트 설정은 다음과 같습니다. 프로젝트 디렉터리에 직접 만들 수 있습니다.vim/root/project_name/uwsgi.ini
[uwsgi]
socket = 127.0.0.1:8001 #   nginx     
chmod-sock = 666
chdir = /root/project_name/
module = project_name.wsgi
master = true
processes = 5
vacuum = true
buffer-size = 65536

다음 명령을 통해 시작
uwsgi --ini uwsgi.ini

nginx 구성
nginx의 설정 파일은 두 군데에서 수정할 수 있습니다. 하나는/etc/nginx/nginx입니다.conf, http {} 부분에 아래 코드를 추가하거나/etc/nginx/site-available에서default를 편집하거나 새 파일을 편집할 수 있습니다.편집할 내용은 다음과 같습니다.
server {
       listen 80; #ngingx     ,   80,       
       server_name www.XXX.com;
       location /static/ {
       root /opt; #      ,   /opt/static
        }       
        location /{
             uwsgi_pass 127.0.0.1:8001;#nginx uwsgi  socket   
             include uwsgi_params;
         }
     }

/etc/nginx/site-available에서vim 프로젝트conf, 소프트 링크 필요
ln -s /etc/nginx/site-available/project_conf /etc/nginx/site-enabled

이것은nginx의 주 설정인nginx 때문입니다.conf에서 설정 파일의 유효 디렉터리 (include/etc/nginx/sites-enabled/*;) 를 정의했습니다.nginx 설정을 다시 불러옵니다. 다음 명령을 사용하면 다시 불러오는 것을 중단하지 않습니다.
nginx -s reload

설정된 후 http://도메인 이름:nginx가 감청하는 포트에 접근할 수 있습니다. 예를 들어http://www.XXX.com(기본 80)
iptables 영구화 설정
ubuntu iptables 파일 편집
vim /etc/iptables.rules

파일 내용은 다음과 같습니다. - A INPUT - p tcp-m state - state NEW - m tcp - dport 80 - j ACCEPT
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:syn-flood - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
-A syn-flood -j REJECT --reject-with icmp-port-unreachable

iptables 다시 시작
 iptables-restore < /etc/iptables.rules

좋은 웹페이지 즐겨찾기