是否曾想過把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
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服務器,根據你的需求放到指定目錄
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腳本。
如圖下方
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
總結:部署不難,須要注意一下,文章有些地方沒詳細說的,本身能夠思考哈,下次再分享