Django項目在linux系統中虛擬環境部署
1.在linux系統下,安裝virtualenv
命令:pip install virtualenv
2.項目部署前的准備
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】
通過UWSGI服務器部署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
模仿Django和Tornado的項目部署方式
參考
http://docs.jinkan.org/docs/flask/deploying/index.html#deployment
3.在指定的文件夾中上傳項目文件
使用FTP連接linux系統,一般情況下建議使用非root賬號和密碼進行連接。
上傳文件之前可以使用pip freeze > 文件名,在原來的項目環境中進入項目搜集第三方模塊,並保存在自定義文件中,將該文件創建於項目內部,一起上傳如linux系統。