第四百零二節,Django+Xadmin打造上線標準的在線教育平臺—生產環境部署,uwsgi安裝和啓動,nginx的安裝與啓動,uwsgi與nginx的配置文件+虛擬主機配置css
軟件版本 python
uwsgi-2.0.15
nginx-1.12.1mysql
1.用Navicat Premium遠程登陸Linux系統數據庫,建立網站須要的數據庫nginx
2.數據庫建立好後,將開發環境的數據庫傳輸到剛纔建立的數據庫sql
傳輸數據數據庫
若是在傳輸數據時,怎麼都傳輸不了,老報錯誤,有多是傳輸數據太大,要在軟件設置一下,改一個變量,將參數調大apache
3.數據庫數據傳輸好後,在Linux系統的opt目錄建立Python虛擬環境,通常虛擬環境建立在opt目錄否則會有權限問題django
將開發環境裏的整個Django項目,上傳到Linux系統裏準備好的python虛擬環境裏的網站安裝目錄裏,vim
在虛擬環境裏建立一個網站目錄,目錄裏包含兩個文件夾,一個是Django項目,一個是建立來專門放配置文件的目錄centos
上傳好項目後,檢查Django項目裏的settings.py配置文件,配置數據庫相關信息連接剛纔導入的數據庫,檢查用戶名密碼是否正確,鏈接數據庫的用戶名,必須有操做當前網站數據庫的權限,和當前用戶能夠任意ip訪問數據庫權限,詳情見第三百九十九節的16小節說明
#MySQL數據庫 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 配置數據庫引擎名稱 'NAME': 'jxiou2', # 數據庫名稱 'USER': 'test_user', # 數據庫用戶名 'PASSWORD': 'test_user', # 數據庫密碼 'HOST': '127.0.0.1', # 數據庫連接地址 'PORT': '3306', # 數據庫端口 } }
修改後保存
4.測試Django項目項目是否可以運行
執行命令進入虛擬環境
[root@192 ~]# workon jxiou2 (jxiou) [root@192 ~]#
在虛擬環境裏cd到Django根項目
[root@192 ~]# workon jxiou2 (jxiou) [root@192 ~]# cd /opt/xu_ni_huan_jing/jxiou2/jxiou/MxOnline 進入django根目錄 (jxiou) [root@192 MxOnline]# dir 查看根目錄下的文件 apps extra_apps manage.py media MxOnline __pycache__ static system templates (jxiou) [root@192 MxOnline]#
執行命令,從manage.py啓動Django項目
(jxiou) [root@192 MxOnline]# python manage.py runserver Performing system checks... System check identified no issues (0 silenced). You have 1 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): reversion. Run 'python manage.py migrate' to apply them. October 07, 2017 - 01:07:13 Django version 1.10, using settings 'MxOnline.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
能夠看到項目已經啓動,能夠訪問http://127.0.0.1:8000/
以上測試Django項目能夠遠行,這只是測試一下,正真的生產中不是從manage.py啓動Django項目,而是用uwsgi模塊來啓動,因此以上只是爲uwsgi作準備,至此在終端按ctrl+c鍵中止Django項目
【主題開始】
uwsgi+nginx+虛擬環境
uwsgi+nginx部署原理圖
5.在虛擬環境安裝uwsgi
uwsgi是Python寫的一個模塊,能啓動Django項目,它的角色就是處理網站的動態請求
uWSGI的主要特色以下:
◆超快的性能。
◆低內存佔用(實測爲apache2的mod_wsgi的一半左右)。
◆多app管理。
◆詳盡的日誌功能(能夠用來分析app性能和瓶頸)。
◆高度可定製(內存大小限制,服務必定次數後重啓等)。
安裝
(jxiou) [root@192 MxOnline]# pip install uwsgi
6.安裝好uwsgi後,測試uwsgi啓動Django項目
首先cd 進入到Django項目裏,在此目錄下執行命令
uwsgi --http 127.0.0.1:8000 --module MxOnline.wsgi(wsgi.py路徑) --static-map=/static=static(靜態文件路徑)
(jxiou) [root@192 MxOnline]# uwsgi --http 127.0.0.1:8000 --module MxOnline.wsgi --static-map=/static=static
此時瀏覽器訪問
http://127.0.0.1:8000/
此時能夠看到uwsgi能夠啓動Django項目了,咱們按ctrl+c關閉退出
uwsgi經常使用命令
ps -ef|grep -i uwsgi 查看uwsgi啓動進程
pkill -9 nginx 殺掉uwsgi啓動進程
uwsgi 啓動uwsgi
7.使用配置文件啓動uWSGI [ini]
在網站安裝目錄裏與Django項目同級咱們建立了一個pzhi文件夾,就是專門用來放配置文件的
在pzhi文件夾建立 網站名稱_uwsgi.ini文件,來寫uWSGI的配置文件
建立 jxiou_uwsgi.ini 文件
# uwsgi.ini [uwsgi] # 指定Django項目的根目錄 chdir = /opt/xu_ni_huan_jing/jxiou2/jxiou/MxOnline/ # 指定Django項目裏的wsgi.py文件路徑,上面已經指定了根目錄,這裏拼接根目錄便可 module = MxOnline.wsgi # 啓用主進程 master = true # 設置啓動進程最大數 processes = 10 # 設置監聽端口 socket = 127.0.0.1:8000 # 自動移除unix Socket和pid文件當服務中止的時候 vacuum = true # 設置python虛擬環境 virtualenv = /opt/xu_ni_huan_jing/jxiou2/ # 設置uwsgi日誌保存路徑,通常設置到當前配置文件所在目錄 logto = /opt/xu_ni_huan_jing/jxiou2/jxiou/pzhi/uwsgi.log
建立好uWSGI的配置文件後,cd 進入到當前 jxiou_uwsgi.ini 配置文件目錄,執行啓動uwsgi命令
(jxiou) [root@192 pzhi]# uwsgi --ini jxiou_uwsgi.ini & 啓動uwsgi配置文件 [uWSGI] getting INI configuration from jxiou_uwsgi.ini (jxiou) [root@192 pzhi]# ps -ef|grep -i uwsgi 查看uwsgi啓動進程 root 43159 1 1 03:50 ? 00:00:01 uwsgi --ini jxiou_uwsgi.ini root 43164 43159 0 03:50 ? 00:00:00 uwsgi --ini jxiou_uwsgi.ini root 43165 43159 0 03:50 ? 00:00:00 uwsgi --ini jxiou_uwsgi.ini root 43166 43159 0 03:50 ? 00:00:00 uwsgi --ini jxiou_uwsgi.ini root 43167 43159 0 03:50 ? 00:00:00 uwsgi --ini jxiou_uwsgi.ini root 43168 43159 0 03:50 ? 00:00:00 uwsgi --ini jxiou_uwsgi.ini root 43185 14898 0 03:51 pts/1 00:00:00 grep -i uwsgi (jxiou) [root@192 pzhi]#
8.安裝Nginx
在系統/etc/yum.repos.d/目錄配置Nginx的安裝源,
建立nginx.repo文件
vim /etc/yum.repos.d/nginx.repo
[nginx] name=nginx repo # 下面這行centos根據你本身的操做系統修改好比:OS/rehel # 6是你Linux系統的版本,能夠經過URL查看路徑是否正確 baseurl=http://nginx.org/packages/centos/6/$basearch/ gpgcheck=0 enabled=1
能夠訪問一下http://nginx.org/packages/centos 安裝源是否存在
9.配置好Nginx安裝源後,執行命令安裝Nginx
(jxiou) [root@192 pzhi]# yum -y install nginx
Nginx安裝好後,Nginx的啓動文件在 /usr/sbin/nginx 執行此文件便可啓動Nginx
/etc/nginx/conf.d 這個目錄爲Nginx配置文件啓動目錄,當Nginx啓動時會自動啓動目錄裏的conf文件
注意:設置配置文件時,在系統建立文件將代碼複製到文件裏,不可在系統外導入配置文件
在網站安裝目錄裏與Django項目同級咱們建立了一個pzhi文件夾,就是專門用來放配置文件的
安裝好nginx後在pzhi文件夾建立 網站名稱_nginx.conf文件,來寫nginxI的配置文件
建立 jxiou_nginx.conf 文件
# nginx配置文件 upstream django { # 設置動態請求轉發端口,要與uwsgi配置文件的socket監聽端口一致 server 127.0.0.1:8000; } server { # 設置監聽端口 listen 80; # 設置網站訪問ip或者域名,域名要解析好 server_name 192.168.158.132 ; # 設置編碼 charset utf-8; # 設置網站最大上傳限制 client_max_body_size 75M; # 設置Django的media用戶上傳文件目錄 location /media { alias /opt/xu_ni_huan_jing/jxiou2/jxiou/MxOnline/media/; } # 設置Django的static靜態文件目錄如js、css文件目錄 location /static { alias /opt/xu_ni_huan_jing/jxiou2/jxiou/MxOnline/static/; } # 設置動態請求轉發給uwsgi location / { # 動態請求時,執行upstream django的配置轉發 uwsgi_pass django; # 經過nginx啓動目錄 /etc/nginx/uwsgi_params 的uwsgi_params模塊文件,與uwsgi交互 include uwsgi_params; # the uwsgi_params file you installed } # 指定日誌存放路徑,通常指定到網站配置文件目錄 access_log /opt/xu_ni_huan_jing/jxiou2/jxiou/pzhi/nginx.log main; }
nginxI的配置文件寫好後,將配置文件軟鏈接到 /etc/nginx/conf.d 目錄,也就是nginxI的啓動目錄
sudo ln -s /opt/xu_ni_huan_jing/jxiou2/jxiou/pzhi/jxiou_nginx.conf /etc/nginx/conf.d/
軟鏈接建立好後,啓動nginx
/usr/sbin/nginx 啓動nginx
ps -ef|grep -i nginx 查看nginx啓動進程
pkill -9 nginx 殺死nginx啓動進程
補充內容防盜鏈配置
Nginx防盜鏈配置 有些時候,你們不想讓別人調用本身的圖片,一是由於我的版權的問題,再一點就是會增長服務器的負載、還會產生一些不必的流量。 其實在Nginx裏面,很容易就作到防盜鏈的,在nginx.conf文件加入一個localtion配置項。 下面請看配置: location ~ .*\.(jpg|jpeg|JPG|png|gif|icon)$ { valid_referers blocked www.qixing318.com qixing318.com; if ($invalid_referer) { return 404; } } gif|jpg|jpeg|….,這些是你想要屏蔽的文件類型,能夠根據狀況修改。 只須要把文中 www.qixing318.com qixing318.com 修改成你容許顯示你網站圖片的其餘網站域名,注意中間用空格分開,而不是逗號。 這樣直接返回的是404頁面。也能夠用http://domain.com/404.jpg,顯示給盜鏈者看到的圖片,注意不要放到本身的域名上,由於放盜鏈的做用,那樣對方是看不到的,能夠上傳到一些支持外聯的網絡相冊上。 固然了,也能夠設置某個目錄防盜鏈,只需把localtion匹配的改爲一個目錄就能夠了,好比: location ~ ^/images/ { valid_referers none blocked www.qixing318.com qixing318.com; if ($invalid_referer) { return 404; } #rewrite ^/ http://otherdomin.com/404.jpg; }
啓動nginx後訪問nginx配置文件裏設置的訪問域名或者ip
固然此時網站能夠啓動了,可是後臺和網站的一些樣式和靜態文件沒法訪問
因此,咱們須要拉取全部靜態文件到static目錄
在django的setting文件中,添加下面一行內容:
STATIC_URL = '/static/' # 設置靜態文件前綴名稱 # 配置靜態文件目錄 #STATICFILES_DIRS = [ # os.path.join(BASE_DIR, 'static'), # 設置靜態文件路徑 #] # 配置靜態文件訪問路徑 STATIC_ROOT = os.path.join(BASE_DIR, 'static')
運行命令,拉取文件
cd 進入到網站項目根目錄
python manage.py collectstatic
此時網站部署完成
注意:設置配置文件時,在系統建立文件將代碼複製到文件裏,不可在系統外導入配置文件
此時部署完成,網站配置文件夾裏會有以下文件
往後操做管理
中止網站服務
首先進入虛擬環境
1.pkill -9 uwsgi 殺死uwsgi進程
2.ps -ef|grep -i uwsgi 查看進程狀況
3.pkill -9 nginx 殺死nginx進程
4.ps -ef|grep -i nginx 查看進程狀況
啓動網站服務
首先進入虛擬環境
cd進入到uwsgi的配置文件目錄
1.uwsgi -i jxiou_uwsgi.ini & 啓動uwsgi
2.ps -ef|grep -i uwsgi 查看進程狀況
3./usr/sbin/nginx 啓動nginx
4.ps -ef|grep -i nginx 查看進程狀況
最後別忘了關閉Django調試模式
就是在settings.py文件關閉調試模式,關閉後配置的404才能起做用,不至於大黃頁
# SECURITY WARNING: don't run with debug turned on in production! DEBUG = False # 將調試模式關閉,關閉後訪問頁面出錯不會顯示錯誤(大黃頁) ALLOWED_HOSTS = ['*'] # 當關閉調試模式時,必須設置容許訪問的ip,*表明全部以訪問