python爬蟲實戰--第三章:flask項目部署到雲服務器

本實戰項目通過python爬取豆瓣電影Top250榜單,利用flask框架Echarts圖表分析評分、上映年份並將結果可視化,並製作了詞雲,項目已經上傳至服務器,歡迎各位大佬批評指正。

項目展示:http://121.36.81.197:5000/
源碼地址:https://github.com/lzz110/douban_movies_top250
學習資料:Python爬蟲技術5天速成(2020全新合集)

項目技術棧:Flask框架、Echarts、WordCloud、SQLite
環境:Python3

上一章已經對數據進行分析和可視化,這一章將項目部署到服務器上,方便查看。

服務器:華爲雲鯤鵬服務器
系統:Ubuntu18.04 Server
Python:Python3.6.7
pip:pip 19.1.1
uwsgi:2.0.18
Nginx: 1.14.0

步驟主要參考博客:Flask部署華爲鯤鵬雲服務器

注意一: 生成requirements.txt文件
在本地項目 Terminal 命令行下輸入命令後,同級目錄下就會生成requirements.txt文件了

pip freeze > requirements.txt

注意二: 雲服務器需要開放對應的安全組

在這裏插入圖片描述
在這裏插入圖片描述
開放對應端口之後,可以通過服務器中的nginx進行測試 在瀏覽器中輸入公網ip後 瀏覽器會展示如下頁面:在這裏插入圖片描述
注意三: Nginx+UWSGI配置問題

uWSGI是一個由python實現的web容器,可以兼容性比較好地發佈Django,Flask等pythonweb框架的應用。因爲本質上來說uwsgi是python的一個模塊,所以可以用pip install uwsgi直接來安裝它。

一個典型的配置文件如下:

[uwsgi]
socket = 127.0.0.1:5000
pythonpath = /home/wyz/flask
module = manage
wsgi-file = /home/wyz/flask/manage.py
callable = app
processes = 4
threads = 2
daemonize = /home/wyz/flask/server.log

依次解釋一下這些配置項。socket指出了一個套接字,相當於爲外界留出一個uwsgi服務器的接口。需要注意的是,socket不等於http。換句話說用這個配置起來的uwsgi服務器是無法直接通過http請求成功訪問的。

關於socket和http的差別 從概念上來說,socket本身不是協議而是一種具體的TCP/IP實現方式,而HTTP是一種協議且基於TCP/IP。
具體到這個配置這裏來,如果我只配了socket = 127.0.0.1:5000的話,通過瀏覽器或者其他HTTP手段是無法成功訪問的。而在uwsgi這邊的日誌裏會提示請求包的長度超過了最大固定長度。
另一方面,如果配置的是http = 127.0.0.1:5000的話,那麼就可以直接通過一般的http手段來訪問到目標。但這會引起nginx無法正常工作。正確的做法應該是,如果有nginx在uwsgi之前作爲代理的話應該配socket,而如果想讓請求直接甩給uwsgi的話那麼就要配http。

注意四: 使用nohup 後臺運行程序後 不能直接關閉MobaXterm ,需要等待自己斷開連接,如果直接關閉 程序就不在後臺運行了 很迷……

參考博文:

  1. uWSGI+Nginx+Flask在Linux下的部署
  2. 【Flask】 利用uWSGI和Nginx發佈Flask應用
  3. Nginx+UWSGI配置問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章