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中使用Neo4j数据库的教程
Apr 16 Python
使用Python生成url短链接的方法
May 04 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
Python实现查找匹配项作处理后再替换回去的方法
Jun 10 Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 Python
python生成以及打开json、csv和txt文件的实例
Nov 16 Python
Python3实现定时任务的四种方式
Jun 03 Python
PyQt5显示GIF图片的方法
Jun 17 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
解决pytorch读取自制数据集出现过的问题
May 31 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
收音机术语解释
2021/03/01 无线电
php使用递归计算文件夹大小
2014/12/24 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
删除重复数据的算法
2006/11/23 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
实例讲解python中的协程
2018/10/08 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
师范院校学生自荐信范文
2013/12/27 职场文书
幼儿园消防安全制度
2014/01/26 职场文书
小学生环保演讲稿
2014/04/25 职场文书
表彰大会策划方案
2014/05/13 职场文书
分公司经理任命书
2014/06/05 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
优秀班组事迹材料
2014/12/24 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
民事纠纷协议书
2016/03/23 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript