1. 程式人生 > 其它 >FlaskLinux系統部署實操(避坑指南)——以華為雲Ubuntulinux系統為例

FlaskLinux系統部署實操(避坑指南)——以華為雲Ubuntulinux系統為例

本人產品經理一枚,一直想自己搞個網站(飛狗小眾景點網),於是學習了李輝大佬《Flask Web 開發實戰》一書,歷時大半年,終於學成,在部署時卻反覆踩坑,斷斷續續花了近一個月才部署成功,覺得有必要將自己的部署經驗總結分享一下,讓大家少走一些彎路。

本部署是基於LinuxUbuntu作業系統(當時買華為雲伺服器時,特地裝B要了Linux,結果發現沒有介面,全部要靠命令,-_-|| )

1.  安裝基本庫和工具

1.1 先更新系統可安裝的包列表,並對可升級的包進行升級

$ apt update

$ apt upgrade 

1.2 接著需要安裝必備的包和開發工具

$ sudo apt install python3-dev python3-pip

1.3 安裝Pipenv

sudo -H pip3 install pipenv

2.  建立專案目錄

我把我的專案建立在了home/fegwo

華為雲的cloudshell支援視覺化建立資料夾(右鍵即可建立),不能視覺化建立的,可以搜一下Linux建立資料夾的命令 mkdir

3.  推送程式碼到伺服器

也就是把你本地的程式碼,上傳到你剛剛建的目錄,命令(下面的命令是在你本地電腦執行的)如下:

scp -r 你本地專案路徑 root@你的伺服器Ip地址:/home/fewgo

4.  安裝依賴

進入到你linux系統中專案資料夾,執行下面的命令安裝依賴

pip install -r requirements.txt

注:requirements.txt檔案是你在本地開發時,需要生成的,用於記錄依賴包。如果你開發時沒有生成,那麼你在伺服器上執行程式時,會收到很多個提示:XXX Not defind,也就是你的依賴包沒有被安裝,也可以根據提示一個個安裝。

安裝成功後,你可以嘗試用 flask run來啟動程式(flask run)會啟動你專案根目錄下的wsgi.py檔案。

執行成功後,還不能訪問網站,因為linux根本沒有瀏覽器視窗,沒地方輸入http://127.0.0.1:5000/,要支援遠端訪問,接下來要安裝gunicorn。

5.  安裝使用gunicorn

5.1 首先啟用虛擬環境

在你的專案目錄下source venv/bin/activate

(activate就是啟用的意思,退出虛擬環境用deactivate,暫時不用退出)

5.2 然後安裝gunicorn

執行命令:pip install gunicorn

5.3 執行gunicorn

執行命令:gunicorn --workers=4 --bind=0.0.0.0:8000 wsgi:app

注:需臨時設定防火牆以允許對8000埠的訪問,執行命令:sudo ufw allow 8000

執行後,可以檢視防火牆的狀態,執行命令:sudo ufw status

如果看到下面的內容,則表示防火牆8000開啟成功

Status: active

To Action From

-- ------ ----

8000 ALLOW Anywhere

至此,如果你運行了gunicorn --workers=4 --bind=0.0.0.0:8000 wsgi:app ,那麼你在你本地的電腦瀏覽器輸入 你的伺服器ip:8000,就可以訪問你的網站了,如果你的IP還解析了域名,也可以通過你的域名:8000訪問。

如果你還不能訪問,那麼恭喜你,可能遇到了跟我一樣的坑!雲伺服器的安全組沒有開啟8000埠!(很多雲伺服器阿里雲、華為雲等,除了防火牆外,還有一個安全組),這時候你需要登入你的雲伺服器安全組裡新增8000埠(具體可以搜尋百度一下)。

安全組開啟之後,就可以正常訪問了。因為gunicorn是後端服務,為了提供更好的效能服務,需要用Nginx來進行服務轉發,將gunicorn的服務轉發到Nginx上,所以接下來安裝Nginx。

6.  使用Nginx反向代理

6.1 首先使用下面的命令安裝Nginx

 $ sudo apt install nginx

6.2 刪除Nginx預設的配置檔案,新增自己網站的Nginx檔案

刪除命令:$ sudo rm /etc/nginx/sites-enabled/default

新建命令:$ sudo nano /etc/nginx/sites-enabled/fewgo

6.3 編輯新建的Nginx檔案,配置服務資訊,如下

server {

    listen 80 default_server;

    server_name www.fewgo.cn; # 如果你映射了域名,那麼可以寫在這裡,我的是www.fewgo.cn

    access_log /var/log/nginx/access.log;#可以不用改

    error_log /var/log/nginx/error.log;#可以不用改

    location / {

        proxy_pass http://127.0.0.1:8000; # 轉發的地址,即Gunicorn執行的地址

        proxy_redirect off;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

    }

    location /static { # 處理靜態資料夾中的靜態檔案

    alias /home/greyli/bluelog/bluelog/static/;#這裡是借鑑了李輝大佬書中的靜態檔案,具體可以換成你自己專案的靜態檔案

    expires 30d; # 設定快取過期時間

    }

}

6.4 儲存,檢查Nginx語法正確性,執行如下命令:

$ sudo nginx –t

看到如下程式碼,則表示語法正確

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

6.5 重啟Nginx

$ sudo service nginx restart

這時候,你再執行 gunicorn -w 4 wsgi:app(沒錯,可以不加8000埠了)

執行之後,你就可以用伺服器的IP或域名,直接訪問網站了

7.  補充說明

7.1 安裝Nginx之後,可以關閉防火牆8000埠了,執行如下命令$ sudo ufw delete allow 8000

7.2 gunicorn執行之後,按下Crtl+C停止Gunicorn(停止gunicorn會造成網站不能訪問)

7.3 如果gunicorn執行失敗,可能是埠被佔用,這時候就要把佔用的埠找出來,然後kill掉(端口占用查詢及kill方法,自行百度)

最後,可以訪問我部署好的網站來看看效果www.fewgo.cn,簡稱飛狗小眾景點網,一個分享小眾旅遊景點的網站。