1. 程式人生 > >Django專案在linux系統中虛擬環境部署

Django專案在linux系統中虛擬環境部署

1. Django web project deployment

1.1. 專案準備

準備打包好專案組開發的web專案,通過FTP上傳到指定的linux/unix伺服器

案例專案:mysite/

1.2. 生產環境準備

Django生產環境伺服器,常規情況下使用Linux/Unix平臺作為伺服器平臺,需要準備如下執行環境

l 環境:python2.x / python3.x

l 軟體:mysql-server、mysql-client

l 模組:pymysql、pillow、django、uwsgi

1.3. 專案部署【UWSGI部署】



在指定的資料夾中上傳專案檔案

使用FTP連線linux系統,一般情況下建議使用非root賬號和密碼進行連線。


上傳檔案之前可以使用pip freeze  > 檔名,在原來的專案環境中進入專案蒐集第三方模組,並儲存在自定義檔案中,將該檔案創建於專案內部,一起上傳如linux系統。


(1) 在生產環境開啟mysql-client命令列,執行專案sql指令碼語句,初始化資料庫

(2) 在專案根目錄中,新增uwsgi.ini配置檔案,新增如下內容

[uwsgi]

#指定伺服器部署IP地址和埠

http=192.168.10.120:8000

#配置專案在當前伺服器中的絕對路徑

chdir=/home/worker/django_pro_1_11/mysite

#相對路徑指定當前專案中wsgi.py

wsgi-file=mysite/wsgi.py

#設定啟動的程序數量

processes=4

#設定每個程序啟動的執行緒數量

threads=2

#設定主程序

master=True

#指定儲存主程序編號的檔案

pidfile=uwsgi.pid

#指定守護程序的日誌儲存

daemonize=uwsgi.log

(3) 專案執行

啟動專案,當前路徑中,直接執行命令啟動專案

uwsgi --ini uwsgi.ini

停止專案,通過包含主程序編號的檔案設定停止專案

uwsgi --stop uwsgi.pid

重啟專案

uwsgi --reload uwsgi.pid

1.4. 專案部署【UWSGI + NGINX】

通過U

WSGI伺服器部署Django專案,通過nginx進行反向代理

(1) 專案根目錄建立uwsgi.ini配置檔案

[uwsgi]

#配置和nginx反向代理之間的連線地址

socket=localhost:8000

#配置專案根路徑

chdir=/home/worker/django_pro_1_11/mysite

#相對路徑指定當前專案中wsgi.py

wsgi-file=mysite/wsgi.py

#設定啟動的程序數量

processes=4

#設定每個程序啟動的執行緒數量

threads=2

#設定主程序

master=True

#指定儲存主程序編號的檔案

pidfile=uwsgi.pid

#指定守護程序的日誌儲存

daemonize=uwsgi.log

(2) 編輯nginx.conf配置檔案,設定反向代理

nginx和uwsgi進行配合使用時,nginx主要有兩個作用,使用nginx作為靜態檔案伺服器和反向代理伺服器

l 設定靜態檔案

開啟django專案的配置檔案,新增STATIC_ROOT配置

編輯mysite/mysite/settings.py

..

STATIC_ROOT=/home/worker/django_pro_1_11/myweb/static_file/

..

進入Django專案根目錄執行命令收集靜態檔案

>>> python manage.py collectstatic

l 反向代理配置

編輯/etc/nginx/nginx.conf配置檔案,編輯server配置選項

核心配置反向代理server伺服器和靜態檔案別名

..

events {

       ...

}

..

http {

        ..

        server {

            listen 80;

            server_name 192.168.10.120;

#反向代理配置

location / {

                include uwsgi_params;

                uwsgi_pass 127.0.0.1:8000;

            }

#靜態檔案路徑配置

location /static {

                alias /home/worker/django_pro_1_11/myweb/static_file/;

            }

        }

       ..

}

(3) 啟動專案進行測試

l 首先進入專案目錄,啟動Django專案

>>> uwsgi --ini uwsgi.ini

l 啟動nginx伺服器

>>> nginx

l 檢查程序啟動情況

>>> ps -ef|grep wsgi

..

>>> ps -ef|grep nginx

..

l 測試訪問專案

TEST

1.5. 專案分散式部署【UWSGI + NGINX】

使用UWSGI配置Django專案的多程序部署,使用nginx進行靜態檔案的部署和負載均衡的配置

(1) 在多臺主機上部署多個相同的django專案【同一臺主機上部署多個專案進行模擬】

