1. 程式人生 > >flask部署到阿里雲伺服器centos+python3+gunicorn+nginx詳細教程(從本地windows可執行部署伺服器環境上可執行)

flask部署到阿里雲伺服器centos+python3+gunicorn+nginx詳細教程(從本地windows可執行部署伺服器環境上可執行)

前言:

做了flask網站,是因為軟體工程課程的任務,每個小組期末需要交一份的可執行的專案,我們小組做的是flask留言牆,用的flask做後臺邏輯功能,前端h5,javascript,jquery,實現網頁佈局,樣式,前端驗證...做完,想把這個網站掛到外網上,就需要伺服器...這裡用了阿里學生雲伺服器,9.5一個月,很便宜的。經過幾番折騰,終於能夠外網訪問,能夠訪問,註冊,登入,視訊等待

伺服器上部署環境對新手來說還真不友好,佈置的稀裡糊塗的,網上教程一大堆,但是轉載一大堆,很多時候發現看的就是那麼幾個,還不是真正部署完整的專案,伺服器環境部署也有很多坑,博主都還有幾個沒解決掉,就放棄了,反正網站也算成功了,像本地一樣。這裡推薦阿里雲伺服器上的寶塔應用映象,可以預安裝好多程式,mysql,nginx,可以直接在上面給配置,就不需要在系統裡面用命令改了,很不方便,尤其對那些沒學linux的人,真的很難受,幸好博主這學期有兩門linux課程,基礎和一般都會的,也能理解。

老規矩,還是放下效果圖,鎮樓,這裡是網站執行的效果:

一:

首先,你得去阿里雲購買一臺伺服器,要是學生的話,就很便宜,用支付寶登入後,自動認證學生,就能低價購買伺服器。

博主用的是輕量級應用服務:https://www.aliyun.com/ss/?k=學生伺服器

還有一種就是ECS伺服器,可以看到上圖對比,其實沒什麼多大差別,我網上查了資料,網友說,ECS可能更好一點,但是針對個人學習測試來說並沒有什麼影響。我用的是輕量級應用寶塔映象,對新人來說相對友好的,可以預裝很多程式,還有很多方便管理的自選安裝程式。

購買後:點選下面的伺服器

會出現你的伺服器的基本資訊:當然你可以剛開始隨便玩其他的系統或者應用映象,反正我是玩了,好久,重置系統了好多次,因為去對比,看其他系統,windows是圖形介面系統的,我剛開始也想用圖形介面的,但是發現教程全是linux的,而且網友都說不論怎麼樣,都會走向linux伺服器,畢竟linux系統穩定可靠,效能強大。

進入應用詳情裡面:

按照上面的步驟按照把寶塔介面開啟(開啟寶塔面板那個地址,會有一個寶塔登入頁面,密碼是上面點選複製後,遠端連線把複製的輸入進去,enter後,會彈出寶塔密碼,用admin登入後,可以寶塔修改登入名和密碼),直接點選安裝一些你的網站需要用到的程式,比如我用到了nginx,mysql。還有很多其他功能,自己就慢慢摸索吧。

它會自己安裝,我們就去系統映象配置環境。

二:centos flask系統環境配置

你可以直接點選你的阿里雲管理和控制檯裡面的遠端連線,連線上centos伺服器進行配置,當然以後每次登入都要登入阿里雲有點麻煩,可以把遠端連線開啟,,按照上面的配置教程,就能用軟體就行訪問,我就用了寶塔助手按照配置

就能直接連線遠端伺服器,當然window伺服器也可以連線,如果用的伺服器系統是Windows的,可以直接win+r 輸入mstsc遠端連線。

接下進入centos環境配置:

因為我在本地,用的是python3.6.5所以伺服器最好一樣。

2.1 安裝python3.6.5

centos執行命令:  因為全是linux操作命令,需要明白這些命令是幹嘛的,不知道的話,可以自己查linux常用命令,也可以直接複製貼上執行(畢竟我們是要結果,能夠有執行環境的)

 wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

2.2 安裝zlib-devel包(後面安裝pip需要用到,這裡先下載,後面就不用重複編譯)

 yum install zlib-devel

2.3解壓:

  tar -xvf Python-3.6.5.tgz 

2.4:建立python3 目錄

mkdir -p  /usr/local/python3

2.5  將解壓檔案移動到 usr/local目錄下

    mv    Python-3.6.5     /usr/local

2.6 轉到解壓資料夾下

 cd /usr/local/Python-3.6.5

