配置 nginx + uwgi django 服務 以及 supervisor 的用法


 

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
View Code

 

- 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里面的項目

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM