Flask博客上线布署过程

文章目录

[隐藏]

  • 0. Flask Web应用处理请求的过程
  • 1. 安装相应的依赖环境
  • 2. 创建虚拟环境
  • 3. 设置Gunicorn
  • 4. 配置、启动Supervisor
  • 5. 配置、启动Nginx
  • 6. 总结

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

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

1. 安装相应的依赖环境

使用ssh [email protected] 进入云主机的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) [email protected]:~/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) [email protected]:~/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的使用

原文出处:segmentfault -> https://segmentfault.com/a/1190000019416925

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。