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

資訊專欄INFORMATION COLUMN

CentOS 下用 Nginx 和 uwsgi 部署 flask 項(xiàng)目

shuibo / 1959人閱讀

摘要:服務(wù)器上部署項(xiàng)目說白了就是讓你的項(xiàng)目在這臺(tái)服務(wù)器上運(yùn)行并且做到可以在公網(wǎng)上訪問你的項(xiàng)目。可以解決項(xiàng)目與項(xiàng)目之間對(duì)同一個(gè)包的不同版本的依賴問題。有可能會(huì)報(bào)的錯(cuò)是項(xiàng)目相關(guān)模塊的引入路徑不對(duì),修改一下便可。

前一陣自己用flask框架寫了一個(gè)博客程序,寫完之后想部署到服務(wù)器上,因?yàn)槭切“祝宰约篻oogle了好些資料,講的零零碎碎而且有些地方只是告訴你怎么配置,但具體為什么這樣配卻沒有說明,所以自己總結(jié)了一篇從頭到尾的過程。

服務(wù)器上部署項(xiàng)目說白了就是讓你的項(xiàng)目在這臺(tái)服務(wù)器上運(yùn)行并且做到可以在公網(wǎng)上訪問你的項(xiàng)目。
那么如果要做到這兩點(diǎn),需要做的工作有如下幾個(gè)方面:

服務(wù)器的環(huán)境搭建,讓服務(wù)器具有運(yùn)行項(xiàng)目的必要環(huán)境

上傳你的項(xiàng)目代碼到服務(wù)器

配置服務(wù)器代理,處理來自Internet上的請(qǐng)求。

1. 服務(wù)器的環(huán)境搭建

首先說一下系統(tǒng)的選擇問題,先排除掉Windows系統(tǒng),在Linux系統(tǒng)下,Ubuntu,Debian,CentOS都很不錯(cuò)。

Ubuntu有強(qiáng)大的軟件源支持,但它更適合于桌面操作系統(tǒng)。Debian穩(wěn)定,占硬盤空間小,占內(nèi)存小,但發(fā)展過快,其安全性和穩(wěn)定性都沒有CentOS好。所以我選擇了CentOS。對(duì)于三者的比較可以看 http://waynerqiu.com/7/156.html。

買來的服務(wù)器需要用遠(yuǎn)程連接來操作,這里推薦使用putty。我使用的是CentOS 6.3 x86_64,不同的版本可能在安裝軟件的地址可能會(huì)有些不同。

Linux系統(tǒng)下自帶了低版本的python,可以通過python -V查看。自帶的python版本會(huì)和系統(tǒng)的一些功能有關(guān)聯(lián),比如yum。

flask項(xiàng)目需要python2.7以上的版本,所以我們需要在系統(tǒng)中安裝python2.7或python3.5。

下載并安裝 Python 2.7.5:

#wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2 

如果此時(shí)沒有wget,可以通過yum install wget來安裝

#tar jxvf Python-2.7.5.tar.bz2
#cd Python-2.7.5
#./configure --prefix=/usr/local
#make && make install

這時(shí)的python2.7.5還不是我們系統(tǒng)將會(huì)使用的python(現(xiàn)在鍵入python -V后,顯示的還會(huì)是低版本的python)。所以需要建立軟連接,使系統(tǒng)默認(rèn)的python指向python2.7.5。

#mv /usr/bin/python /usr/bin/python2.4.3   //你的python版本可能不同
#ln -s /usr/local/bin/python27 /usr/bin/python

使用了新版本的python會(huì)導(dǎo)致yum安裝軟件報(bào)錯(cuò),因?yàn)閥um沒有兼容python2.7,所以我們要指定yum使用的python版本。

#vi /usr/bin/yum

進(jìn)入編輯模式,將#!/usr/bin/python改成#!/usr/bin/python2.7.5

安裝相關(guān)的開發(fā)工具盒和一些包

#yum groupinstall "Development tools"
#yum install zlib zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

安裝pip

# wget https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz --no-check-certificate

由于下載pip是基于https協(xié)議的,故需要在wget url后面加上--no-check-certificate,否則不能下載。

解壓和安裝pip

#chmod +x pip-1.3.1.tar.gz 
#tar xzvf pip-1.3.1.tar.gz 
#cd pip-1.3.1 
#python setup.py install 

在最后一步可能會(huì)報(bào)錯(cuò)"ImportError: No module named setuptools",原因是沒有安裝setuptools

安裝setuptools

#wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg  --no-check-certificate 
#chmod +x setuptools-0.6c11-py2.7.egg 
#sh setuptools-0.6c11-py2.7.egg 

這一步也有可能報(bào)錯(cuò)"zlib not available",可以使用#rpm -qa | grep zlib 查看可用的安裝包,將沒有安裝的安裝上(上面我們已經(jīng)安裝了zlib和zlib-devel)

再次運(yùn)行sh setuptools-0.6c11-py2.7.egg,發(fā)現(xiàn)還是報(bào)錯(cuò)?同樣的錯(cuò)誤?

那么這應(yīng)該不是zlib的問題,而是python的問題,我們需要重新編譯python2.7.5,在編譯之前需要修改一下Modules/Setup.dist文件。找到

#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz

將注釋去掉,重新編譯python2.7.5

#cd Python-2.7.5
#./configure --prefix=/usr/local
#make && make install

這樣zlib應(yīng)該可以用了,回到setuptools的安裝,再回到pip的安裝,這回總算把pip安裝上了。你可以在全局環(huán)境下安裝flask相關(guān)的包(如果你的服務(wù)器中包括將來只想運(yùn)行一個(gè)項(xiàng)目的話),也可以將包安裝在虛擬環(huán)境中。先別急,把項(xiàng)目代碼上傳了再說。

2. 上傳你的項(xiàng)目代碼到服務(wù)器

接下來可以上傳你的flask項(xiàng)目代碼到服務(wù)器上,可以使用flashFXP或者FileZilla來上傳。

這里按照我的上傳目錄來介紹接下來的步驟,我的flask項(xiàng)目代碼放在了 /home/www/WebBlogold(WebBlogold就是我的項(xiàng)目文件夾)。不明白Linux目錄結(jié)構(gòu)?可以google一下,這里推薦一篇 http://yangrong.blog.51cto.com/6945369/1288072。

如果你的服務(wù)器上有多個(gè)項(xiàng)目,那么建議你安裝virtualenv虛擬環(huán)境。virtualenv可以解決項(xiàng)目與項(xiàng)目之間對(duì)同一個(gè)包的不同版本的依賴問題。

使用pip安裝virtualenv虛擬環(huán)境

pip install virtualenv 

進(jìn)入項(xiàng)目目錄,在目錄下鍵入 virtualenv venv,其中venv是你要建的虛擬環(huán)境文件夾的名字,結(jié)果會(huì)出現(xiàn)下面兩行

New python executable in venv/bin/python
Installing setuptools, pip...done.

說明文件夾已經(jīng)建好,使用 source venv/bin/activate 命令來啟用虛擬環(huán)境,啟用后你當(dāng)前的路徑名的前面會(huì)有一個(gè)(venv)。

在虛擬環(huán)境下安裝flask相關(guān)包,你可以一個(gè)一個(gè)安裝,也可以將所有的包寫在一個(gè)txt文件里,一次性安裝。

flaskrelated.txt文件:

Flask==0.10.1
Flask-Login==0.2.11
Flask-Mail==0.9.1
Flask-Moment==0.4.0
Flask-PageDown==0.1.5
Flask-SQLAlchemy==2.0
等等

保存在你的項(xiàng)目文件夾下,在虛擬環(huán)境中鍵入 pip install -r flaskrelated.txt 來安裝他們。

3. 配置服務(wù)器代理

我的服務(wù)器代理是安裝在全局中的,當(dāng)然你也可以在虛擬環(huán)境里安裝。

使用的代理一共有兩個(gè),nginx和uwsgi,先說明一下,如果不用nginx一樣可以訪問你的項(xiàng)目,使用nginx的目的是為了安全和負(fù)載均衡。配置了nginx做前端代理,uwsgi作后端代理的服務(wù)器(這里所說的前后端都是相對(duì)的位置,并無實(shí)際含義),在處理來自Internet的請(qǐng)求時(shí),要先經(jīng)過nginx的處理,nginx把請(qǐng)求再交給uwsgi,經(jīng)過uwsgi才能訪問到項(xiàng)目本身。

沒有nginx而只有uwsgi的服務(wù)器,則是Internet請(qǐng)求直接由uwsgi處理,并反饋到我們的項(xiàng)目中。
nginx可以實(shí)現(xiàn)安全過濾,防DDOS等保護(hù)安全的操作,并且如果配置了多臺(tái)服務(wù)器,nginx可以保證服務(wù)器的負(fù)載相對(duì)均衡。

