Falsk的入门可以通过其官方网站访问了解里面写的很清楚。
我的系统为Macos 10.15.6
python3
我做的是一个后端类似于api的网站
截图:
我是把一个网站的新闻信息爬去然后以json的格式进行输出。
爬虫的部分就不详细解释了,我用了bs4进行的爬取。
爬虫的部分截图:
主要讲一下我在部署的时候的问题:
首先我在自己的电脑上部署:
按照官方文档来就是这样
创建一个项目文件夹,然后创建一个虚拟环境。创建完成后项目文件夹中会有一个 venv 文件夹:
$ mkdir myproject
$ cd myproject
$ python3 -m venv venv
激活虚拟环境
在开始工作前,先要激活相应的虚拟环境:
$ . venv/bin/activate
激活了后就会有这样的前缀
安装 Flask
在已激活的虚拟环境中可以使用如下命令安装 Flask:
$ pip install Flask
然后在此目录下创建一个py文件
一个最小的应用
一个最小的 Flask 应用如下:
from flask import Flask
app = Flask(name)
@app.route(‘/’)
def hello_world():
return ‘Hello, World!’
我先把爬虫的整体打包成一个方法,该方法返回的是一个json格式的字符串。
我就把这里的return改成了我爬虫的方法的返回值
可以使用 flask 命令或者 python 的 -m 开关来运行这个应用。在 运行应用之前,需要在终端里导出 FLASK_APP 环境变量:
$ export FLASK_APP=hello.py(这个是你自己的py文件名字)
$ flask run
- Running on http://127.0.0.1:5000/
运行后,结果成功打开了在本地:
接下来就是把Flask放到服务器上运行,查看官方文档。发现有好多个方法:
Gunicorn
uWSGI
Gevent
Twisted Web
有这四种web端的后端服务器,我们可以通过这四种软件来与nginx连在一起。
我就选择了最简单的
Gunicorn+Nginx+Flask的体系来写的。
要把flask应用部署到服务器就要新建一个python的虚拟环境,跟刚刚我们在自己的本地电脑一样
先激活python
的虚拟环境然后再激活他
(因为我的服务器是之前用来做博客的所以我的服务器里已经有了nginx和mysql,就不安装了)
正式开始部署:
首先到我的/www 目录下新建一个文件夹(这里我就以falsk官方一样myproject)
mkdir myproject
cd myproject
python3 -m venv venv
然后激活
. venv/bin/activate
激活后就会在myproject目录里生成一个venv的目录。
然后再用
scp -r 自己的目录和py文件名) username@192.168.0.1:/home/username/(这后面为服务器的目录)
注意这里netstat -apn|grep :5000查询一下自己的服务器上有没有端口是占用5000 的
把py文件传输到服务器之后就可以调用一下了:
可以使用 flask 命令或者 python 的 -m 开关来运行这个应用。在 运行应用之前,需要在终端里导出 FLASK_APP 环境变量:
$ export FLASK_APP=hello.py(自己的py文件命名)
$ flask run
- Running on http://127.0.0.1:5000/
我这里调用了之后遇到了问题就是现实我们有安装bs4(因为我的爬虫使用bs4来分析的,所以要安装)
python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4
安装了后再flask run还是不行。
我就找问题,最后用
python3.6 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4
解决了问题。可能是因为我的服务器里面有其他版本的python导致的。
成功运行后再外网打开可行。
我就关掉了命令窗口。
但是当我再次打开是发现没用了。。。。
我才知道那个要用一个服务器来运行才可以稳定的。
我就去用了Gunicorn+Nginx+Flask的体系来写
首先:
打开myproject的文件夹。
用pip命令下载Gunicorn
下载之后再使用命令:
gunicorn -D –error-logfile=/www/gunicorn.log –pid=/www/gunicorn.pid –access-logfile=/www/access.log -w 4 -t 300 -b 127.0.0.1:4000 website:app
成功了之后就去调,nginx的参数因为我的nginx在写博客的时候,按照教程写的,学了个方法就是在另一个文件夹中写配置,之后用include的方式来导入到nginx.conf中去
这是配置
server {
listen 888;
server_name localhost;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_pass http://127.0.0.1:4000/;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
要记住这里的proxy_pass http://127.0.0.1:4000/;
要与上面的端口一致。
这里实际上是使用了转发的机制,用Gunicorn当falsk的服务器在本地的4000端口运行
然后再用nginx来转发到本机外网的888端口中。
编写好后。
systemctl restart nginx
看看是否有问题。
我这边是成功的。部署完成。