如何将本地的Flask Web项目部署在生产环境(项目上线)
off999 2024-10-15 12:04 43 浏览 0 评论
在介绍正式内容之前,先来介绍一下什么是开发环境,测试环境和生产环境。
- 开发环境-development: 顾名思义就是开发人员写代码,开发系统的环境,由开发人员配置。
- 测试环境-testing:开发人员将系统在开发环境完成之后,交给测试人员,在测试环境进行测试,也就是检查系统各个功能有没有啥问题,一般由测试人员进行配置。
- 生产环境-production:也就是线上环境,用户使用的环境。由特定人员来维护,一般人没有权限去修改。
知道了这三个概念之后,这篇文章就是介绍如何将一个Flask web项目部署到生产环境(前提默认已经做完测试,没有任何问题的情况下,在公司肯定不会开发完就直接上线)
一,配置LNMP软件环境:
L--Linux,N--Nginx,M--MySQL,P--Python,首先在找一台linux服务器(免费,开源,稳定),我用的是Ubuntu20.04 LTS(长期支持版)。没有服务器的可以去阿里云买一个,或者直接用虚拟机代替也是可以的,主要掌握方法最重要。
(一)Nginx 安装:Nginx是一个高性能web服务器,反向代理服务器(这里不详细介绍,请关注我接下来的文章)
(也可以下载源码包进行安装的方式,适合所有linux系统。我用的是apt安装方式,方便点)
1,ubuntu安装nginx
#安装编译工具及库文件(nginx相关文件及依赖)
apt-get install -y(yes) build-essential libssl-dev libpcre3 libpcre3-dev make openssl zlib1g-dev
apt-get install nginx -y 2,检查效果
netstat -tnulp | grep nginx #查看端口占用情况3,nginx相关命令
#启动停止(三种命令,用哪个命令启动,就要用那个命令停止)
systemctl start|stop|reload|status ... nginx
#查看信息
nginx -V #查看所有信息
nginx -v #查看版本信息
#检查配置文件
nginx -t #检查默认配置文件
nginx -t -c file.conf #指定配置文件进行检查(二)MySQL安装
(两种方式源码安装,apt-get安装。我用的是apt安装方式,方便点)
1,ubuntu安装MySQL
sudo apt-get update #更新软件源
sudo apt-get install mysql-server #安装mysql
安装过程会提示设置mysql root用户的密码,设置完成后等待自动安装即可。默认安装完成就启动了mysql。
2,启动和关闭MySQL
systemctl start mysql.service
systemctl stop mysql.service确认是否启动成功:
两种查看是否启动成功的方法
#1
systemctl status mysql.service
#2
sudo netstat -tap | grep mysql3,进入MySQL shell界面
mysql -u root -p注:先配置一下字符集,不然会导致中文乱码(因为mysql character_set_server默认设置是latin1):
打开配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
添加一行:
character_set_server=utf8
重启:
systemctl restart mysql.service
登录mysql查看当前设置的编码:
show variables like "char%";4,导入本地sql文件
source /xxx目录/movie.sql(三)Python安装:
(三种方式:源码安装,直接apt-get安装,anaconda安装(推荐))
1,下载Anaconda
1,第一种:官网下载地址:https://www.anaconda.com/products/individual#Downloads
下载linux版,上传即可(我习惯用官网下载这种,看个人喜好)
2,第二种:sudo wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh(直接在linux命令行执行即可下载)2,解压anaconda压缩包
bash Anaconda3-5.3.1-Linux-x86_64.sh3,解压过程中可能会遇到输入yes和no的地方
1>进入注册信息页面,输入yes
2>阅读注册信息,然后输入yes;查看文件即将安装的位置,按enter,即可安装;
3>遇到是否将ananconda加入环境变量时,这个看个人选择(因为这个加入的是局部环境变量,即当前用户,如果要加入全局变量选择no),我选择no;
4>遇到需不需要安装VSCode时,看个人选择,我选择no;
4,配置环境变量
在/etc/profile中加入
export PATH="/home/xxx/anaconda3/bin:$PATH"
这样所有用户都可以使用安装的anaconda python环境5,更新环境变量(让修改的环境变量生效)
source /etc/profile6,测试是否安装成功
在命令行输入python即可看到
?Python 3.8.5 (default, Sep 4 2020, 07:30:14)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
二,上传本地项目到nginx,安装项目所需要的包:
(一)上传项目到nginx工作目录
如果使用apt-get这种方式安装的nginx,
- 工作目录在 /etc/nginx
- 日志目录在:/var/log/nginx/
- web目录:/var/www/html/
按照nginx配置文件中的配置,应该将项目上传到web目录(html页面(静态文件)存储位置),
但是也可以在工作目录/etc/nginx创建一个html目录来存放项目,这样配置文件和项目在一个文件夹中,比较直观,好管理。只需要在nginx配置文件中改路径即可。(我推荐在nginx工作目录下创建项目存储目录)。
1,在/etc/nginx/目录下创建html目录
sudo mkdir html2,上传项目到html目录
rz3,进入到项目根目录进行项目所需要模块的安装
#这里用上了豆瓣镜像,速度比默认源要快
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com -r requirements.txt注:这个地方用到了requirements.txt,可能有人会纳闷这个文件哪里来的,怎么直接按照这个文件就可以把项目需要的所有的模块安装上呢?
这个地方使用了一个第三方库,pipreqs:这个库的作用是自动去项目中找项目依赖的那些模块以及对应的版本。
首先我们在本地安装:
pip install pipreqs进入项目根目录执行下面命令:
pipreqs ./ --encoding=utf-8 即可生成requirements.txt文件然后打包项目上传,使用上边的豆瓣源进行安装即可。
(二)配置nginx反向代理,和负载均衡
1,进入/etc/nginx/conf.d目录,创建一个*.conf文件:(这个也可以在/etc/nginx/sites-enabled/default下也可以配置,这两者都可以)
cd /etc/nginx/conf.d
vi server.conf2,在创建的server.conf中配置以下信息
upstream fuzai { #负载均衡
server 127.0.0.1:5000; #本地启动的Flask服务
server 127.0.0.1:5001;
}
server {
listen xxx:xxx:xxx:xx:80; #nginx ip和端口(你的服务器ip是什么就写什么即可)
location / {
proxy_pass http://fuzai; #反向代理
}
}三,启动nginx,并且在项目根目录启动项目
安装好的nginx其实是自动启动的。
但是配置和文件之后想让配置文件生效就得重启:
sudo nginx -t 检查配置文件有没有错误
sudo nginx -s reload 重启nginx;或者使用sudo systemctl reload nginx都可以然后进入项目根目录启动项目:
#在后台启动两个flask服务
nohup python run.py runserver -h 127.0.0.1 -p 5000 &
nohup python run.py runserver -h 127.0.0.1 -p 5001 &
#查看是否启动成功
netstat -tunlp | grep 500*注:这个地方有的人也会问,直接python run.py不香嘛。非得跟后面一大堆。
如果用python run.py就必须在代码中将ip和端口都给定,无法从命令行传递,当然有人也会用sys.argv或者argparse传参。其实这样也是可以的,但是要是参数一多,后台代码就得进行大的改动。
因此这个地方,用到了flask-script一个flask命令行运行的组件,非常好用。只需要安装在run.py文件中导入即可:
from flask_script import Manager
只需要将app传进入即可,是不是特别简单
app = create_app()
manager = Manager(app)
if __name__ =="__main__":
manager.run()这样后台就不用管了,需要加参数,前台直接加就可以。跑服务,设置数据库等等功能,不要太香。(之后的博客介绍Flask时会详细介绍)
其实到这个地方,已经上线完成了,只需要在本地访问nginx ip,他就会反向代理到flask服务中。就可以在本地进行操作了。
可是,我们使用的是flask自带的WSGI服务器(不懂WSGI的看我接下来的博客),不适合在生产环境中使用,在开发过程中作为便利提供,它没有考虑到安全性或性能。所以我们要使用真正的WSGI服务器。WSGI服务器有很多,这个地方我用的是Gunicorn(这也是用的最广泛,Flask官方推荐的服务器)。
四:配置Gunicorn环境
Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server,提供http服务。在文本中不是重点,网上也有很多资料,只要记住,它是用来代替flask自带的wsgi服务器的。
1,安装
安装很简单,只需要:
pip install Gunicorn 2,安装完就可以直接在源码目录执行
进入到源码目录执行
gunicorn -w 2 -b :5000 run:app
-w指的是处理请求的进程数
-b是指绑定本机ip,可以省略掉不写,使用的端口是5000
run:app指的是run.py中的 flask app
Gunicorn直接用命令启动,一般不需要编写配置文件(当然也可以将所有配置写成一个python文件,这样整齐)
这样配置即可
gunicorn.conf.py:
bind = '127.0.0.1:8000' #绑定ip和端口号
timeout = 30 #超时
workers = multiprocessing.cpu_count() * 2 + 1 #进程数
threads = 2 #指定每个进程开启的线程数
gunicorn -c gunicorn.conf.py test:application这样就完事了,但是有个问题,加入遇到问题就需要单独重启他们,而且,遇到高并发场景时我想开启多进程,要是用gunicorn就得启动多次,很麻烦。有没有一个进程管理工具,直接用他就可以管理nginx和gunicorn呢?
这个是有的,推荐使用Supervisor。一个很好用,很强大的进程管理,监控工具。
五,配置Supervisor环境
在production环境,起停和状态的监控最好用supervisior之类的进程管理,监控工具。
supervisor是一个用python语言编写的进程管理工具,supervisor 能将一个普通的命令行进程变为后台daemon,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor监听到进程死后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编写代码来控制。可以运行在各种类unix的机器上。
1,安装
sudo apt-get install supervisor #ubuntu下安装
也可以用pip安装,但是推荐用apt-get安装,节省一些配置得步骤。
2,安装完毕,进入配置文件目录
进入/etc/supervisor/conf.d/目录
创建gunicorn.conf和nginx.conf配置文件3,分别配置gunicorn.conf和nginx.conf
gunicorn.conf 这是gunicorn服务的配置文件
#为必须填写项
[program:gunicorn]
#命令路径
command=/home/xugaoxiang/anaconda3/bin/gunicorn -w 2 -b :50%(process_num)02d run:app
directory=/home/xxx #执行目录
autostart=true #如果是true,当supervisor启动时,程序将会自动启动
autorestart=true #自动重启
process_name=%(program_name)s_%(process_num)02d
numprocs=2 #启动几个进程,每个进程负责一个服务
numprocs_start=1 #进程id从几开始
user=xugaoxiang #以什么用户执行
redirect_stderr=true #重定向
nginx.conf
[program:nginx]
command=/usr/sbin/nginx -g 'daemon on;'
autostart=true
autorestart=true
user=root
redirect_stderr=true
nginx是需要root权限的,所以user应该设置成root。最后就可以重启supervisor了4,supervisor 安装后自动会启动,配置完毕后重启所有进程即可应用配置
sudo supervisorctl reload5,观察进程状态
sudo supervisorctl status到这才是真正的将Flask部署在了生产环境,用到了flask+nginx+supervisor+gunicorn。
总结
将一个flask项目上传到linux服务器生产环境,总结起来分为以下几步:
1,配置LNMP环境:首先得有linux服务器,其次配置python环境,mysql环境,nginx环境。
这样其实就已经可以上线运行了,可是,flask的内置服务器不适合生产环境使用,这个时候需要加入真正的WSGI服务器。
2,配置Gunicorn WSGI服务器环境
有了真正服务器,那么还需要一个统一管理进程的工具,进行启动,重启,开启多进程,集中式管理。
3,配置Supervisor进程管理工具环境
以上就是一个完整的Flask生产环境部署的步骤。
相关推荐
- 安全教育登录入口平台(安全教育登录入口平台官网)
-
122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...
- 大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)
-
大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...
-
- 哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
-
要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...
-
2026-02-04 09:03 off999
- 电信宽带测速官网入口(电信宽带测速官网入口app)
-
这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...
- 植物大战僵尸95版手机下载(植物大战僵尸95 版下载)
-
1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...
- 免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)
-
1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...
- 2025世界杯赛程表(2025世界杯在哪个国家)
-
2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...
- 下载搜狐视频电视剧(搜狐电视剧下载安装)
-
搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...
- 永久免费听歌网站(丫丫音乐网)
-
可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...
- 音乐格式转换mp3软件(音乐格式转换器免费版)
-
有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...
- 电子书txt下载(免费的最全的小说阅读器)
-
1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...
- 最好免费观看高清电影(播放免费的最好看的电影)
-
在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...
- 孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)
-
要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
win7系统还原步骤图解(win7还原电脑系统的步骤)
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
16949认证费用是多少(16949审核员太难考了)
-
linux软件(linux软件图标)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
windows7旗舰版多少钱(win7旗舰版要多少钱)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
