第四百零二節,Django+Xadmin打造上線標准的在線教育平台—生產環境部署,uwsgi安裝和啟動,nginx的安裝與啟動,uwsgi與nginx的配置文件+虛擬主機配置


第四百零二節,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,*代表所有以訪問

 

 

 

 

 

 

 

 

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM