1. 程式人生 > >專案上線最後工作——佈署環境

專案上線最後工作——佈署環境

  • 當專案開發完成後,需要將專案程式碼放到伺服器上,這個伺服器擁有固定的IP,再通過域名繫結,就可以供其它人瀏覽,對於python web開發,可以使用wsgi、apache伺服器,此處以wsgi為例進行佈署
  • 伺服器首先是物理上的一臺效能高、線路全、執行穩定的機器,分為私有伺服器、公有伺服器
  • 私有伺服器:公司自己購買、自己維護,只佈署自己的應用,可供公司內部或外網訪問,成本高,需要專業人員維護,適合大公司使用
  • 公有伺服器:整合好運營環境,銷售空間或主機,供其佈署自己的應用,適合初創公司使用,成本低
  • 常用的公有伺服器,如阿里雲、青雲等,可按流量收費或按時間收費
  • 伺服器還需要安裝伺服器軟體,此處需要uWSGI、Nginx
  • 伺服器架構如下圖

示例

  • 佈署前需要關閉除錯、允許任何機器訪問,開啟test6/settings.py檔案
DEBUG = False
ALLOWED_HOSTS=['*',]
  • 開啟templates/booktest/index.html檔案,修改如下
<html>
<head>
    <title>第三方包</title>
</head>
<body>
<h1>第三方包</h1>
<hr>
<h1>佈署</h1>
<img src="/static/img/sg.png"/>
</body>
</html>
  • 將圖片sg.png拷貝到static/img/目錄下

  • 執行伺服器,在瀏覽器中輸入如下網址
http://127.0.0.1:8000/
  • 瀏覽效果如下圖,圖片是看不到的

搭建伺服器虛擬環境

  • 在本機進入虛擬環境,執行命令匯出當前需要的所有包
pip freeze > plist.txt
  • 通過ftp軟體將專案程式碼和plist.txt檔案上傳到伺服器
  • 建立虛擬環境,在虛擬環境上安裝包
mkvirtualenv 虛擬環境名稱
pip install -r plist.txt

WSGI

  • 在生產環境中使用WSGI作為python web的伺服器
  • WSGI:全拼為Python Web Server Gateway Interface,Python Web伺服器閘道器介面,是Python應用程式或框架和Web伺服器之間的一種介面,被廣泛接受。WSGI沒有官方的實現, 因為WSGI更像一個協議,只要遵照這些協議,WSGI應用(Application)都可以在任何伺服器(Server)上執行
  • 專案預設會生成一個wsgi.py檔案,確定了settings模組、application物件
    • application物件:在Python模組中使用application物件與應用伺服器互動
    • settings模組:用於進行專案配置

uWSGI

  • uWSGI實現了WSGI的所有介面,是一個快速、自我修復、開發人員和系統管理員友好的伺服器
  • uWSGI程式碼完全用C編寫,效率高、效能穩定
  • 安裝uWSGI
pip install uwsgi
  • 配置uWSGI,在專案目錄下建立uwsgi.ini檔案,配置如下
[uwsgi]
#使用nginx連線時使用
#socket=127.0.0.1:8080
#直接做web伺服器使用
http=127.0.0.1:8080
#專案目錄
chdir=/home/python/Desktop/pytest/test6
#專案中wsgi.py檔案的目錄,相對於專案目錄
wsgi-file=test6/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log
  • 啟動
uwsgi --ini uwsgi.ini
  • 檢視
ps ajx|grep uwsgi
  • 效果如下圖

  • 停止
uwsgi --stop uwsgi.pid
  • 在瀏覽器中輸入如下網址
http://127.0.0.1:8080/
  • 瀏覽效果如下圖,圖片是看不到的

  • 測試沒問題,將配置中啟用socket,禁用http

  • 停止uwsgi服務,然後再啟動uwsgi

Nginx

  • 使用nginx的作用主要包括負載均衡、反向代理
  • 點選檢視官方網站
  • 下載nginx後放到桌面上,解壓縮
tar zxvf nginx-1.6.3.tar.gz
  • 進入nginx-1.6.3目錄,依次執行以下命令進行安裝
./configure
make
sudo make install
  • 預設安裝到/usr/local/nginx/目錄,進入此目錄
cd /usr/local/nginx/
  • 啟動
sudo sbin/nginx
  • 檢視程序
ps ajx|grep nginx

  • 停止
sudo sbin/nginx -s stop
  • 開啟瀏覽器,輸入如下網址
http://127.0.0.1/
  • 瀏覽效果如下圖

指向uwsgi專案

  • 開啟conf/nginx.conf檔案
sudo gedit conf/nginx.conf
  • 在server節點下新增新的location項,指向uwsgi的ip與埠
        location / {
            #將所有的引數轉到uwsgi下
            include uwsgi_params;
            #uwsgi的ip與埠
            uwsgi_pass 127.0.0.1:8080;
        }
  • 程式碼效果如下圖

  • 關閉nginx後再開啟
  • 開啟瀏覽器,重新整理後如下圖

靜態檔案

  • 所有的靜態檔案都會由nginx處理,不會將請求轉到uwsgi
  • 開啟conf/nginx.conf檔案
sudo gedit conf/nginx.conf
  • 在server節點下新增新的location項,用於處理靜態檔案
    location /static {
        alias /var/www/test6/static/;
    }
  • 在伺服器上建立如下目錄
sudo mkdir -vp /var/www/test6/static/
  • 修改目錄許可權
sudo chmod 777 /var/www/test6/static/
  • 最終目錄結構如下圖:

  • 修改test6/settings.py檔案
STATIC_ROOT='/var/www/test6/static/'
STATIC_URL='/static/'
  • 收集所有靜態檔案到static_root指定目錄
python manage.py collectstatic
  • 按提示輸入yes,收集檔案
  • 停止後再啟動nginx服務
  • 在瀏覽器中重新整理,瀏覽效果如下圖

  • 佈署完成