第四百零二節,Django+Xadmin打造上線標准的在線教育平台—生產環境部署,uwsgi安裝和啟動,nginx的安裝與啟動,uwsgi與nginx的配置文件+虛擬主機配置
軟件版本
uwsgi-2.0.15
nginx-1.12.1
1.用Navicat Premium遠程登錄Linux系統數據庫,創建網站需要的數據庫
2.數據庫創建好后,將開發環境的數據庫傳輸到剛才創建的數據庫
傳輸數據
如果在傳輸數據時,怎么都傳輸不了,老報錯誤,有可能是傳輸數據太大,要在軟件設置一下,改一個變量,將參數調大
3.數據庫數據傳輸好后,在Linux系統的opt目錄創建Python虛擬環境,一般虛擬環境創建在opt目錄不然會有權限問題
將開發環境里的整個Django項目,上傳到Linux系統里准備好的python虛擬環境里的網站安裝目錄里,
在虛擬環境里創建一個網站目錄,目錄里包含兩個文件夾,一個是Django項目,一個是創建來專門放配置文件的目錄
上傳好項目后,檢查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,*代表所有以訪問