如何将本地的FlaskWeb项⽬部署在⽣产环境(项⽬上线)⽬录
在介绍正式内容之前,先来介绍⼀下什么是开发环境,测试环境和⽣产环境。
开发环境-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
mysql下载完如何使用#安装编译⼯具及库⽂件(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  -f  #指定配置⽂件进⾏检查
(⼆)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 mysql
3,进⼊MySQL shell界⾯
mysql -u root -p
注:先配置⼀下字符集,不然会导致中⽂乱码(因为mysql  character_set_server默认设置是latin1):
打开配置⽂件
sudo vi /etc/f.d/mysqldf
添加⼀⾏:
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,第⼀种:官⽹下载地址:www.anaconda/products/individual#Downloads
下载linux版,上传即可(我习惯⽤官⽹下载这种,看个⼈喜好)
2,第⼆种:sudo wget  mirrors.tuna.tsinghua.edu/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh(直接在linux命令⾏执⾏即可下载)2,解压anaconda压缩包
bash Anaconda3-5.3.1-Linux-x86_64.sh
3,解压过程中可能会遇到输⼊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/profile
6,测试是否安装成功
在命令⾏输⼊python即可看到
P ython 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 html
2,上传项⽬到html⽬录
rz
3,进⼊到项⽬根⽬录进⾏项⽬所需要模块的安装
#这⾥⽤上了⾖瓣镜像,速度⽐默认源要快
pip install -i pypi.douban/simple/ --trusted-host pypi.douban -
注:这个地⽅⽤到了,可能有⼈会纳闷这个⽂件哪⾥来的,怎么直接按照这个⽂件就
可以把项⽬需要的所有的模块安装上呢?
这个地⽅使⽤了⼀个第三⽅库,pipreqs:这个库的作⽤是⾃动去项⽬中项⽬依赖的那些模块,以及对应的版本。
⾸先我们在本地安装:
pip install pipreqs
进⼊项⽬根⽬录执⾏下⾯命令:
pipreqs ./ --encoding=utf-8 即可⽣成⽂件
然后打包项⽬上传,使⽤上边的⾖瓣源进⾏安装即可。
(⼆)配置nginx反向代理,和负载均衡
1,进⼊/etc/nginx/conf.d⽬录,创建⼀个*.conf⽂件:(这个也可以在/etc/nginx/sites-enabled/default下也可以配置,这两者都可以)
cd /etc/nginx/conf.d
f
2,在创建的f中配置以下信息
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 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,安装完就可以直接在源码⽬录执⾏

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。