Python WEB应用部署的实现方法


Posted in Python onJanuary 02, 2019

本文介绍了Python WEB应用部署的实现方法,分享给大家,具体如下:

Python WEB应用部署的实现方法Python WEB应用部署的实现方法

使用Apache模块mod_wsgi运行Python WSGI应用

Flask应用是基于WSGI规范的,所以它可以运行在任何一个支持WSGI协议的Web应用服务器中,最常用的就是 Apache+mod_wsgi 的方式

Apache主配置文件是/etc/httpd/conf/httpd.conf

其他配置文件存储在/etc/httpd/conf.d/目录

安装mod_wsgi

安装httpd-devel

$ yum install httpd-devel
$ rpm -ql httpd-devel

安装mod__wsgi

$ yum install mod_wsgi

安装完成之后, mod_wsgi.so 会在Apache的modules目录中

httpd.conf 文件中添加以下内容

LoadModule wsgi_module modules/mod_wsgi.so

重启Apache来启用配置

$ sudo service httpd restart

测试mod_wsgi

在Apache的DocumentRoot根目录下创建一个文件 test.wsgi

def application(environ, start_response):
 status = '200 OK'
 output = 'Hello World!'

 response_headers = [('Content-type', 'text/plain'),
      ('Content-Length', str(len(output)))]
 start_response(status, response_headers)

 return [output]

这里的函数 application 即为WSGI应用对象,它返回的值就是该应用收到请求后的响应。

然后,再打开Apache的配置文件httpd.conf,在其最后加上URL路径映射:

WSGIScriptAlias /test /var/www/html/test.wsgi

测试 curl http://localhost/test

Python WEB应用部署的实现方法

使用Python虚拟环境

virtualenv 是一个创建隔绝的Python环境的工具。virtualenv创建一个包含所有必要的可执行文件以及 pip 库的文件夹,用来使用Python工程所需的包。

配置app.wsgi

activate_this = '/var/www/html/py3env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

from flask import Flask
application = Flask(__name__)

import sys
sys.path.insert(0, '/var/www/flask_test')
from app import app as application

我们的虚拟环境在目录 /var/www/html 下,你可以在其 /bin 子目录中找到启用脚本 activate_this.py 。在WSGI应用的一开始执行它即可。

apache配置文件

<VirtualHost *:80>
 ServerName example.com
 WSGIScriptAlias / /var/www/html/app.wsgi
 <Directory /var/www/html>
  Require all granted
 </Directory>
</VirtualHost>!

参考

使用Nginx+uWSGI运行Python WSGI应用

uWSGI是一个Web应用服务器,它具有应用服务器,代理,进程管理及应用监控等功能。虽然uWSGI本身就可以直接用来当Web服务器,但一般建议将其作为应用服务器配合Nginx一起使用,这样可以更好的发挥Nginx在Web端的强大功能。

安装uWSGI

$ pip install uwsgi

创建 server.py

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
 return 'Hello World!'


if __name__ == '__main__':
 app.run()

创建 uwsgi 配置文件 uwsgi.ini

[uwsgi]
http=0.0.0.0:8080 #指定项目执行的端口号 
chdir=/var/www/html/# 项目目录
wsgi-file=/var/www/html/server.py # 项目启动文件目录
callable=app #指定应用对象,WSGI标准是"application"
master=true #主进程(监控其他进程状态,如果有进程死了,则重启)
touch-reload=/var/www/html/ #监听的文件路径,当要监听的文件路径下的文件发生变化的时候自动重新加载服务器。
daemonize=uwsgi.log #日志文件
stats = 127.0.0.1:9090 #在指定的地址上,开启状态服务
vacuum = True # 当服务器退出的时候自动清理环境,
# 多进程&多线程
processes = 6
threads = 2

启动

uwsgi --ini uwsgi.ini    # 启动
uwsgi --reload uwsgi.pid   # 重启
uwsgi --stop uwsgi.pid   # 关闭

Python WEB应用部署的实现方法

配置Nginx

将uWSGI的HTTP端口监听改为socket端口监听

socket=127.0.0.1:8080

修改nginx配置文件nginx.conf

server {
  listen  80;
  server_name localhost 192.168.1.5;
  #root   /usr/share/nginx/html;

  # Load configuration files for the default server block.
  include /etc/nginx/default.d/*.conf;

  location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8080;
  }

Nginx会将收到的所有请求都转发到 127.0.0.1:8080 端口上,即uWSGI服务器上。

这里有一个坑,由于Centos7 SElinux导致的权限问题,Nginx无法将请求转发到uWSGI,我直接把它关掉了。

vi /etc/selinux/config

SELINUX=enforcing 改成 SELINUX=disabled

重启nginx测试。

Python WEB应用部署的实现方法 

使用Python虚拟环境

[uwsgi]
...
virtualenv=/home/Smi1e/virtualenv

部署多个应用

Python WEB应用部署的实现方法

参考

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python写的贪吃蛇游戏例子
Jun 16 Python
探究数组排序提升Python程序的循环的运行效率的原因
Apr 01 Python
基于wxpython实现的windows GUI程序实例
May 30 Python
学习python之编写简单简单连接数据库并执行查询操作
Feb 27 Python
Python中json格式数据的编码与解码方法详解
Jul 01 Python
python3中str(字符串)的使用教程
Mar 23 Python
django+mysql的使用示例
Nov 23 Python
对Python实现累加函数的方法详解
Jan 23 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
Mar 20 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
利用pyecharts读取csv并进行数据统计可视化的实现
Apr 17 Python
python爬虫使用正则爬取网站的实现
Aug 03 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 #Python
详解如何在Apache中运行Python WSGI应用
Jan 02 #Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 #Python
对Python发送带header的http请求方法详解
Jan 02 #Python
Django渲染Markdown文章目录的方法示例
Jan 02 #Python
使用python 打开文件并做匹配处理的实例
Jan 02 #Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 #Python
You might like
日本十大惊悚动漫
2020/03/04 日漫
php后退一页表单内容保存实现方法
2012/06/17 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
jQuery过滤选择器用法分析
2015/02/10 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
Python hexstring-list-str之间的转换方法
2019/06/12 Python
使用Python的turtle模块画国旗
2019/09/24 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
python集合能干吗
2020/07/19 Python
如何通过python计算圆周率PI
2020/11/11 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
技术岗位竞聘演讲稿
2014/05/16 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
法定代表人资格证明书
2015/06/18 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python
Python实现双向链表基本操作
2022/05/25 Python