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放到服务器上运行,查看官方文档。发现有好多个方法:

有这四种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

看看是否有问题。

我这边是成功的。部署完成。

这个是我的爬虫下载文件:

http://faye.website/wp-content/uploads/2020/08/website.py_.zip

最后修改日期:2020年8月8日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。