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
(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
模仿Django和Tornado的專案部署方式
參考
http://docs.jinkan.org/docs/flask/deploying/index.html#deployment