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配置问题
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章