2.7  配置安裝目錄

  ./configure   --prefix=/usr/local/python3

2.8 編譯原始碼及安裝

make  &&  make install

2.9 配置軟連線

 ln  -s  /usr/local/python3/bin/python3    /usr/bin/python3

2.10轉到根目錄

cd /

輸入python3,看是否提示如下資訊顯示python3.6.5,表示安裝成功(因為linux系統預設自帶python2,輸入python的話,會進入python2,後面安裝都pip都要指定pip3 安裝,或者在虛擬環境中用pip)

安裝pip

    yum  -y  install  zlib-devel  bzip2-devel  openssl-devel  ncurses-devel  sqlite-devel  readline-devel  tk-devel  gdbm-devel db4-devel   libpcap-devel xz-devel

安裝setuptools

  wget  --no-check-certificate  https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz

# 解壓       

 tar -zxvf setuptools-19.6.tar.gz

   cd setuptools-19.6

 安裝(分四步執行哦)

 python3 setup.py build
   python3 setup.py install
 yum install python36-setuptools

    easy_install-3.6 pip

三虛擬環境的安裝配置:

3.1 安裝虛擬環境第三方庫

pip3 install virtualenv

3.2建立虛擬環境

安裝後,建立一個虛擬環境: virtualenv +目錄名

我這裡建立到www下面的:建立了一個名叫flaskenv的虛擬環境,分兩步執行,centos就自帶www目錄,就不需要建立了

cd /www

virtualenv flaskenv

我在演示一下,因為我的flaskenv已經有了,因為網站搭建好了,可執行的,所以創一個名叫env的虛擬環境如下:

3.3進入虛擬環境:.是當前目錄 env是建立的虛擬環境目錄,下面是有bin目錄,執行activate,進入虛擬環境

 . env/bin/activate

進入後會發現,前面有建立的虛擬環境名字,以後只要進入虛擬環境操作,就只會在當前環境中有效,換句話就是與其他環境隔離開來,比如不同版本之間的程式就不會互相影響。

接下來測試當前虛擬環境版本:或者執行python

 python -V

只要你虛擬環境是python3.6就是配置成功了。‘
3.4 安裝gunicorn(獨角獸)因為待會你要用這個程式執行flask程式,讓網站執行起來,必須裝,或者用uwsgi

pip insnstall gunicorn

3.5:虛擬環境的退出

deactivate

總的來說第三大步解決了,就完成了一大半了,安裝過程可能會出現其他莫名其妙的問題,大多數把錯誤原因拿去搜索,都能解決。

四:本地專案的部署(上傳)到伺服器

4.1請下載安裝第三方軟體,什麼xhell,winscp,我這裡用的是winscp,能夠把檔案上傳到伺服器。

 

 

4.2主機名是你的阿里雲外網地址,使用者名稱一般是root,密碼是阿里雲你的登入密碼。登入後,左邊是你的本地目錄和檔案,右邊是伺服器的目錄和檔案

4.3我的專案是在pycharm下開發的,所以目錄結構如下,我把整個wish_wall檔案複製到桌面,然後把這個檔案拖到winscp右邊www的目錄下,也就是放在開始建立虛擬環境同一個目錄www下,就會把整個檔案以二進位制上傳上去跟Pychram同樣的路徑。flask的檔案結構是所有css樣式,視訊,js,jquery,字型都必須放在static目錄下,H5程式碼都放在templates下面。

4.4要讓這個flask程式碼執行像你在pycharm上執行,你需要用在虛擬環境中安裝第三方庫,就是你在pychrm裡面執行的這個wish_wall.py檔案,我的就需要flask,flask——sqlalchemy,sqlalchemy...當然有一些是python內建的庫,就不要安裝,所以我級安裝了三個庫,然後又用開始開始安裝的gunicorn執行這個py檔案的例項,稍微會講,記住配置一切都在虛擬環境中當然很多教程用的是

pip freeze requirements.txt # 輸出本地包環境至檔案
pip install -r requirements.txt#安裝裡面打包的庫

上面的兩個程式碼可以把當前專案環境所有有的庫,都會記錄在requirements.txt檔案中,在用第二個命令,就能實現一鍵安裝第三方庫,但是我的安裝失敗了,反正我需要的安裝的庫比較少,就手動在虛擬環境pip install 安裝咯, 當然安裝包的數量多了,還是推薦上面的方式,不然幾十個,安裝也很難受。