而uwsgi則是一個(gè)web服務(wù)器,實(shí)現(xiàn)了WSGI協(xié)議(Web Server Gateway Interface),http協(xié)議等,它可以接收和處理請(qǐng)求,發(fā)出響應(yīng)等。所以只用uwsgi也是可以的。

先安裝uwsgi

pip install uwsgi

在你的項(xiàng)目根目錄下創(chuàng)建一個(gè)配置文件uwsgiconfig.ini(uwsgi支持多種配置文件格式,xml,ini,json等)

[uwsgi]

socket = 127.0.0.1:8001     //啟動(dòng)程序時(shí)所使用的地址和端口,通常在本地運(yùn)行flask項(xiàng)目,
                            //地址和端口是127.0.0.1:5000,
                            //不過在服務(wù)器上是通過uwsgi設(shè)置端口,通過uwsgi來啟動(dòng)項(xiàng)目,
                            //也就是說啟動(dòng)了uwsgi,也就啟動(dòng)了項(xiàng)目。
chdir = /home/www/     //項(xiàng)目目錄

wsgi-file = manage.py      //flask程序的啟動(dòng)文件,通常在本地是通過運(yùn)行  
                           //      python manage.py runserver 來啟動(dòng)項(xiàng)目的

callable = app      //程序內(nèi)啟用的application變量名

processes = 4     //處理器個(gè)數(shù)

threads = 2     //線程個(gè)數(shù)

stats = 127.0.0.1:9191      //獲取uwsgi統(tǒng)計(jì)信息的服務(wù)地址

保存配置文件,我們可以通過鍵入 uwsgi uwsgiconfig.ini 來啟動(dòng)uwsgi。

安裝nginx:由于nginx不在yum安裝軟件源里,所以添加上

#rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
#yum install nginx

nginx的一些命令

啟動(dòng): nginx

停止: nginx -s -stop

強(qiáng)制停止: pkill -9 nginx

查看nginx是否應(yīng)用配置文件: nginx -t

查看版本: nginx -v

先別急著啟動(dòng)我們的nginx代理服務(wù)器,先來寫一下nginx的配置文件。

nginx的配置文件在/etc/nginx/conf.d/文件夾下,也有可能在/etc/nginx/sites-enabled/default。我們打開默認(rèn)的配置文件,大部分內(nèi)容都是加注釋的,需要我們修改。

events {
    worker_connections  1024;
}
http {
    include       mime.types;    
    default_type  application/octet-stream;    
    sendfile        on;    
    keepalive_timeout  65;

    server {
        listen       80;         //默認(rèn)的web訪問端口
        server_name  xxx.xxx.xxx.xxx;     //你的公網(wǎng)ip
        #charset koi8-r;
        access_log  /home/www/WebBlogold/logs/access.log;    //服務(wù)器接收的請(qǐng)求日志,
                                                             //需要在項(xiàng)目文件夾下創(chuàng)建
                                                             //logs文件夾,下同。
        error_log  /home/www/WebBlogold/logs/error.log;         //錯(cuò)誤日志

        location / {

            include        uwsgi_params;     //這里是導(dǎo)入的uwsgi配置

            uwsgi_pass     127.0.0.1:8001;   //需要和uwsgi的配置文件里socket項(xiàng)的地址
                                             //相同,否則無法讓uwsgi接收到請(qǐng)求。

            uwsgi_param UWSGI_PYHOME /home/www/WebBlogold/venv;   //python的位置(虛擬環(huán)境下)

            uwsgi_param UWSGI_CHDIR  /home/www/WebBlogold;     //項(xiàng)目根目錄

            uwsgi_param UWSGI_SCRIPT manage:app;     //啟動(dòng)項(xiàng)目的主程序(在本地上運(yùn)行
                                                     //這個(gè)主程序可以在flask內(nèi)置的
                                                     //服務(wù)器上訪問你的項(xiàng)目)

        }
    }
}
下面是一堆#,全都是注釋,不用管它。

在啟動(dòng)nginx時(shí),如果發(fā)現(xiàn)報(bào)錯(cuò)"98:Address already in use",不要著急,很有可能是因?yàn)槟愕膎ginx已經(jīng)啟動(dòng)了。

通過 netstat -ntlp 查看端口占用情況,看看是不是你的nginx占用的80端口。如果發(fā)現(xiàn)有其他程序占用了nginx的默認(rèn)的80端口,可以殺掉這些進(jìn)程,再啟動(dòng)nginx。

到此,我們終于完成了所有的工作,馬上就可以訪問自己的項(xiàng)目了。

