- virtualenv虛擬環境介紹與簡單使用
- uwsgi啟動django項目
- supervisor介紹與簡單使用
- nginx+uWSGI+django+virtualenv+supervisor發布web服務器
virtualenv虛擬環境介紹與簡單使用
- 簡介:
virtualenv是如何創建“獨立”的Python運行環境的呢?
原理很簡單,就是把系統Python復制一份到virtualenv的環境,
用命令source venv/bin/activate進入一個virtualenv環境時,
virtualenv會修改相關環境變量,讓命令python和pip均指向當前的virtualenv環境。
- 安裝:
1.安裝virtualenv
pip3 install virtualenv
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv # 指定源
pip3 install --upgrade pip # 升級 pip
- 使用:
# 創建目錄
mkdir Myproject
cd Myproject
# 創建獨立運行環境-命名
virtualenv --no-site-packages venv#得到獨立第三方包的環境
# 進入虛擬環境
source venv/bin/activate#此時進入虛擬環境(venv)Myproject
# 安裝第三方包
(venv)Myproject: pip install django==1.9.8
#此時pip的包都會安裝到venv環境下,venv是針對Myproject創建的
# 退出venv環境
deactivate命令
uwsgi啟動django項目
- uwsgi簡介:
wsgi 全稱web server gateway interface,wsgi不是服務器,也不是python模塊,只是一種協議,描述web server如何和web application通信的規則。
運行在wsgi上的web框架有bottle,flask,django
uwsgi 和wsgi一樣是通信協議,是uWSGI服務器的單獨協議,用於定義傳輸信息的類型
uWSGI 是一個web服務器,實現了WSGI協議,uwsgi協議。a
- uwsgi安裝:
# 進入虛擬環境venv,安裝uwsgi
(venv) [root@slave 192.168.11.64 /opt]$pip3 install uwsgi
# 檢查uwsgi版本
(venv) [root@slave 192.168.11.64 /opt]$uwsgi --version
2.0.17.1
# 檢查uwsgi python版本
uwsgi --python-version
- 簡單運行一個小腳本:
#啟動一個python
uwsgi --http :8000 --wsgi-file test.py
http :8000: 使用http協議,端口8000
wsgi-file test.py: 加載指定的文件,test.py
#test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
- uWsgi 熱加載python程序:
在啟動命令后面加上參數
uwsgi --http :8088 --module mysite.wsgi --py-autoreload=1
#發布命令
command= /home/venv/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /opt/mysite --home=/home/venv --module mysite.wsgi
#此時修改django代碼,uWSGI會自動加載django程序,頁面生效
- 運行django項目
# mysite/wsgi.py 確保找到這個文件
uwsgi --http :8000 --module mysite.wsgi
# module mysite.wsgi: 加載指定的wsgi模塊
- uwsgi配置文件:

復制代碼 uwsgi支持ini、xml等多種配置方式,本文以 ini 為例, 在/etc/目錄下新建uwsgi_nginx.ini,添加如下配置: # mysite_uwsgi.ini file [uwsgi] # Django-related settings # the base directory (full path) chdir = /opt/mysite # Django's wsgi file module = mysite.wsgi # the virtualenv (full path) home = /opt/venv # process-related settings # master master = true # maximum number of worker processes processes = 1 # the socket (use the full path to be safe socket = 0.0.0.0:8000 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true
- Nginx + uWsgi +Django:
- 配置Nginx的反向代理,修改配置文件:
worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; keepalive_timeout 65; #nginx反向代理uwsgi server { listen 80; server_name 192.168.11.64; location / { include /opt/nginx1-12/conf/uwsgi_params; uwsgi_pass 0.0.0.0:8000; root html; index index.html index.htm; } #nginx處理靜態頁面資源 location /static{ alias /opt/nginx1-12/static; } #nginx處理媒體資源 location /media{ alias /opt/nginx1-12/media; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
- 啟動Nginx
nginx
- 用 uWsgi啟動django:
/home/venv/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /opt/mysite --home=/home/venv --module mysite.wsgi # /home/venv/bin/uwsgi :命令路徑 # --uwsgi 0.0.0.0:8000: 開啟服務器的ip+端口 # --chdir /opt/mysite: 項目路徑 # --home=/home/venv: 虛擬環境路徑 # --module mysite.wsgi: 在項目路徑下的django主文件下的wsgi文件
supervisor介紹與簡單使用
supervisor 是基於 python 的任務管理工具,用來自動運行各種后台任務,
當然你也能直接利用 nohup 命令使任務自動后台運行,
但如果要重啟任務,每次都自己手動 kill 掉任務進程,
這樣很繁瑣,而且一旦程序錯誤導致進程退出的話,系統也無法自動重載任務。
- 用python2安裝 supervisor, python3不支持
#注意此時已經退出虛擬環境了!!!!! yum install python-setuptools easy_install supervisor
- 安裝完畢后,通過命令自動生成supervisor 配置文件:
echo_supervisord_conf > /etc/supervisord.conf
- 在/etc/supervisord.conf末尾添加上 用uWsgi啟動django的命令,和自己項目的名字, 如:
[program:mysite] command= /home/venv/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /opt/mysite --home=/home/venv --module mysite.wsgi directory=/opt/mysite startsecs=0 stopwaitsecs=0 autostart=true autorestart=true
- 啟動supervisord,關閉supervisord控制的項目,以及重啟:
# 啟動 supervisord: supervisord -c /etc/supervisord.conf # 項目相關的語法: supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all] #重啟mysite項目 supervisorctl -c /etc/supervisord.conf restart mysite # 開啟mysite項目 supervisorctl -c /etc/supervisord.conf start mysite # 關閉mysite項目 supervisorctl -c /etc/supervisord.conf stop mysite
nginx+uWSGI+django+virtualenv+supervisor發布web服務器
# 第一步:在虛擬環境中創建好django項目 # 第二步:在虛擬環境中下載uWsgi # 第三步:配置好Nginx反向代理,並啟動Nginx服務 # 第四步:下載並配置好supervisord # 第五步: 開啟supervisord里面的項目