摘要:服務器上部署項目說白了就是讓你的項目在這臺服務器上運行并且做到可以在公網上訪問你的項目。可以解決項目與項目之間對同一個包的不同版本的依賴問題。有可能會報的錯是項目相關模塊的引入路徑不對,修改一下便可。
前一陣自己用flask框架寫了一個博客程序,寫完之后想部署到服務器上,因為是小白,所以自己google了好些資料,講的零零碎碎而且有些地方只是告訴你怎么配置,但具體為什么這樣配卻沒有說明,所以自己總結了一篇從頭到尾的過程。
服務器上部署項目說白了就是讓你的項目在這臺服務器上運行并且做到可以在公網上訪問你的項目。
那么如果要做到這兩點,需要做的工作有如下幾個方面:
服務器的環境搭建,讓服務器具有運行項目的必要環境
上傳你的項目代碼到服務器
配置服務器代理,處理來自Internet上的請求。
1. 服務器的環境搭建首先說一下系統的選擇問題,先排除掉Windows系統,在Linux系統下,Ubuntu,Debian,CentOS都很不錯。
Ubuntu有強大的軟件源支持,但它更適合于桌面操作系統。Debian穩定,占硬盤空間小,占內存小,但發展過快,其安全性和穩定性都沒有CentOS好。所以我選擇了CentOS。對于三者的比較可以看 http://waynerqiu.com/7/156.html。
買來的服務器需要用遠程連接來操作,這里推薦使用putty。我使用的是CentOS 6.3 x86_64,不同的版本可能在安裝軟件的地址可能會有些不同。
Linux系統下自帶了低版本的python,可以通過python -V查看。自帶的python版本會和系統的一些功能有關聯,比如yum。
flask項目需要python2.7以上的版本,所以我們需要在系統中安裝python2.7或python3.5。
下載并安裝 Python 2.7.5:
#wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
如果此時沒有wget,可以通過yum install wget來安裝
#tar jxvf Python-2.7.5.tar.bz2 #cd Python-2.7.5 #./configure --prefix=/usr/local #make && make install
這時的python2.7.5還不是我們系統將會使用的python(現在鍵入python -V后,顯示的還會是低版本的python)。所以需要建立軟連接,使系統默認的python指向python2.7.5。
#mv /usr/bin/python /usr/bin/python2.4.3 //你的python版本可能不同 #ln -s /usr/local/bin/python27 /usr/bin/python
使用了新版本的python會導致yum安裝軟件報錯,因為yum沒有兼容python2.7,所以我們要指定yum使用的python版本。
#vi /usr/bin/yum
進入編輯模式,將#!/usr/bin/python改成#!/usr/bin/python2.7.5
安裝相關的開發工具盒和一些包
#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協議的,故需要在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
在最后一步可能會報錯"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
這一步也有可能報錯"zlib not available",可以使用#rpm -qa | grep zlib 查看可用的安裝包,將沒有安裝的安裝上(上面我們已經安裝了zlib和zlib-devel)
再次運行sh setuptools-0.6c11-py2.7.egg,發現還是報錯?同樣的錯誤?
那么這應該不是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應該可以用了,回到setuptools的安裝,再回到pip的安裝,這回總算把pip安裝上了。你可以在全局環境下安裝flask相關的包(如果你的服務器中包括將來只想運行一個項目的話),也可以將包安裝在虛擬環境中。先別急,把項目代碼上傳了再說。
2. 上傳你的項目代碼到服務器接下來可以上傳你的flask項目代碼到服務器上,可以使用flashFXP或者FileZilla來上傳。
這里按照我的上傳目錄來介紹接下來的步驟,我的flask項目代碼放在了 /home/www/WebBlogold(WebBlogold就是我的項目文件夾)。不明白Linux目錄結構?可以google一下,這里推薦一篇 http://yangrong.blog.51cto.com/6945369/1288072。
如果你的服務器上有多個項目,那么建議你安裝virtualenv虛擬環境。virtualenv可以解決項目與項目之間對同一個包的不同版本的依賴問題。
使用pip安裝virtualenv虛擬環境
pip install virtualenv
進入項目目錄,在目錄下鍵入 virtualenv venv,其中venv是你要建的虛擬環境文件夾的名字,結果會出現下面兩行
New python executable in venv/bin/python Installing setuptools, pip...done.
說明文件夾已經建好,使用 source venv/bin/activate 命令來啟用虛擬環境,啟用后你當前的路徑名的前面會有一個(venv)。
在虛擬環境下安裝flask相關包,你可以一個一個安裝,也可以將所有的包寫在一個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 等等
保存在你的項目文件夾下,在虛擬環境中鍵入 pip install -r flaskrelated.txt 來安裝他們。
3. 配置服務器代理我的服務器代理是安裝在全局中的,當然你也可以在虛擬環境里安裝。
使用的代理一共有兩個,nginx和uwsgi,先說明一下,如果不用nginx一樣可以訪問你的項目,使用nginx的目的是為了安全和負載均衡。配置了nginx做前端代理,uwsgi作后端代理的服務器(這里所說的前后端都是相對的位置,并無實際含義),在處理來自Internet的請求時,要先經過nginx的處理,nginx把請求再交給uwsgi,經過uwsgi才能訪問到項目本身。
沒有nginx而只有uwsgi的服務器,則是Internet請求直接由uwsgi處理,并反饋到我們的項目中。
nginx可以實現安全過濾,防DDOS等保護安全的操作,并且如果配置了多臺服務器,nginx可以保證服務器的負載相對均衡。
而uwsgi則是一個web服務器,實現了WSGI協議(Web Server Gateway Interface),http協議等,它可以接收和處理請求,發出響應等。所以只用uwsgi也是可以的。
先安裝uwsgi
pip install uwsgi
在你的項目根目錄下創建一個配置文件uwsgiconfig.ini(uwsgi支持多種配置文件格式,xml,ini,json等)
[uwsgi] socket = 127.0.0.1:8001 //啟動程序時所使用的地址和端口,通常在本地運行flask項目, //地址和端口是127.0.0.1:5000, //不過在服務器上是通過uwsgi設置端口,通過uwsgi來啟動項目, //也就是說啟動了uwsgi,也就啟動了項目。 chdir = /home/www/ //項目目錄 wsgi-file = manage.py //flask程序的啟動文件,通常在本地是通過運行 // python manage.py runserver 來啟動項目的 callable = app //程序內啟用的application變量名 processes = 4 //處理器個數 threads = 2 //線程個數 stats = 127.0.0.1:9191 //獲取uwsgi統計信息的服務地址
保存配置文件,我們可以通過鍵入 uwsgi uwsgiconfig.ini 來啟動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的一些命令
啟動: nginx
停止: nginx -s -stop
強制停止: pkill -9 nginx
查看nginx是否應用配置文件: nginx -t
查看版本: nginx -v
先別急著啟動我們的nginx代理服務器,先來寫一下nginx的配置文件。
nginx的配置文件在/etc/nginx/conf.d/文件夾下,也有可能在/etc/nginx/sites-enabled/default。我們打開默認的配置文件,大部分內容都是加注釋的,需要我們修改。
events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; //默認的web訪問端口 server_name xxx.xxx.xxx.xxx; //你的公網ip #charset koi8-r; access_log /home/www/WebBlogold/logs/access.log; //服務器接收的請求日志, //需要在項目文件夾下創建 //logs文件夾,下同。 error_log /home/www/WebBlogold/logs/error.log; //錯誤日志 location / { include uwsgi_params; //這里是導入的uwsgi配置 uwsgi_pass 127.0.0.1:8001; //需要和uwsgi的配置文件里socket項的地址 //相同,否則無法讓uwsgi接收到請求。 uwsgi_param UWSGI_PYHOME /home/www/WebBlogold/venv; //python的位置(虛擬環境下) uwsgi_param UWSGI_CHDIR /home/www/WebBlogold; //項目根目錄 uwsgi_param UWSGI_SCRIPT manage:app; //啟動項目的主程序(在本地上運行 //這個主程序可以在flask內置的 //服務器上訪問你的項目) } } } 下面是一堆#,全都是注釋,不用管它。
在啟動nginx時,如果發現報錯"98:Address already in use",不要著急,很有可能是因為你的nginx已經啟動了。
通過 netstat -ntlp 查看端口占用情況,看看是不是你的nginx占用的80端口。如果發現有其他程序占用了nginx的默認的80端口,可以殺掉這些進程,再啟動nginx。
到此,我們終于完成了所有的工作,馬上就可以訪問自己的項目了。
現在,檢查一下nginx的配置文件是否應用 nginx -t 沒有成功應用的話,檢查一下配置文件。
鍵入 nginx 來啟動nginx
鍵入uwsgi uwsgiconfig.ini 啟動uwsgi
這時uwsgi會告訴你你的項目是否有錯誤,如果本地運行良好,一般是沒有錯誤的。
有可能會報的錯是項目相關模塊的引入路徑不對,修改一下便可。沒有報錯的話,打開瀏覽器,輸入你的服務器IP地址,或者如果你有相應的域名,并解析到了你的IP,輸入域名也可以。
如果一切順利的話,顯示的就是你想要的頁面了,如果不是,首先查看一下日志文件,他們在你的項目根目錄下logs文件夾里。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39232.html
摘要:服務器上部署項目說白了就是讓你的項目在這臺服務器上運行并且做到可以在公網上訪問你的項目。可以解決項目與項目之間對同一個包的不同版本的依賴問題。有可能會報的錯是項目相關模塊的引入路徑不對,修改一下便可。 前一陣自己用flask框架寫了一個博客程序,寫完之后想部署到服務器上,因為是小白,所以自己google了好些資料,講的零零碎碎而且有些地方只是告訴你怎么配置,但具體為什么這樣配卻沒有說明...
摘要:服務器上部署項目說白了就是讓你的項目在這臺服務器上運行并且做到可以在公網上訪問你的項目。可以解決項目與項目之間對同一個包的不同版本的依賴問題。有可能會報的錯是項目相關模塊的引入路徑不對,修改一下便可。 前一陣自己用flask框架寫了一個博客程序,寫完之后想部署到服務器上,因為是小白,所以自己google了好些資料,講的零零碎碎而且有些地方只是告訴你怎么配置,但具體為什么這樣配卻沒有說明...
摘要:最近打算使用搭建一個簡單的個人網站,使用部署,在此記錄下部署過程。使用啟動應用,執行后沒有報任何異常即可。或者,在運行之前先將當前虛擬環境加入到中,參考資料快速上手使用啟動應用以及配置 最近打算使用python+flask搭建一個簡單的個人網站,使用nginx+uwsgi部署,在此記錄下部署過程。 環境ubuntu12.04, python2.7.3, virtualenv1....
摘要:架構識圖吟詩架構由以下層和關聯實現視圖一個響應相對靈敏但不夠美觀的前端用戶界面,只使用了原生。平臺本版本部署在阿里云上,采用的流行框架。 寫在前面 關于這個作品的設計理念和情懷,請看這里 初衷 隨著作品的不斷迭代和改進,我已經漸漸忘記初衷是什么了。是為了討某人歡心做的小demo或是為了熟悉使用watson的練手作品,都已不大記得。然而現在,是想利用零碎的時間,做一個完整的項目。來探究A...
閱讀 3557·2021-08-02 13:41
閱讀 2390·2019-08-30 15:56
閱讀 1520·2019-08-30 11:17
閱讀 1174·2019-08-29 15:18
閱讀 580·2019-08-29 11:10
閱讀 2671·2019-08-26 13:52
閱讀 508·2019-08-26 13:22
閱讀 2949·2019-08-23 15:41