現(xiàn)在,檢查一下nginx的配置文件是否應(yīng)用 nginx -t 沒有成功應(yīng)用的話,檢查一下配置文件。

鍵入 nginx 來啟動(dòng)nginx

鍵入uwsgi uwsgiconfig.ini 啟動(dòng)uwsgi

這時(shí)uwsgi會(huì)告訴你你的項(xiàng)目是否有錯(cuò)誤,如果本地運(yùn)行良好,一般是沒有錯(cuò)誤的。

有可能會(huì)報(bào)的錯(cuò)是項(xiàng)目相關(guān)模塊的引入路徑不對(duì),修改一下便可。沒有報(bào)錯(cuò)的話,打開瀏覽器,輸入你的服務(wù)器IP地址,或者如果你有相應(yīng)的域名,并解析到了你的IP,輸入域名也可以。

如果一切順利的話,顯示的就是你想要的頁面了,如果不是,首先查看一下日志文件,他們?cè)谀愕捻?xiàng)目根目錄下logs文件夾里。

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

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

相關(guān)文章

  • CentOS 下用 Nginx uwsgi 部署 flask 項(xiàng)目

    摘要:服務(wù)器上部署項(xiàng)目說白了就是讓你的項(xiàng)目在這臺(tái)服務(wù)器上運(yùn)行并且做到可以在公網(wǎng)上訪問你的項(xiàng)目。可以解決項(xiàng)目與項(xiàng)目之間對(duì)同一個(gè)包的不同版本的依賴問題。有可能會(huì)報(bào)的錯(cuò)是項(xiàng)目相關(guān)模塊的引入路徑不對(duì),修改一下便可。 前一陣自己用flask框架寫了一個(gè)博客程序,寫完之后想部署到服務(wù)器上,因?yàn)槭切“祝宰约篻oogle了好些資料,講的零零碎碎而且有些地方只是告訴你怎么配置,但具體為什么這樣配卻沒有說明...

    wanghui 評(píng)論0 收藏0
  • CentOS 下用 Nginx uwsgi 部署 flask 項(xiàng)目

    摘要:服務(wù)器上部署項(xiàng)目說白了就是讓你的項(xiàng)目在這臺(tái)服務(wù)器上運(yùn)行并且做到可以在公網(wǎng)上訪問你的項(xiàng)目。可以解決項(xiàng)目與項(xiàng)目之間對(duì)同一個(gè)包的不同版本的依賴問題。有可能會(huì)報(bào)的錯(cuò)是項(xiàng)目相關(guān)模塊的引入路徑不對(duì),修改一下便可。 前一陣自己用flask框架寫了一個(gè)博客程序,寫完之后想部署到服務(wù)器上,因?yàn)槭切“祝宰约篻oogle了好些資料,講的零零碎碎而且有些地方只是告訴你怎么配置,但具體為什么這樣配卻沒有說明...

    tuantuan 評(píng)論0 收藏0
  • 使用uwsgiNginx部署flask應(yīng)用

    摘要:最近打算使用搭建一個(gè)簡單的個(gè)人網(wǎng)站,使用部署,在此記錄下部署過程。使用啟動(dòng)應(yīng)用,執(zhí)行后沒有報(bào)任何異常即可。或者,在運(yùn)行之前先將當(dāng)前虛擬環(huán)境加入到中,參考資料快速上手使用啟動(dòng)應(yīng)用以及配置 最近打算使用python+flask搭建一個(gè)簡單的個(gè)人網(wǎng)站,使用nginx+uwsgi部署,在此記錄下部署過程。 環(huán)境ubuntu12.04, python2.7.3, virtualenv1....

    newtrek 評(píng)論0 收藏0
  • 識(shí)圖吟詩

    摘要:架構(gòu)識(shí)圖吟詩架構(gòu)由以下層和關(guān)聯(lián)實(shí)現(xiàn)視圖一個(gè)響應(yīng)相對(duì)靈敏但不夠美觀的前端用戶界面,只使用了原生。平臺(tái)本版本部署在阿里云上,采用的流行框架。 寫在前面 關(guān)于這個(gè)作品的設(shè)計(jì)理念和情懷,請(qǐng)看這里 初衷 隨著作品的不斷迭代和改進(jìn),我已經(jīng)漸漸忘記初衷是什么了。是為了討某人歡心做的小demo或是為了熟悉使用watson的練手作品,都已不大記得。然而現(xiàn)在,是想利用零碎的時(shí)間,做一個(gè)完整的項(xiàng)目。來探究A...

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

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

0條評(píng)論

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