Gunicorn启动flask项目
Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server。
和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点
废话不多说,直接上干货!!!!
1.创建虚拟机--->自行百度,一大推
2.我这里用的centos7迷你版镜像,这个无所谓
3.干净的虚拟机无法使用wget,需要我们配置yum源!!!这个重点!!!!!
yum国内仓库环境的搭建 yum源的仓库路径在/etc/yum.repos.d/然后这个目录底下,只有 以 .repo结尾的文件,才会被识别为yum仓库 1.在/etc/yum.repos.d/目录底下,定制我们自己的repo仓库文件 2.我们自己没有yum仓库,我们就去拿阿里巴巴的yum仓库 3.https://opsx.alibaba.com/mirror 这就是阿里巴巴的镜像站 4.下载阿里巴巴的yum仓库文件 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget下载文件后,-O参数,指定放到某个目录,且改名 5.清除yum缓存 yum clean all 6.生成新的阿里云的yum软件缓存 yum makecache
4.yum源现在已经配置完成,开始下载python!
python环境的搭建 1.切换到我们的opt目录下,opt我们存放我们的第三方的软件 cd /opt 2.直接输入命令进行下载python源码 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz 3.这里需要说一下记住!python3的依赖包,我们必须先下载好依赖包,否则后期会出现一些问题 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y 4.解压源码 tar -xvf Pthon3.6.2.tgz 5.切换源码包目录 cd Python-3.6.2.tgz 6.进行编译安装 释放编译的文件makefile:./configure --prefix=/opt/python36/ #--prefix 指定软件的安装路径 7。开始编译python3 make 8.编译和安装(这一步完成之后才会出现/opt/python36) make install 9.配置环境的变量 echo $PATH(查看环境变量) #/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 10.变量的赋值 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/python36/bin 11.linux有一个全局个人配置文件(/etc/profile) vim /etc/profile 写入:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/python36/bin 12.读取文件让她生效 source /etc/profile 13.测试能否进行运行 13.1安装django pip3 install django 13.2建django项目 django-admin startproject mysite 13.3建django应用 django-admin startapp app01 13.4编写视图函数 13.5注意修改setting.py的allow_hosts文件[]里加上"*" 14.启动django项目 python3 manage.py runserver 0.0.0.0:8000 15.需要说明一下的是当我们在网上访问的时候注意不要是0.0.0.0这个ip,应该是我们虚拟机的ip+8000端口号 ,还有就是如果访问不了记得看一下防火墙是不是关闭 查看防火墙:iptables -L 关闭防火墙:systemctl stop firewalld
5.这里我使用的虚拟环境--->virtualenvwrapper,我就直接上我这个得环境安装了
virtualenvwrapper虚拟环境管理工具(就是管理虚拟环境的工具) 1.前提:必须是在物理解释器下(不是其中的一个虚拟环境) pip3 install virtualenvwrapper 2.注意:path的配置,需要将物理解释器的python,放在path最前面(查找有顺序) [root@localhost ~]# echo $PATH vim /etc/profile/(总得环境配置文件) #/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin 3.编辑用户家目录的.bashrc文件(用户登陆的时候就会读取这个文件) 3.1进入用户的家目录:vim ~/.bashrc 3.2添加字符串: export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的参数,生成干净隔绝的环境 export VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3 #指定python解释器 source /opt/python34/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本,这个是virtualenvwrapper.sh的安装路径(查看安装路径:which virtualenvwrapper.sh) 3.3 :x (相当于:wx!) 3.4 退出:logout 3.5重新登录:ssh ... 4.如果正确则会使用virtualenvwrapper工具 5.mkvirtualenv li (创建li的虚拟环境且激活虚拟环境) 6.workon li (切换li的虚拟环境) 7.deactivate (退出虚拟环境) 9.cdvirttualenv(进入当前激活的虚拟环境所在的目录(这里建我们的项目app)) 10.cdsitepackages (进入当前激活的虚拟环境的,python包的目录(下载第三方软件包)) 8.rmvirtualenv li(删除li的虚拟环境)
PS:这里说一下使用ssl连接虚拟机的时候可能查不到虚拟机的ip,这个看我之前的随笔里边有记载
6.现在为止我们这个大的环境也就是算是安装完成了,现在开始启动Flask项目
6.1,创建虚拟环境
mkvirtualenv li
6.2 进入虚拟环境
workon li
6.3安装Gunicorn
pip3 install gnicorn
6.4查看centos防火墙的状态以及关闭防火墙
systemctl status firewalld #查看防火墙状态 systemctl stop firewalld #关闭防火墙 systemctl disable firewalld#关闭防火墙开机启动 systemctl is-enabled firewalld.service#检查防火墙是否启动
6.5 这里我直接用命令启动项目
gunicorn -w 3 -b 192.168.38.128:5000 app:app # w:工作进程的数量,为正整数 b:ADDRESS,ip加端口,绑定运行的主机 app:app.py文件 app:程序
6.6 这里说一下哈,centos只开放22端口,开放其他端口需要我们自己去设置,一下是命令
firewall-cmd --zone=public --add-port=80/tcp --permanent # --zone:作用域 –add-port=80/tcp #添加端口,格式为:端口/通讯协议 –permanent #永久生效,没有此参数重启后失效
6.7为了确保端口已开启,建议查看一下
firewall-cmd --list-ports
现在大功告成,有一些坑,这里归拢一下
1.yum源配置之后下载服务会报错,不管是update还是啥的都不管用,都是报这个错:No such file or directory: '/var/cache/yum/x86_64/7/_loca,经过我日思夜想深思熟虑抽完烟之后,我觉得这个错我看不懂,然后只要我看不懂的都rm -rf 就完事了,然后别忘记yum makecache 一下
2.Gunicorn启动项目的时候,可能在windows测试每一问题的代码在centos上会有问题,运行的时候回报错,但是Gunicorn这玩意报错太笼统,根本不知道错误地方在哪里,这个时候就需要在启动命令里加一个参数,打印具体错误:gunicorn -w 3 -b 192.168.38.128:5000 app:app -preload
3应该还会有一些人还是分不开启动项目命令中的app:app,不要着急,我这里直接给你图你就明白了
原文地址:https://www.cnblogs.com/lzqrkn/p/11765108.html
- Golang测试技术
- 安装Python时遇到如下问题,解决方案
- spring使用Email邮件系统
- discuz论坛apache日志hadoop大数据分析项目:清洗数据核心功能解说及代码实现
- mybatis 对于基本类型数据传值的问题
- Guava------------Cache使用方法
- hadoop安装及配置入门篇
- 剖析Go编写的Socket服务器模块解耦及基础模块的设计
- hihocoder-平衡树·SBT
- mysql 查询数据库表结构
- Go语言基于Socket编写服务器端与客户端通信的实例
- 前端游戏编程基础-如何实现Canvas图像的拖拽、点击等操作
- 使用Go开发一个简单的服务器程序
- Golang URL解析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Vivado IP核锁定的解除方法
- Flutter Dojo设计之道——骚气的闪屏动画是如何实现的
- 数据处理 | pandas入门专题——离散化与one-hot
- 聊聊dubbo-go的failfastCluster
- 一分钟学Python|Python的循环语句
- OpenCV4.4 中SIFT特征匹配调用演示
- 这些Python库虽然冷门,但功能真的很强大!
- SQL查找是否"存在",别再count了,很耗费时间的
- 采用 Vue 编写的功能强大的 Swagger-ui 页面
- SQL 计算中位数
- SQL 打印成绩单
- TypeScript 快速入门
- ES的新特性
- PHP设计模式|观察者模式
- JavaScript 中 this 的错误认识、绑定规则、常见问题讲解