国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

uwsgi+nginx項(xiàng)目部署

betacat / 3313人閱讀

摘要:部署項(xiàng)目部署一個(gè)的開源框架。輪詢負(fù)載均衡在配置文件中添加如下配置,此配置有三臺(tái)服務(wù)器提供支付服務(wù)。缺省配置就是輪詢策略負(fù)載均衡支持和協(xié)議,只需要修改后面的協(xié)議即可支持的負(fù)載均衡只需將改為即可。

部署Django項(xiàng)目 Django+uWSGI+nginx 部署

django 一個(gè)pyhton的開源web框架。

uWSGI 一個(gè)基于自有的uwsgi協(xié)議、WSGI協(xié)議和http服務(wù)協(xié)議的web網(wǎng)關(guān)

nginx 常用的代理服務(wù)器

WSGI:一種實(shí)現(xiàn)python解析的通用接口標(biāo)準(zhǔn)/協(xié)議,是一種通用的接口標(biāo)準(zhǔn)或者接口協(xié)議,實(shí)現(xiàn)了python web程序與服務(wù)器之間交互的通用性。?
利用它,web.py或bottle或者django等等的python web開發(fā)框架,就可以輕松地部署在不同的web server上了;

uwsgi:同WSGI一樣是一種通信協(xié)議?
uwsgi協(xié)議是一個(gè)uWSGI服務(wù)器自有的協(xié)議,它用于定義傳輸信息的類型,它與WSGI相比是兩樣?xùn)|西。

uWSGI?:一種python web server或稱為Server/Gateway?
uWSGI類似tornadoweb或者flup,是一種python web server,uWSGI是實(shí)現(xiàn)了uwsgi和WSGI兩種協(xié)議的Web服務(wù)器,負(fù)責(zé)響應(yīng)python 的web請(qǐng)求。?
因?yàn)閍pache、nginx等,它們自己都沒有解析動(dòng)態(tài)語言如php的功能,而是分派給其他模塊來做,比如apache就可以說內(nèi)置了php模塊,讓人感覺好像apache就支持php一樣。?
uWSGI實(shí)現(xiàn)了wsgi協(xié)議、uwsgi協(xié)議、http等協(xié)議。 Nginx中HttpUwsgiModule的作用是與uWSGI服務(wù)器進(jìn)行交換。

項(xiàng)目流程
首先客戶端請(qǐng)求服務(wù)資源,
nginx作為直接對(duì)外的服務(wù)接口,接收到客戶端發(fā)送過來的http請(qǐng)求,會(huì)解包、分析,
如果是靜態(tài)文件請(qǐng)求就根據(jù)nginx配置的靜態(tài)文件目錄,返回請(qǐng)求的資源,
如果是動(dòng)態(tài)的請(qǐng)求,nginx就通過配置文件,將請(qǐng)求傳遞給uWSGI;uWSGI 將接收到的包進(jìn)行處理,并轉(zhuǎn)發(fā)給wsgi,
wsgi根據(jù)請(qǐng)求調(diào)用django工程的某個(gè)文件或函數(shù),處理完后django將返回值交給wsgi,
wsgi將返回值進(jìn)行打包,轉(zhuǎn)發(fā)給uWSGI,
uWSGI接收后轉(zhuǎn)發(fā)給nginx,nginx最終將返回值返回給客戶端(如瀏覽器)。
*注:不同的組件之間傳遞信息涉及到數(shù)據(jù)格式和協(xié)議的轉(zhuǎn)換

? 作用:?

第一級(jí)的nginx并不是必須的,uwsgi完全可以完成整個(gè)的和瀏覽器交互的流程;?

在nginx上加上安全性或其他的限制,可以達(dá)到保護(hù)程序的作用;?

uWSGI本身是內(nèi)網(wǎng)接口,開啟多個(gè)work和processes可能也不夠用,而nginx可以代理多臺(tái)uWSGI完成uWSGI的負(fù)載均衡;?

