Flask博客上线布署过程

这篇文章,猫姐将讨论如何将flask程序部署到ubuntu服务器上。其中,部署过程涉及到Flask,Nginx,Gunicorn,Supervisor的安装使用。通过学习今天的文章,你将学会部署自己开发的Flask web程序,真正让自己开发的应用上线运行。

0. Flask Web应用处理请求的过程

1. 安装相应的依赖环境

使用ssh username@ip 进入云主机的shell环境,并在云主机上安装需要依赖环境,使用如下命令安装:

sudo apt-get install nginx supervisor python-pip python3-venv

ssh的使用方法:ssh命令,加上@前面是云主机服务器的用户名,@后面是云主机服务器的ip地址。

2. 创建虚拟环境

如果云主机中没有创建虚拟环境,那么我们有必要创建一个。虚拟开发环境的主要作用是为了将web项目所用的各种库与操作系统自带的python库隔离开来,这样做的好处是开发环境与系统环境隔离,环境之间不会相互影响,特别是对于多人协作的大型项目开发,建立虚拟环境是非常有必要的。下面开始创建虚拟环境:

# 使用下面命令,创建一个虚拟开发环境
$ python3 -m venv <虚拟环境的名字>

# 激活刚才建立的虚拟开发环境,(这里我们创建一个名为miao_venv的虚拟环境)
$ python3 -m venv miao_venv
$ source maio_venv/bin/activate

# 安装flask web程序所需要的python包
$ pip installl -r requirement.txt

激活虚拟环境后,进入run.py文件的目录,在终端中输入python run.py,就可以将程序运行起来了。但是,这样生产环境中将flask程序运行起来是不安装的,并且处理用户请求的能力也非常不足。所以,我们应该去使用gunicorn这个工具去运行我们的Flask web程序。

3. 设置Gunicorn

Gunicorn(“Green Unicorn”)是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server。和大多数的web框架兼容,并具有实现简单,轻量级,自动管理多个worker进程,高性能等多个特点。

采用如下命令安装gunicorn:

pip install gunicorn

gunicorn运行Flask web程序的方法也非常简单,如下命令即可达到目的:

gunicorn filename(run):变量名(app) -b localhost:端口号 &
# 解释:filename指的是能够将flask程序运行起来的python文件,如run.py的文件名run。冒号后面的是flask实例化的app变量。端口号是在网页中输入的url的端口号

查看端口服务是否生效,可以使用下面的命令:

# 在命令行中输入:
$ ps aux|grep gunicorn
# 下面是效果
(miao_venv) root@vultr:~/flaskblog# ps aux|grep gunicorn
root      4124  0.0  0.0  11020   980 pts/0    S+   10:35   0:00 grep --color=auto gunicorn
root     11117  0.0  2.1  33308 21400 ?        S    May28   0:10 /root/blog_venv/bin/python3 /root/blog_venv/bin/gunicorn run:app -b localhost:5006
root     11120  0.0  7.6 160528 77160 ?        S    May28   0:17 /root/blog_venv/bin/python3 /root/blog_venv/bin/gunicorn run:app -b localhost:5006

这样就能够使用gunicorn进程去监听5006的端口。现在gunicorn进程是工作在后台的,但只有一个gunicorn进程会处理web请求,当用户访问量过大时,网站的并发处理能力非常弱。最理想的方法是,使用supervisor工具去启动并监控多个gunicorn进程。

4. 配置、启动Supervisor

supervisor工具可以监视并控制类Unix操作系统的进程。supervisor将gunicorn进程启动后,会一直监控gunicorn进程的运行情况。当gunicorn进程出现异常挂掉后,supervisor会立刻启动guincorn进程,确保web程序提供的用户服务不受影响。

supervisor的使用也非常简单,只需要完成一个conf文件的编写,在/etc/supervisor/conf.d/目录下创建一个flaskblog.conf文件并依据自己的要求去配置它。配置内容如下所示:

# flaskblog.conf 文件内容如下
[program:flaskblog]
# 你的博客程序所在的目录
directory=/root/flaskblog/.
command=/root/flaskblog/miao_venv/bin/gunicorn run:app -b localhost:5006 # 这个地方的端口号要与nginx.conf文件中一致
autostart=true
autorestart=true
stderr_logfile=/var/log/flaskblog.err.log
stdout_logfile=/var/log/flaskblog.out.log

为了使以上配置立刻生效,需要运行下面的命令:

$ sudo supervisorctl reread
$ sudo service supervisor restart

#另外一些常用的命令
$ sudo service supervisor stop
$ sudo service supervisor start

这样, 我们就可以通常supervisor工具来完成对gunicorn进程的监控了,使用下面的命令可以看到flaskblog是否处于运行状态,及运行进程ID和运行时长:

$ sudo supervisorctl status
# 状态显示
(miao_venv) root@vultr:~/flaskblog# sudo supervisorctl status
flaskblog                        RUNNING   pid 11117, uptime 19:18:31

5. 配置、启动Nginx

Nginx可以作为HTTP服务器和反向代理服务器,它能够实现负载均衡,分担服务器的压力。

现在,为我们的flask程序定义一个服务块,如下所示:

# 在/etc/nginx/nginx.conf文件中添加如下内容
# server添加的位置在http{}里面
server {
        listen 80;
        server_name example.org; # 这是HOST机器的外部域名,用地址也行。现在还没有域名,可以用example.org代替

        location / {
                proxy_pass http://127.0.0.1:5006; # 这里是指向 gunicorn host 的服务地址
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                }

         }

# 注意:proxy_pass中,代理传递的端口必须与gunicorn进程的端口号相同

现在重启nginx web服务器,命令如下:

$ sudo nginx -t
$ sudo service nginx restart

此时,你已经可以通过云主机上的公网IP来访问你的Flask web程序了,猫姐的博客运行起来后的效果如下:

6. 总结

通过布署flask程序到ubuntu云主机服务器上,我们掌握了以下技能:

1.学到了Gunicorn的使用

2.学到了Supervisor的使用

3.学到了Nginx的使用

标签:Flask 发布于:2019-10-16 16:24:50