ubuntu 安装flask+nginx+gunicorn 待定

第一步

先检查服务器环境   pip python3 mysql redis 能下就下,该升级就升级

第二步

如果你的flask程序在github上 请使用git clone 地址 下载下来(如果是私人的则需要账号和密码,最近在学git 都给我搞复杂了)

总之想办法把文flask程序下载到服务器上

第三步

安装虚拟环境 virtualenv   同样使用pip install virtualenv

创建一个文件夹

mkdir py3 (名字随意) 

cd 进入该文件

cd py3

使用virtualenv 创建一个虚拟环境 

virtualenv -p python env(虚拟环境名字  同时指定python为3版本 ubuntu上如果不设置很可能默认为p2版本)

 

source /你创建的文件夹/bin/activate  回车 进入虚拟环境中

(退出则是   deactivate  命令)

 

第四步

已经进入虚拟环境中 进入使用git clone 下载的文件夹中(我默认你还是用pip freeze 打包依赖文件了)

pip install -r reqxxxxx.txt

安装运行这个flask的包

检查flask的配置信息,比如redis数据库地址,mysql地址,(我没有在ubuntu的系统变量中设置配置,都是明文写在代码中的)

如果使用了flask_script和flask_migrate 插件 

那么建立数据库(migrate只能帮助建立表,不能建库) 

python flask入口文件 db init

python  flask入口文件 db migrate

python  flask入口文件 db upgrade

第五步

使用gunicorn 开启多线程运行

注意 如果入口文件  在开发中你是使用flask_script 来进行操作flask程序的,上传至服务器时并没有去除,请选择去除,使用工厂模式中 app = create_app() 得到一个能使用gunicorn启动的服务

manage.py
from
app import create_app from flask_script import Manager from flask_migrate import MigrateCommand app = create_app() if __name__ == '__main__': app.run() #manage = Manager(app=create_app()) #manage.add_command('db',MigrateCommand) #if __name__ == '__main__': # manage.run() ~

不让很可能出现                      xxx gunicorn 只能使用一个参数 不能使用 2个参数 这样的提示

启动的命令

测试
gunicorn -w 4 -b 0.0.0.0:5001 manage:app

如果需要后台进行挂起 使用守护进程后台挂起 杀掉进程则使用 ps -efl |grep gunicorn 查询进程号码 kill -9 xxxx 终止进程
gunicorn -w 4 -D -b 0.0.0.0:5001 manage:app

以上命令的意思是

gunicorn 使用-w 开启4个进程  -b 则是我指定端口 0.0.0.0:5001  让他人都能在你这服务器公网ip:5001 访问到这个flaskweb程序  manage 则是启动入口文件的名字 注意不要到后缀 app则是flask的实例

有可能启动时出现 不断重试四五次进程显示失败,属于端口被占用了,杀掉占用的端口kill -9 xxx   或者换一个

除了这个还有一个进行启动的方法,通过配置文件启动

gunicorn -c 配置文件 文件名:app实例

设置配置文件 之后以这种方式启动  不过貌似有些参数和spuervisor 有关 先进行一个 注释

# gunicorn.conf

# 并行工作进程数
workers = 4
# 指定每个工作者的线程数
threads = 2
# 监听内网端口5000
bind = '0.0.0.0:5000'
# 设置守护进程,将进程交给supervisor管理
daemon = 'false'
# 工作模式协程
worker_class = 'gevent'   # 这个注释掉   
# 设置最大并发量
worker_connections = 2000
# 设置进程文件目录
pidfile = '/var/run/gunicorn.pid'
# 设置访问日志和错误信息日志路径
accesslog = '/var/log/gunicorn_acess.log'
errorlog = '/var/log/gunicorn_error.log'
# 设置日志记录水平
loglevel = 'warning'

目前简单测试了一下,使用多线程500个爬虫访问这个flask程序   (腾讯云的10元1核2g内存的服务器,由于是想写api,所以也没有啥静态文件),

并简单的每次写入10个字符的log记录到mysql中,测试平均值 大概在4.35s 左右  (并不严谨)

4.389250993728638

4.4822564125061035

4.46025538444519

4.415252685546875

4.415252447128296

4.60326361656189

这是简单写入测试 ,但是又有问题来了 如果我有写入也有返回数据呢?

于是在flask识图函数中选择          str(os.urandm(500))  生成500个字符串 用jsonify json格式返回 

出现了问题,只要超过500个线程的爬虫,发送到499 就会停止不动,但是数据库中添加的数据也都有添加了 但就是在499卡住了

难道是mysql链接数量限制? 也不对啊  爬虫发送数据出去 返回都是200 也不光sql的问题啊?

这个待定解决

不过经过time包 可以确定发送500次数据 并接收数据返回500个字符的数据 需要的时间大概在12.5s左右的平均值

 但是如果返回 只有20个字符 由os.urandom(20) 来生成 则平均值 4.4 左右 

4.419252634048462

4.472255706787109

4.437253952026367

 可能是由于os.urandom 生成字符串需要的时间比较耗费资源,返回速度比较慢,同样复制一个固定值500字符串进行一个返回 得到的结果和 为 平均值 4.5

4.7312705516815186

4.669267177581787

4.546260118484497  
4.408251762390137


 服务器占用cpu 如果是这种请求一直保存在 76 的cpu占比

如果进入尾声占比 33                       

无人访问 占比5


之后的反向代理nginx 和 监管服务 supervisor   设置 等我学会了再说 待定 

猜你喜欢

转载自www.cnblogs.com/zengxm/p/11241802.html