django在debug=False下對(duì)靜態(tài)文件的處理能力不是很好,而用nginx來處理更加高效。

安裝與配置

創(chuàng)建項(xiàng)目運(yùn)行的虛擬環(huán)境

virtualenv env --python=python3.6
pip install -r requirements.txt  #安裝django運(yùn)行環(huán)境

運(yùn)行開發(fā)服務(wù)器測(cè)試

                cd project # 進(jìn)入項(xiàng)目 project 目錄
                python manage.py runserver
            運(yùn)行開發(fā)服務(wù)器測(cè)試,確保開發(fā)服務(wù)器下能正常打開網(wǎng)站。

安裝uWSGI

                # 在普通用戶下安裝
                sudo apt install libpython3.6-dev
                # 虛擬環(huán)境中
                pip install uwsgi

測(cè)試uWSGI: 新建文件test.py,寫入以下內(nèi)容

                def application(env, start_response):
                    start_response("200 OK", [("Content-Type","text/html")])
                    return "Hello World"

運(yùn)行

                # 0.0.0.0可以省略 
                sudo uwsgi --http 0.0.0.0:8000 --wsgi-file test.py --processes 4 --threads 3
      如果提示端口已經(jīng)被占用,這時(shí)可以把相關(guān)的進(jìn)程 kill 掉。
            probably another instance of uWSGI is running on the same address (:8002).
            bind(): Address already in use [core/socket.c line 764]
      按照端口進(jìn)行查詢進(jìn)程
          lsof -i :8002
      可以查出:
           COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
            uwsgi   2208   tu    4u  IPv4 0x53492abadb5c9659      0t0  TCP *:teradataordbms (LISTEN)
            uwsgi   2209   tu    4u  IPv4 0x53492abadb5c9659      0t0  TCP *:teradataordbms (LISTEN)
      這時(shí)根據(jù) PID 可以用下面的命令 kill 掉相關(guān)程序:

sudo kill -9 2208 2209

運(yùn)行django項(xiàng)目

      # --chdir 項(xiàng)目目錄 --home 虛擬環(huán)境目錄 project.wsgi 指的是 project/wsgi.py 文件
      uwsgi --http :8000 --chdir=/path/to/project  --home=/path/to/env --module project.wsgi

配置文件運(yùn)行

            上面這樣使用一行命令太長(zhǎng)了,我們使用 ini 配置文件來搞定,比如項(xiàng)目在 /home/ray/project 這個(gè)位置,在其中新建一個(gè) uwsgi.ini 全路徑為 /home/ray/project/uwsgi.ini
                [uwsgi]
                #socket 為上線使用,http為直接作為服務(wù)器使用。
                socket = 127.0.0.1:8080 #ip和端口號(hào)可以改
                http = 127.0.0.1:8000
                #項(xiàng)目目錄
                chdir=/home/ray/project
                module=project.wsgi
                #虛擬環(huán)境目錄
                #home = home/ray/MxOnline/mxonlineEnv
                master = true         
                processes=4
                threads=2
                # 下面的參數(shù)不一定要加
                # pidfile=uwsgi.pid   uwsgi.pid 和uwsgi.log會(huì)在啟動(dòng)uwsgi時(shí)自動(dòng)生成在項(xiàng)目目錄下。
                # daemonize=uswgi.log
                # max-requests=2000    
                # chmod-socket=664
                # vacuum=true
# uwsgi啟動(dòng)
uwsgi --ini uwsgi.ini
#uwsgi 停止
uwsgi --stop uwsgi.pid

安裝nginx,在普通用戶下安裝。

                # 安裝
                sudo apt install nginx 
                #重載
                sudo /etc/init.d/nginx reload
                sudo nginx -s reload
                # 啟動(dòng)
                sudo /etc/init.d/nginx start
                # 停止
                sudo /etc/init.d/nginx stop
                # 重啟
                sudo /etc/init.d/nginx restart
                #查看nginx是否啟動(dòng)
                ps -ef | grep nginx
            root     24956     1  0 19:41 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
            nobody   24957 24956  0 19:41 ?        00:00:00 nginx: worker process
            root     24959 10533  0 19:41 pts/0    00:00:00 grep --color=auto nginx

