線上生產環境部署Django+Nginx+Uwsgi

是否曾想過把django項目從windows移植到Linux上運行,Linux性能衆所周知,做爲Django運行的服務器再合適不過啦,今天分享一下如何在線上雲機器的Linux環境運行Django項目。python

客戶端訪問服務端的流程
1.首先客戶端請求服務資源, 
2.nginx做爲直接對外的服務接口,接收到客戶端發送過來的http請求,會解包分析。
3.若是是靜態文件請求就根據nginx配置的靜態文件目錄,返回請求的資源,不然會根據django配置文件設置的static目錄去找資源。
4.若是是動態的請求,nginx就經過配置文件,將請求傳遞給uwsgi;
5.uwsgi 將接收到的包進行處理,並轉發給wsgi, wsgi根據請求調用django工程的某個文件或函數,處理完後,django將返回值交給wsgi, wsgi將返回值進行打包,轉發給uwsgi,
6.uwsgi接收後轉發給nginx,nginx最終將返回值返回給客戶端(如瀏覽器)。

補充一點知識:
1.wsgi是web服務器與web程序之間的一種低級別的接口
2.uwsgi是一個基於uwsgi協議、wsgi協議和Http協議的WEB接口,簡單說就是web經過uwsgi訪問到django文件mysql

1、環境準備nginx

  1. Linux服務器一臺
  2. Nginx軟件包
  3. MySQL軟件包
  4. Django項目

2、環境部署
1.在Linux安裝python,根據本身項目須要安裝python版本web

1.1安裝相關依賴
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel sql

1.2編譯安裝數據庫

cd /usr/local/
tar xf Python-3.5.1.tgz 
cd Python-3.5.1/
./configure --enable-optimizations
cd Python-3.5.1/
make && make install

1.3修改Python文件django

mv /usr/bin/python /usr/bin/python2.7.5
ln -s /usr/local/bin/python3.5 /usr/bin/python
python -V   #這裏輸出是你編譯版本就OK啦
Python 3.5.1

1.4修改yum配置文件,由於修改了python文件,yum是沒法使用vim

vim /usr/bin/yum 
#!/usr/bin/python2.7.5   修改成以前移動的python文件

還有一些由於Yum安裝報錯能夠根據上面修改便可windows

2.安裝模塊瀏覽器

2.1 安裝uwsgi模塊
pip3 install uwsgi
2.2 安裝pymysql模塊
pip3 install pymysql
2.3 安裝django
pip3 install django==2.0

3.修改django配置文件
3.1在項目中的init文件寫入下面代碼,若是不填會鏈接不了數據庫哈

import pymysql
pymysql.install_as_MySQLdb()

3.2修改setting.py配置文件

DEBUG = False    #這裏須要改成False,否則程序報錯,會在WEB頁面顯示出來
ALLOWED_HOSTS = ['IP']      #這裏設置你容許哪些IP訪問
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  #這是指鏈接數據庫的驅動
        'NAME': 'xxxxx',                      #你的項目數據庫名
        'USER': 'xxxxx',                       #鏈接數據庫用戶
        'PASSWORD': xxxxxxxxx',      #數據庫密碼
        'HOST': "xxxxxxxx",                 #主機
        'PORT': '3306',                         #端口
    }
}
TIME_ZONE = 'Asia/Shanghai'               #修改成中國區域
USE_TZ = False                                      #關閉
STATIC_ROOT= "/data/autoops/static"    #設置爲你的靜態目錄

4.編譯安裝nginx
5.二進制安裝mysql
6.上傳django項目代碼到Linux服務器,根據你的需求放到指定目錄
線上生產環境部署Django+Nginx+Uwsgi
7.編寫uwsgi文件,個人文件在/data/autoops/script/uwsgi.ini (重點)

[uwsgi]
# 項目目錄
chdir=/data/autoops/
# 指定項目的application
module=autoops.wsgi:application
# 進程個數
workers=8
pidfile=/data/autoops/script/uwsgi.pid
# 指定IP端口
#http=192.168.10.155:8003    ##能夠不啓用,利用socket文件,若是隻是測試,須要啓用
# 指定靜態文件目錄
static-map=/static=/data/autoops/static
# 啓動uwsgi的用戶名和用戶組
uid=root
gid=root
# 啓用主進程
master=true
# 自動移除unix Socket和pid文件當服務中止的時候
vacuum=true
# 序列化接受的內容,若是可能的話
thunder-lock=true
# 啓用線程
enable-threads=true
# 設置自中斷時間
harakiri=30
# 設置緩衝
post-buffering=4096
# 設置日誌目錄
daemonize=/data/autoops/script/uwsgi.log
# 指定sock的文件路徑
socket=/data/autoops/script/uwsgi.sock
die-on-term=true

8.uwsgi命令

uwsgi --reload uwsgi.pid  重啓
uwsgi --stop uwsgi.pid 關閉
uwsgi --ini uwsgi.ini 啓動

9.在啓動以前,須要注意的,若是你setting的DEBUG是關閉狀態的,須要在django項目中執行python manage.py collectstatic,做用是收集Django項目中全部涉及到的靜態資源,統計放到 STATIC_ROOT 管理訪問,若是你不執行,你會發現,django項目沒法加載CSS樣式,JS腳本。
如圖下方
線上生產環境部署Django+Nginx+Uwsgi

10.初始化django項目的ORM

1. python manage.py makemigrations 把models.py裏面的改動記錄下來,記錄到migrations文件夾下面
   2. python manage.py migrate   把改動翻譯成SQL語句去數據庫執行

11.配置Nginx文件而且檢查語法啓動

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       你的端口號;
        server_name  公網IP;
        location / {
                include uwsgi_params;             
                uwsgi_connect_timeout 30;          
                uwsgi_pass unix:/data/autoops/script/uwsgi.sock;    #你的uwsgi.sock文件位置
        }
    }
}

12.啓動uwsgi和nginx

[root@xxxxxxxxx08:56:29/data/autoops]# uwsgi --ini script/uwsgi.ini 
[uWSGI] getting INI configuration from script/uwsgi.ini
[uwsgi-static] added mapping for /static => /data/autoops/static

3、測試訪問nginx
線上生產環境部署Django+Nginx+Uwsgi

總結:部署不難,須要注意一下,文章有些地方沒詳細說的,本身能夠思考哈,下次再分享

相關文章
相關標籤/搜索