設定兩個或者多個Django專案的啟動配置資訊如下

mysite/uwsgi.ini

[uwsgi]

#配置專案訪問地址

http=localhost:8000

#配置專案根路徑

chdir=/home/worker/django_pro_1_11/mysite

#相對路徑指定當前專案中wsgi.py

wsgi-file=mysite/wsgi.py

#設定啟動的程序數量

processes=4

#設定每個程序啟動的執行緒數量

threads=2

#設定主程序

master=True

#指定儲存主程序編號的檔案

pidfile=uwsgi.pid

#指定守護程序的日誌儲存

daemonize=uwsgi.log

mysite2/uwsgi.ini

[uwsgi]

#配置專案訪問地址

http=localhost:9000

#配置專案根路徑

chdir=/home/worker/django_pro_1_11/mysite2

#相對路徑指定當前專案中wsgi.py

wsgi-file=mysite/wsgi.py

#設定啟動的程序數量

processes=4

#設定每個程序啟動的執行緒數量

threads=2

#設定主程序

master=True

#指定儲存主程序編號的檔案

pidfile=uwsgi.pid

#指定守護程序的日誌儲存

daemonize=uwsgi.log

(2) 配置nginx靜態伺服器對映和負載均衡

.. ..

#使用預設的輪詢分發配置多個分佈的服務主機

upstream myweb {

            server 127.0.0.1:8000;

            server 127.0.0.1:9000;

        }

        server {

            listen 80;

            server_name 192.168.10.120;

#配置分散式負載轉發

            location / {

                proxy_pass http://myweb;

            }

#配置靜態檔案伺服器

            location /static {

                alias /home/worker/django_pro_1_11/myweb/static_file/;

            }

        .. ..

(3) 測試訪問專案

TEST

2. Tornado web project deployment

2.1. 專案準備

參考Django 1.1部分

2.2. 專案常規部署【使用自帶伺服器直接操作】

直接通過配置檔案或者命令列指定埠執行程式,就可以使用torando自帶的web伺服器啟動web專案並提供正常的web服務了

但是這樣的操作方式並不是可取的,命令列需要處理讓啟動的程式後臺執行,並且如果部署多程序專案的話,多個程序之間沒有進行統一管理的操作,很不方便後期的維護操作

直接執行【阻塞方式】

>>> python demo.py --port=8000

後臺執行【非阻塞方式】

>>> python demo.py --port=8000 &

2.3. supervisor管理程序

針對tornado多程序部署方式,第三方提供了各種程序管理模組用於進行tornado專案多個程序的維護管理,專案中常用的如supervisor、circus等等

(1) ubuntu中安裝supervisor

$ sudo apt-get install supervisor

備註:可以使用pip install supervisor安裝

安裝完成後,生成supervisor配置檔案

cd /etc/supervisor

echo_supervisord_conf > supervisord.conf

修改配置檔案/etc/supervisor/supervisord.conf

..

[include]

files=./conf.d/*.conf

(2) 新增tornado管理配置檔案/etc/supervisor/conf.d/tornadoes.conf

[group:td]

programs=tornado-8000, tornado-8001

[program:tornado-8000]

command=/home/worker/tornado_web/tornado_lib/bin/python /home/worker/tornado_web/web1/demo01.py --port=8000

directory=/home/worker/tornado_web/web1

user=www-data

autorestart=true

redirect_stderr=true

stdout_logfile=/home/worker/tornado_web/web1/log/tornado.log

loglevel=debug

[program:tornado-8001]

command=/home/worker/tornado_web/tornado_lib/bin/python /home/worker/tornado_web/web1/demo01.py --port=8001

directory=/home/worker/tornado_web/web1

user=www-data

autorestart=true

redirect_stderr=true

stdout_logfile=/home/worker/tornado_web/web1/log/tornado.log

loglevel=info

(3) 程序管理

啟動程序管理器

$ supervisord -c supervisord.conf

程序管理器包含程序狀態管理

supervisorctl status   # 檢視管理的所有程序的狀態

supervisorctl update   #重新啟動配置檔案修改的程式

supervisorctl stop td:* # 停止所有程序[可以指定程序]

supervisorctl start td:* # 啟用所有程序[可以指定程序]

supervisorctl restart td:* # 重啟所有程序程序[可以指定程序]

2.4. supervisor+nginx分散式部署

參考Django專案部署1.5章節nginx部署部分

3. Flask web project deployment

模仿DjangoTornado的專案部署方式

參考

http://docs.jinkan.org/docs/flask/deploying/index.html#deployment