Flask框架项目部署:阿里云CentOS操作系统

写在前面

  • 我使用的Flask框架结构与米格尔·格林贝格所著《Flask Web开发》(即狗书)一书中讲解一致;
  • 项目使用的数据库也是书中使用的SQLite,因此在后续配置中不需安装mySQL;
  • 个人认为上述书籍是Flask框架极好的入门教材,全书带领读者完成一个博客项目实例,讲解清晰,有趣味性,并且可以从github上跟随书中讲解进度检出各个版本的源代码。特此推荐~

一. 部署前的准备

1. 一个已在开发环境中完成的Flask项目

1)关于依赖包
  • 项目文件夹的顶级应当有requirements.txt文件(固定命名),其中记录了项目的所有依赖包及其精确的版本号。后面部署的时候系统会根据这一文件自动按照依赖包;

  • requirements.txt文件可以在开发环境中自动生成,使用命令:

    (venv)$ pip freeze >requirements.txt
    

    上图可以看到,该命令需要激活虚拟环境后执行。具体激活方法:

    a)命令行进入你项目使用的虚拟环境文件夹(一般是venv)的父文件夹

    b)Linux或macOS操作系统运行

    bash$ source venv/bin/activate
    

    Windows系统运行

    bash$ venv\Scripts\activate
    
2)关于环境变量

项目中会用到一些类似“管理员邮箱”、“为用户发送确认信息的邮箱”、“为用户发送确认信息邮箱的密码”等私人的、需要高度保密的信息。这些信息在程序中通常利用os.environ.get('环境变量名')方法从环境变量中读取。我们在部署前可以将所有需要写入的环境变量准备好,方便后续操作。

2. 阿里云CentOS操作系统云服务器

1)关于安全组

在这里插入图片描述

运行了云服务器实例之后,在云服务器管理控制台可以修改安全组配置规则(上图中红色方框),进入后选择“添加安全组规则”(用来指定开放端口),出现如下界面:
在这里插入图片描述
图中红色方框指示的内容是需要我们填写的。如果你想打开服务器的465端口,需要在端口范围处填写“465/465”,授权对象都填“0.0.0.0/0”即可。

一定要打开的端口有:
80、443、22、465、8888.

2)基本操作

在这里插入图片描述
点击上图标注的实例名,进入如下界面:

在这里插入图片描述
这里选择“远程连接”,连接到服务器的CentOS终端操作界面:
在这里插入图片描述
进入终端后的第一件事是进行系统升级。执行如下命令:

[root@你的云服务器实例名称 ~]# yum update

开始自动升级,期间要输入一次’y’,确认升级。

二. 正式开始部署

Step 1 进入宝塔面板

请读者前往如下网址:

https://www.bt.cn/download/linux.html

找到下图部分,并复制下图指出的命令,前往刚刚打开的服务器CentOS终端操作界面运行。
在这里插入图片描述
在这里插入图片描述
只需选择一次’y’,即可开始自动化安装

在这里插入图片描述
到这里安装成功,会获得上述图片展示的四项基本信息,注意保留好!

浏览器访问上面拿到的“外网面板地址”,输入username、password完成登录。

进入后会看到下图(作者已经做过了推荐环节,系统不会再为我弹出这个对话框,这里我去网上找了一张图来说明)

在这里插入图片描述
我们的程序使用Python开发,所以选择LNMP一侧的内容安装。前面提到,我使用SQLite数据库,而SQLite在CentOS中自带,因此不需额外安装。注意安装方式要选择“编译安装”!

之后,去“软件商店”搜索、下载Python项目管理器,如下图所示:

在这里插入图片描述

Step 2 导入项目并运行

进入宝塔Linix面板

进入“文件”,找一个位置,建立一个专门用于存放项目的文件夹(这里可以随意存放,只要自己找得到就可以)。

如下图所示,我在根目录下建立了XXX_PROJECTS文件夹,用于存放上传到服务器中的所有项目。

在这里插入图片描述
从面板进入服务器中刚刚建立的文件夹,从本地上传项目文件夹,操作界面如下图所示:

在这里插入图片描述
之后去“软件商店”找到刚刚下载好的Python项目管理器,选择设置。

tip: 为了之后操作方便,可以选择“首页显示”,这样可以在首页显示快速入口。

在这里插入图片描述
选择“设置”后,进入添加项目界面,选择“添加项目”,出现如下设置界面:
在这里插入图片描述
项目名称可以随便起(英文),路径选择刚才项目文件夹在服务器中的位置,Python版本选择项目开发时使用的即可。框架选择flask,配套地,启动方式要选择gunicorn。启动文件为项目的入口文件,一般是运行app.run()语句的文件。

