原文:http://www.catonlinepy.tech/
声明:原创不易,未经许可,不得转载
这篇文章,猫姐将讨论如何将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上线布署教程就到这里,喜欢的同学们可以在下面点赞留言,或是访问我的博客地址:http://www.catonlinepy.tech/ 加入我们的QQ群进一步交流学习!