基于Lightsail上构建Python Flask应用

在这里插入图片描述

背景

最近刚好接手了一些python相关的工作,主要是使用python的 Flask框架进行后端开发。所以在这里记录下在服务器上部署Flask框架的过程。

我这里使用的是AWS的服务器,因为AWS的新用户可以白嫖使用服务器,所以这里我们也不额外花钱购买服务器了。如果还没有注册的用户,可以去注册下白嫖服务器。网上对怎么使用免费服务器的教程也有很多,你可以搜索参考下。

话不多说,接下来正式开始。

服务器

首先我们登录AWS网站,使用根用户进行登录。

其实Lightsail与EC2都有免费的额度,这里为什么选择Lightsail而不是EC2。主要是Lightsail比较适合我们这次的测试,我们只需几次点击即可创建网站或应用程序。自动配置联网、访问和安全环境。我们不需要额外配置其他内容。

在控制台中搜索Lightsail,进入Lightsail控制台。

在这里插入图片描述

点击创建实例按钮,进入实例配置页面。后续我们只需要选择下实例的系统及实例的计划就可以轻松的创建一个实例

在这里插入图片描述

这里提供了常见的Linux发行版本,你可以按你自己的习惯选择

在这里插入图片描述


选择好实例的计划,这里标记有“First 3 months free”的就是可以免费使用的。你可以选择其中任何一个

在这里插入图片描述


点击创建实例,我们就可以快速创建一个实例。稍等一会在控制台就可以看到我们刚才创建的实例。

在这里插入图片描述

先放开服务器的5000端口,我们后续需要访问这个端口
在实例的详情页中点击 Networking 下拉到 IPv4 Firewall 添加 5000端口

在这里插入图片描述

flask部署

1、连接到服务器

这里我们使用页面提供的工具连接到服务器

在这里插入图片描述

2、安装python和pip

sudo yum install python python-pip
在这里插入图片描述

查看python版本

在这里插入图片描述

3、安装Flask框架

在命令行中运行以下命令:

pip install flask
在这里插入图片描述

4、创建项目目录

我们创建一个目录用来存放项目代码

sudo mkdir -p /var/www/flask && cd /var/www/flask

在目录中创建app.py

sudo vim app.py

这里我们以部署一个简单的Flask程序为例:

在app.py中放入以下代码

from flask import Flask
app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'Hello World!'


@app.route('/hi/<username>')
def say_hi(username):
    return "Hay, {} !".format(username)
 
if __name__ == '__main__':
    app.run(host="0.0.0.0", port="5000")

运行python app.py测试下,看能不能访问

在这里插入图片描述


我们访问5000端口已经可以看到返回的 Hello World!了

在这里插入图片描述


但是此时实际连接的时flask的调试服务器,不能应用在正式工作场合。我们需要使用gunicorn作为WSGI。

5、安装Gunicorn 来运行Flask

pip install gunicorn
在这里插入图片描述


创建一个 Gunicorn 配置文件,例如 my_gunicorn_config.py,并指定 Flask 应用的入口和其他配置项。示例`配置如下:

  bind = '127.0.0.1:5000'
  workers = 4
  threads = 2
  module = 'app:app'

启动Gunicorn:
在命令行中运行以下命令,启动 Gunicorn,并使用指定的配置文件:

gunicorn -c my_gunicorn_config.py app:app
在这里插入图片描述

我们访问下,看看有没有问题

确保应用可以通过 Gunicorn WSGI 服务器正常访问

在这里插入图片描述

6、使用supervisor守护gunicorn

先安装supervisor

pip install supervisor

#创建supervisord.conf配置文件
sudo touch /etc/supervisord.conf
# 改变权限
sudo chmod 666  /etc/supervisord.conf
# 生成初始配置文件
echo_supervisord_conf > /etc/supervisord.conf

创建目录/etc/supervisord/

sudo mkdir /etc/supervisord/

在目录中创建一个配置文件 myflask_supervisor_config.conf,并指定要监控的 Gunicorn 进程,内容如下:

[program:flaskdemo]
command= gunicorn -c /var/www/flask/my_gunicorn_config.py app:app
directory=/var/www/flask/
user=ec2-user
autostart=true
autorestart=true
redirect_stderr=true

修改supervisord.conf配置文件,如图所示:

我们引入我们刚才创建的配置文件目录 /etc/supervisord/下的所有配置文件
修改前:

在这里插入图片描述


修改后:

在这里插入图片描述


启动supervisor

supervisord -c /etc/supervisord.conf
# 查看管理进程的状态
supervisorctl status
在这里插入图片描述

7、配置nginx

我们还需要添加nginx并将客户端请求转发到Gunicorn

安装nginx

sudo yum install nginx

我们创建一个 Nginx 配置文件my_flask.conf,并指定反向代理规则,将客户端请求转发到 Gunicorn 服务器

#编辑文件
sudo vim /etc/nginx/conf.d/my_flask.conf

#文件内容如下:

server {
       listen 80;
       # 这里替换成你的域名
       server_name your_domain.com;
 
       location / {
           proxy_pass http://127.0.0.1:5000;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
       }
   }

最后启动nginx服务器:

sudo systemctl start nginx.service
在这里插入图片描述

使用域名访问效果:

在这里插入图片描述

这样我们就在云服务器完整的部署了一个Flask项目,如果你也想自己在服务器上部署体验Flask应用的话,可以参考本文,假如有幸帮到了你,可以点本文个赞。如果有任何错误请指出。

您的支持是对我最大的鼓励!

发表于: 作者:憧憬。
关注互联网以及分享全栈工作经验的原创个人博客和技术博客,热爱编程,极客精神
Github 新浪微博 SegmentFault 掘金专栏