使用python的flask做WEB开发已经有半个多月的时间了,磨磨唧唧滴做了一个WEB后台,到了服务器部署阶段,一个服务器部署折腾了我五个晚上,下面说说遇到的坑!
先说下部署环境:
1、centos 7系统
2、LNMP一键环境包
3、python的flask包,使用tornado独立 WSGI 容器
最大的坑!
网络:
centos的YUM源一定要换成国内的,不然在下载其他依赖组件有时会造成错误,下载失败整个环境的编译安装都会出错,这里分享一下centos 7 更换阿里云的YUM源方法(其实官方也有步骤教程)点击这里查看:centos更换国内本地YUM源方法(http://www.zongk.com/zongk/109.html)
第三方依赖包组件:
学习使用python以来都是用的python3版本,这次flask也是用的python3版本,所以centos自带的python2 满足不了,只能在编译安装一个python3,具体的centos7 编译安装python3步骤方法详见:centos7 下编译安装python3以及pip3方法(http://www.zongk.com/zongk/110.html)
OK!到这里,centos 7下的python3环境编译安装成功之后,开始安装LNMP的一键环境包,这里就不做介绍了,LNMP官方有详细的编译安装步骤教程。
以上的python3以及所需的flask,tornado,pymysql,服务器环境一键包LNMP都安装成功之后,下面进入实战配置操作:
flask程序与tornado这里也不做详细介绍,官方都有:
具体代码:
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from yourapplication import app #这里是引用flask的APP类
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(8989)#这里是flask程序使用的端口号
IOLoop.instance().start()
以上代码重新写一个文件start.py,运行flask要先运行start.py把flask程序跑起来,
下面是nginx配置:
配置直接用官方:
server {
listen 80;#监听80端口
server_name www.zongk.com;#这里是你的解析域名
access_log /var/log/nginx/access.log;#记录访问成功信息
error_log /var/log/nginx/error.log;#记录错误信息
location / {
proxy_pass http://127.0.0.1:8989/;
#意思是监听到www.zongk.com访问进来代理到本地的8989端口上即我们的运行flask端口,下面的三个header一定要带,不然访问一直都是跳转到flask程序的404页面如果你设置的话,没设置就是报404错误,我遇到的坑。
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
关于以上的三个header,我还不是很了解具体的工作原理,nginx说实话第一次配置,不是很了解。后面的$host 等几个类似PHP变量是什么意思?怎么理解,如果有了解nginx配置的可以在下面评论分享一下。
flask官方文档也说了:
----------------------------------------------------
如果你的 httpd 不提供这些标头,最常见的配置引用从 X-Forwarded-Host 设置的主机名和从 X-Forwarded-For 设置的远程地址:
from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
信任标头
请记住在一个非代理配置中使用这样一个中间件会是一个安全问题,因为它盲目地信任一个可能由恶意客户端伪造的标头。
如果你想从另一个标头重写标头,你可能会使用这样的一个修正程序:
class CustomProxyFix(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
host = environ.get('HTTP_X_FHOST', '')
if host:
environ['HTTP_HOST'] = host
return self.app(environ, start_response)
app.wsgi_app = CustomProxyFix(app.wsgi_app)
-----------------------------------------------------------
这里不是很了解,是在views.py里面设置么?什么意思?
上面nginx配置完成之后,重启一下nginx:
/etc/init.d/nginx restart
就可以直接使用解析域名访问了!体验一下吧!如果有问题可以在下面评论,或者我QQ:280161739交流分享
下面是自己写的运行后台截图(后期敬请期待):
来自Davids zhou博客原创文章请尊重作者:http://www.zongk.com/zongk/111.html转载请标注此链接
Davids zhou | 站点地图 | | | 皖ICP备14017762号 如有侵犯您权利点击上面QQ -Powered By 帝国CMS -davids.zhou#qq.com(#换@)
Davidszhou个人博客主要记录在网站建设、SEO优化、python开发、PHP开发中遇到问题记录保存,作为他人参考学习教程