4.5 接下來就是進入虛擬環境中啟動gunicorn讓你的網站執行起來,不過之前必須寫個啟動檔案,很多教程是這樣的,當然也可以進入你的目錄下也可以,因為flask啟動例項物件救贖qpp.run()不過還是跟隨潮流和不用進入那麼多目錄。切記,執行之前需要把你本地執行專案的第三庫在虛擬環境中安裝完畢,就和本地一樣的配置。

manage啟動檔案,在上面我給出的目錄結構圖裡面,manage.py,下面給出原始碼和解釋:因為官網和別人部落格寫的理解起來有點那啥,因為很多博主都是直接把官網的樣例複製貼上下來,導致我還用了一些時間查詢和理解。需要安裝flask_script庫

from flask_script import Manager
from wish_wall import  app#

manager=Manager(app)
@manager.command
def wish_wall():#
   return app#
if __name__ == '__main__':
    manager.run()

上面的from wish_wall import app 代表的是,我pycharm裡面的啟動檔案是wish_wall.py。我所有的程式碼都寫到裡面在,import app是因為我們flask例項的時候都是app.run()來啟動網站的,已經做好了,除開上面打#號的其他都是模版,套用就行。新建一個oy檔案把上面程式碼複製,改變第二行的引入就行,其他都可以不變。

 

4.6 匯入本mysql資料庫庫,因為網站資料都是存在myql裡面在,需要把資料庫給伺服器上的資料庫

在本地navicat上面選到flask用到的資料庫,滑鼠右鍵儲存sql檔案,把資料庫和表的資料匯出桌面,然後用winscp傳到伺服器。

 

因為,開始在寶塔已經在安裝了mysql,在寶塔介面,點選資料庫,可以直接改密碼,,所以需要你去更改密碼或者你在centos或者ubantu下命令改密碼

然後在cents系統登入myql,為了防止新人找不到檔案目錄,就詳細一點,切換到 www目錄下,cd /www

mysql -u root -p 輸入密碼後,

常用source 命令
進入mysql資料庫控制檯,如
mysql -u root -p
mysql>use 資料庫
然後使用source命令,後面引數為指令碼檔案(如這裡用到的.sql)
mysql>source wish_wall.sql

或者:

mysql -uroot -D資料庫名 

用命令看是否mysq中國有沒有我們匯入的資料庫,具體用法可以去百度。

4.7終於進入最後的關頭,估計看部落格的人都怕了或者沒有耐心看下去了,我自己都寫的都難受了,當初自己參考部落格的時候同樣難受。。。。最後用gunicorn啟動manage的例項化,就能把我們的flask執行起來,再去配合Nginx就能訪問網站了

進入虛擬環境:

cd /www

. flaskenv/binactivate

因為啟動檔案是在wish_wall目錄下,還得進入wish_wall 

cd wish_wall

啟動gunicorn:-b是繫結啟動地址和埠  mange:app是 上面製作的manage啟動檔案,app是例項化的物件,也就是flask裡面的app.run(),也可以直接找目錄,進入目錄,用檔名:app也可以。

gunicorn -b 127.0.0.1:5000 mange:app

為了展示效果,我去寶塔介面程序管理kill 掉gunicorn,重新啟動,啟動後就能24小時執行咯。

執行效果如圖:表示啟動成功。

五:寶塔下配置nginx檔案,最終可以通過外網訪問網站

其實最開始安裝了好了後,就能通過ip訪問你的伺服器,是一個nginx的頁面,接下來,就是在寶塔下面修改配置檔案:

 

 

點選nginx,找到配置修改:

裡面是nginx很多預設的配置,只需要修改很少的地方:就把server改成下面的就行

server
    {
        listen 80;
        server_name 106.14.181.17;#伺服器的域名或者ip
     
        root  /www/wish_wall; #這裡特變注意,你的專案放的位置,不然網站樣式載入不上,我是放在www下的,wish_wall

        error_page   404   /404.html;
     

        location /
        {
          
          proxy_pass http://127.0.0.1:5000;#這裡指定的埠和gunicorn的繫結的埠必須一致
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 


        }

 

然後儲存,點選nginx配置修改的上面的Web服務,重新啟動,就能訪問網站了,也就是大工告成!終於佈置完成了 ,可以通過外網ip訪問你的網站。寶塔還有很多方便的功能,比如安全監控,定期備份,資料庫,網站,改配置也很方便,不用進入系統裡面用命令改,很麻煩,尤其是對linux不熟悉的人,還要用vim一個一個的敲,沒準不熟悉linux vim,改起來很痛苦。

祝你能部署成功!