说明:最好在入口文件的末尾写如下启动程序的语句,方便后续操作:

if __name__ == '__main__':
    app.run()

我们继续填写设置。端口一定要写!!!

Flask框架的程序默认本地运行在5000端口,因此如果在app.run()方法中没有特殊配置,这里的端口就填5000.

下面的两个勾选项一定都要选!!!

点击确认,会自动安装项目所需的依赖包,前提是之前在项目文件中加入了requirements.txt这一顶层文件。再次强调:文件名是固定的!

经过一小段时间的安装,项目的虚拟环境会自动建立,自动命名为项目名_venv并且装好了全部依赖包。

在这里插入图片描述

这时,在Python项目管理器中可以看到刚刚添加的项目,点击“映射”,填写你申请的域名(如有)。如果没有申请域名也没有关系,阿里云提供的公网IP也是支持的,只是之后访问网站的时候需要直接通过IP地址访问。

在这里插入图片描述

此时,可以在“网站”栏中看到Python项目管理器为我们建立的映射。但我们发现,其中显示的项目根目录与我们刚刚设置的不同。

这里显示的根目录是默认值,我们需要把它改成我们项目所在的位置(与刚才添加项目时选择的项目路径相同)。

具体方法为点击“设置”,进入如下界面,在“网站目录”中把网站目录改为项目所在位置,运行目录选择’/'即可。
在这里插入图片描述
改完项目路径,再一次进入Python项目管理器,开启项目(“状态”栏应显示“运行中”)。

现在,距离部署结束只剩最后一步:

在服务器终端中cd进入项目所在路径,用bash$ source 项目名_venv/bin/activate 命令激活虚拟环境。

首先进行一些常规的配置,例如写入环境变量、创建数据表,等。这些配置你应当在开发时就比较熟悉。

最后,执行(test_deploy_venv) [root@你的云服务器实例名称 项目名]# nohup python3 入口文件.py >> /XXX_PROJECTS/log/flask.log 2>&1 &

说明:入口文件的名称需要改成你自己的、XXX_PROJECTS是我创建在系统根目录下的文件夹,用于存放所有项目代码、在XXX_PROJECTS中需要新建一个名为log的文件夹,这一操作在宝塔面板-文件中就可以可视化地完成。flask.log不需要自己创建。这是将会自动创建的日志文件。

这一命令会让程序在后台运行,且不会受远程连接窗口退出的影响。

如果你需要重新运行项目,就必须先把原来后台的进程停止。

可以使用ps aux命令查看全部后台进程与对应的ID。flask项目的进程很好辨认,例如我的项目运行后的进程为:

root      372355  0.1  1.1 149592 44676 pts/2    S    12:32   0:00 python3 flasky.py

372355就是这一进程的ID,可以使用kill 372355来停止这一进程,之后就可以重新运行程序了。

部署步骤到这里已经全部结束,在浏览器中输入你绑定的域名或公网IP地址,即可成功访问!

三. 一些遇到的问题

1. 基于Flask-Mail用163邮箱发邮件问题

使用163邮箱为用户发送邮件需要在163邮箱的网页端打开POP3/SMTP服务,并拿到授权密码,如下图所示:

在这里插入图片描述

授权密码不同于登录密码。注意Flask-Mail库中发邮件需要用户提供的密码是授权密码

163邮箱支持的端口为25、465,其中25端口的邮件传输不加密,465端口加密。

由于阿里云服务器不支持25端口,所以如果想发邮件必须用465端口,配置文件中需要加入如下设置。

    MAIL_PORT = int(os.environ.get('MAIL_PORT', 465))
    MAIL_USE_SSL = True

2. 退出控制台项目自动停止问题

如果在配置的最后一步执行flask runpython 入口文件.py,项目也可以成功运行起来,使用服务器公网IP或你的域名同样可以访问到。但一旦你退出了到服务器的远程连接,进程就会终止。

解决方案就是按照上面步骤中的命令,在启动命令前后分别加nohup&,这可以让程序运行在后台,且不受终端退出的影响。

四. 说明

本文一定程度上参考了b站的视频 【Python】如何用Python搭建网站,并根据实际操作情况对其内容做了补充。这里特别鸣谢,并给出视频链接如下:

https://www.bilibili.com/video/BV1Wz4y1f7qV?t=4761

如有侵权请告知,我会立即删除博文。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值