1.在linux系統下,安裝virtualenvhtml
命令:pip install virtualenvpython
2.項目部署前的準備mysql
準備打包好項目組開發的web項目,經過FTP上傳到指定的linux/unix服務器linux
案例項目:mysite/nginx
Django生產環境服務器,常規狀況下使用Linux/Unix平臺做爲服務器平臺,須要準備以下運行環境web
l 環境:python2.x / python3.xsql
l 軟件:mysql-server、mysql-client數據庫
l 模塊:pymysql、pillow、django、uwsgidjango
在指定的文件夾中上傳項目文件flask
使用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 |
經過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
使用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
參考Django 1.1部分
直接經過配置文件或者命令行指定端口運行程序,就可使用torando自帶的web服務器啓動web項目並提供正常的web服務了
可是這樣的操做方式並非可取的,命令行須要處理讓啓動的程序後臺運行,而且若是部署多進程項目的話,多個進程之間沒有進行統一管理的操做,很不方便後期的維護操做
直接運行【阻塞方式】
>>> python demo.py --port=8000 |
後臺運行【非阻塞方式】
>>> python demo.py --port=8000 & |
針對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:* # 重啓全部進程進程[能夠指定進程] |
參考Django項目部署1.5章節nginx部署部分
模仿Django和Tornado的項目部署方式
參考
http://docs.jinkan.org/docs/flask/deploying/index.html#deployment
3.在指定的文件夾中上傳項目文件
使用FTP鏈接linux系統,通常狀況下建議使用非root帳號和密碼進行鏈接。
上傳文件以前可使用pip freeze > 文件名,在原來的項目環境中進入項目蒐集第三方模塊,並保存在自定義文件中,將該文件建立於項目內部,一塊兒上傳如linux系統。