配置 nginx

        ##### sites-enable 和 sites-available
 These directories are used to define configurations for your websites. Files are generally created in the "sites-available" directory, and thensymbolically linked to the "sites-enabled" directory when they are ready to go live.

? 都是在nginx.conf作修改,因?yàn)閚ginx.conf include指令已經(jīng)包括了sites-enabled的內(nèi)容,在site-enabled作修改就相當(dāng)于在nginx.conf作修改,可維護(hù)性高。

include /etc/nginx/conf.d/*.conf;

include /etc/nginx/sites-enabled/*;

ites-available是存放當(dāng)前的server配置, 在這里修改。

sites-enabled是激活并使用的server配置(從sites_available的文件創(chuàng)建快捷方式到sites-enabled)

新建一個(gè)網(wǎng)站 test

# 不用sudo沒有權(quán)限修改
sudo vim /etc/nginx/sites-available/test.conf
 #配置負(fù)載均衡
     # upstream ray {
     #    server 127.0.0.1:8000; # for a web port socket
     #}

     server {
         listen 80;
         server_name www.helloray.cn;#域名或者ip地址
         charset utf-8;
         # Django 的static和 media等靜態(tài)資源交給Nginx處理
         location /static {
             # 路徑必須和STATIC_ROOT一樣
             alias /var/www/myApp/static/;
         }
          location /media  {
              #項(xiàng)目下的media路徑
             alias /var/www/myApp/media/; 
         } 
         location /{
             # 必須和uwsgi.ini中socket一樣,配置了upstream可以將uwsgi_pass配置為:http:// +             upstream名稱,即“http://ray”.
             uwsgi_pass 127.0.0.1:8080; 
             #uwsgi_pass http://ray; 
             include uwsgi_params;
         }
     }

激活網(wǎng)站:建立軟鏈接

 sudo ln -s /etc/nginx/sites-available/test.conf  /etc/nginx/sites-enabled/test.conf

nginx創(chuàng)建靜態(tài)文件目錄,并更改權(quán)限

 sudo mkdir -vp /var/www/myApp/static/
 sudo chmod 777 /var/www/myApp/static/

在項(xiàng)目下setting.py 文件中

 STATIC_URL = "static"
 STATIC_ROOT = "/var/www/myApp/static/"
 STATICFILES_DIRS = [
   os.path.join(BASE_DIR,"static"),
 ]
 MEDIA_URL = "/media/"
 MEDIA_ROOT = os.path.join(BASE_DIR,"media")

在項(xiàng)目目錄下遷移靜態(tài)文件

 python manage.py collectstatic

Django中settings.py中的五個(gè)設(shè)置參數(shù)的一些故事:

1、MEDIA_ROOT與MEDIA_URL

事實(shí)上MEDIA_ROOT和MEDIA_URL代表的是用戶上傳后的文件一般保存的地方。我的理解是,可變文件的文件夾。

與這兩個(gè)參數(shù)有聯(lián)系的,是在Django的FileField和ImageField這樣的Model類中,有upload_to參數(shù)可選。當(dāng)upload_to設(shè)置相關(guān)的地址后,如:upload_to="username";文件上傳后將自動(dòng)保存到 os.path.join(MEDIA_ROOT, upload_to)。

而MEDIA_URL,,則代表用戶通過URL來訪問這個(gè)本地地址的URL。如本機(jī)http://127.0.0.1/, MEDIA_URL設(shè)置為"/site_media/",那么通過 http://127.0.0.1/site_media/***  就可以訪問相關(guān)的上傳圖片或者其他資源。

2、STATIC_ROOT與STATIC_URL

STATIC_ROOT和STATIC_URL則是網(wǎng)站中,用于網(wǎng)站顯示的靜態(tài)圖片、CSS、JS等文件的保存地址。我的理解是,運(yùn)行中不會(huì)再變文件的文件夾(即不會(huì)刪除或者新增)

2.1 STATIC_URL

 同MEDIA_URL類似;STATIC_URL為"/static/"時(shí)候,通過http://127.0.0.1/static/***就可以訪問相關(guān)的靜態(tài)文件了。

2.2 STATIC_ROOT

STATIC_ROOT是一個(gè)比較特殊的文件夾。這是區(qū)別Django的開發(fā)模式和部署模式下最大的地方了。

通常我們?cè)陂_發(fā)模式下,可以在我們所在的project下建立相應(yīng)的app, 然后每個(gè)app下都建立相應(yīng)的static文件夾。在開發(fā)模式下(Debug=True),Django將為我們自動(dòng)查找這些靜態(tài)文件(每個(gè)app)并在網(wǎng)頁上顯示出來。然而,在部署模式下,Django認(rèn)為這些工作交由web服務(wù)器來運(yùn)行會(huì)更有效率。

因此,在部署時(shí),我們需要運(yùn)行一下python manage.py collectstatic 這個(gè)命令。這個(gè)命令將會(huì)把每個(gè)app里的static目錄下的文件copy到STATIC_ROOT這個(gè)文件夾下,這時(shí)候如果在部署模式下(Debug=False),網(wǎng)頁中相關(guān)的,如: http://127.0.0.1/static/*** 的訪問,將不會(huì)訪問Django下各個(gè)App中的static,而是STATIC_ROOT中所指定的文件夾。

3、Debug=False后,為何無法訪問圖片和js等文件了?

其實(shí)這個(gè)問題,是在于web服務(wù)器沒有對(duì)STATIC_ROOT以及MEDIA_ROOT這兩個(gè)文件夾進(jìn)行映射所導(dǎo)致的。

以apache為例,假定:

STATIC_ROOT="/home/user/static/" 

STATIC_URL="/static/"

 MEDIA_ROOT="/home/user/media/"

MEDIA_URL="/media/"

那么可以在apache的配置文件中,增加以下:



Order deny,allow
Allow from all
Satisfy Any

Alias /static/     "/home/user/static"

Order deny,allow
Allow from all
Satisfy Any

Alias /media/      "/home/user/media/"


4、STATICFILES_DIRS:和TEMPLATE_DIRS的含義差不多,就是除了各個(gè)app的static目錄以外還需要管理的靜態(tài)文件,添加到這里的文件會(huì)在collectstatic時(shí) copy到STATIC_ROOT中
負(fù)載均衡的設(shè)置

網(wǎng)站的訪問量越來越大,服務(wù)器的服務(wù)模式也得進(jìn)行相應(yīng)的升級(jí),比如分離出數(shù)據(jù)庫服務(wù)器、分離出圖片作為多帶帶服務(wù),這些是簡(jiǎn)單的數(shù)據(jù)的負(fù)載均衡,將壓力分散到不同的機(jī)器上。有時(shí)候來自web前端的壓力,也能讓人十分頭痛。怎樣將同一個(gè)域名的訪問分散到兩臺(tái)或更多的機(jī)器上呢?這其實(shí)就是另一種負(fù)載均衡了,nginx自身就可以做到,只需要做個(gè)簡(jiǎn)單的配置就行。

  nginx不單可以作為強(qiáng)大的web服務(wù)器,也可以作為一個(gè)反向代理服務(wù)器,而且nginx還可以按照調(diào)度規(guī)則實(shí)現(xiàn)動(dòng)態(tài)、靜態(tài)頁面的分離,可以按照輪詢、ip哈希、URL哈希、權(quán)重等多種方式對(duì)后端服務(wù)器做負(fù)載均衡,同時(shí)還支持后端服務(wù)器的健康檢查。

nginx 的 upstream目前支持 4 種方式的分配?

輪詢:將請(qǐng)求依次輪詢發(fā)給每個(gè)服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。

最少鏈接:將請(qǐng)求發(fā)送給持有最少活動(dòng)鏈接的服務(wù)器。

ip哈希:通過ip的哈希函數(shù)結(jié)果決定請(qǐng)求發(fā)送給哪個(gè)服務(wù)器。這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,可以解決session的問題。

權(quán)重:服務(wù)器的權(quán)重越高,處理請(qǐng)求的概率越大。用于后端服務(wù)器性能不均的情況。

輪詢負(fù)載均衡

在nginx.conf配置文件中添加如下配置,此配置有三臺(tái)服務(wù)器提供支付服務(wù)。

缺省配置就是輪詢策略;

nginx負(fù)載均衡支持http和https協(xié)議,只需要修改 proxy_pass后面的協(xié)議即可;

nginx支持FastCGI, uwsgi, SCGI,memcached的負(fù)載均衡,只需將 proxy_pass改為uwsgi_pass, fastcgi_pass, scgi_pass,memcached_pass即可。

此策略適合服務(wù)器配置相當(dāng),無狀態(tài)且短平快的服務(wù)使用。

http {
    upstream CashServers {
        server CashServers1.com;
        server CashServers2.com;
        server CashServers3.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://CashServers;
        }
    }
}
最少鏈接負(fù)載均衡

最少鏈接負(fù)載均衡通過least_conn指令定義;

此負(fù)載均衡策略適合請(qǐng)求處理時(shí)間長(zhǎng)短不一造成服務(wù)器過載的情況;

http {
    upstream CashServers {
      least_conn;
        server CashServers1.com;
        server CashServers2.com;
        server CashServers3.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://CashServers;
        }
    }
}
ip哈希負(fù)載均衡

ip哈希負(fù)載均衡使用ip_hash指令定義;

nginx使用請(qǐng)求客戶端的ip地址進(jìn)行哈希計(jì)算,確保使用同一個(gè)服務(wù)器響應(yīng)請(qǐng)求;

此策略適合有狀態(tài)服務(wù),比如session;

http {
    upstream CashServers {
      ip_hash;
        server CashServers1.com;
        server CashServers2.com;
        server CashServers3.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://CashServers;
        }
    }
}
?權(quán)重負(fù)載均衡

權(quán)重負(fù)載均衡需要使用weight指令定義;

權(quán)重越高分配到需要處理的請(qǐng)求越多;

此策略可以與最少鏈接負(fù)載和ip哈希策略結(jié)合使用;

此策略比較適合服務(wù)器的硬件配置差別比較大的情況;

http {
    upstream CashServers {      
        server CashServers1.com weight=3;
        server CashServers2.com weight=2;
        server CashServers3.com weight=1;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://CashServers;
        }
    }
}

附錄:參數(shù)說明

   >----------------附錄:uwsgi參數(shù)說明----------------
   >
   >- http : 協(xié)議類型和端口號(hào)
   >- processes : 開啟的進(jìn)程數(shù)量
   >- workers : 開啟的進(jìn)程數(shù)量,等同于processes(官網(wǎng)的說法是spawn the specified number ofworkers / processes)
   >- chdir : 指定運(yùn)行目錄(chdir to specified directory before apps loading)
   >- wsgi-file : 載入wsgi-file(load .wsgi file)
   >- stats : 在指定的地址上,開啟狀態(tài)服務(wù)(enable the stats server on the specified address)
   >- threads : 運(yùn)行線程。由于GIL的存在,我覺得這個(gè)真心沒啥用。(run each worker in prethreaded mode with the specified number of threads)
   >- master : 允許主進(jìn)程存在(enable master process)
   >- daemonize : 使進(jìn)程在后臺(tái)運(yùn)行,并將日志打到指定的日志文件或者udp服務(wù)器(daemonize uWSGI)。實(shí)際上最常
   >  用的,還是把運(yùn)行記錄輸出到一個(gè)本地文件上。
   >- daemonize : 使進(jìn)程在后臺(tái)運(yùn)行,并將日志打到指定的日志文件或者udp服務(wù)器(daemonize uWSGI)。實(shí)際上最常
   >  用的,還是把運(yùn)行記錄輸出到一個(gè)本地文件上。
   >- vacuum : 當(dāng)服務(wù)器退出的時(shí)候自動(dòng)清理環(huán)境,刪除unix socket文件和pid文件(try to remove all of the generated file/sockets)

?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/40089.html

相關(guān)文章

  • 在阿里云上Ubuntu環(huán)境通過nginx+uwsgi部署Django項(xiàng)目

    年前阿里云打折,1核1G的云服務(wù)器一年只要300多塊,果斷就租了1年的。既然服務(wù)器已經(jīng)到手,怎么能不把自己寫的項(xiàng)目部署上去呢,其實(shí)網(wǎng)上關(guān)于nginx+uwsgi部署Django項(xiàng)目的文章有很多,但是這些文章要不就是很久之前的,要不就是互相抄襲,一路過來都是坑,這里重點(diǎn)吧在部署時(shí)候遇到的坑著重介紹一下: 1.首先部署django項(xiàng)目 首先是django項(xiàng)目,由于我是使用Anaconda來進(jìn)行版本控制...

    asce1885 評(píng)論0 收藏0
  • 親身驗(yàn)證切實(shí)可行的python項(xiàng)目部署方案

    摘要:目標(biāo)在瀏覽器輸入回車進(jìn)入到項(xiàng)目主頁概念項(xiàng)目應(yīng)用該文章中的項(xiàng)目為服務(wù)高并發(fā)處理的好穩(wěn)定是服務(wù)器與框架之間一種簡(jiǎn)單而通用的接口項(xiàng)目部署部署環(huán)境準(zhǔn)備確保項(xiàng)目能夠運(yùn)行安裝服務(wù)用去安裝安裝啟動(dòng)驗(yàn)證打開瀏覽器輸入安裝務(wù)必用去安裝安裝驗(yàn)證 目標(biāo) : 在瀏覽器輸入 www.python1.com 回車 進(jìn)入到Django項(xiàng)目主頁 概念 Django項(xiàng)目(Web應(yīng)用)該文章中的django項(xiàng)...

    siberiawolf 評(píng)論0 收藏0
  • 親身驗(yàn)證切實(shí)可行的python項(xiàng)目部署方案

    摘要:目標(biāo)在瀏覽器輸入回車進(jìn)入到項(xiàng)目主頁概念項(xiàng)目應(yīng)用該文章中的項(xiàng)目為服務(wù)高并發(fā)處理的好穩(wěn)定是服務(wù)器與框架之間一種簡(jiǎn)單而通用的接口項(xiàng)目部署部署環(huán)境準(zhǔn)備確保項(xiàng)目能夠運(yùn)行安裝服務(wù)用去安裝安裝啟動(dòng)驗(yàn)證打開瀏覽器輸入安裝務(wù)必用去安裝安裝驗(yàn)證 目標(biāo) : 在瀏覽器輸入 www.python1.com 回車 進(jìn)入到Django項(xiàng)目主頁 概念 Django項(xiàng)目(Web應(yīng)用)該文章中的django項(xiàng)...

    dackel 評(píng)論0 收藏0
  • django+uwsgi+nginx部署web項(xiàng)目

    摘要:腳本啟動(dòng)服務(wù)器方便起見,我們可以設(shè)置腳本啟動(dòng)重啟服務(wù)器,在目錄下新建腳本,命名為,內(nèi)容如下修改文件權(quán)限腳本啟動(dòng)配置完成,如果發(fā)布新版本之后記得執(zhí)行該腳本才能生效。 系統(tǒng)需求 centos7 minimal python2.7 部署前的準(zhǔn)備工作 centos7 minimal是精簡(jiǎn)版本,需要手動(dòng)去配置一些設(shè)置。 1. 配置網(wǎng)絡(luò),設(shè)置固定ip ip可以自動(dòng)獲取,我這...

    Ali_ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<