使用 apache2 + mod_proxy_uwsgi + uwsgi + upstart 部署

网上运行 python wsgi 的应用时,大部分的资料都是使用 nginx 、uwsgi ,很少资料提及到 apache2 下如何进行处理。但是平时的部署环境其实很难跳过 apache2 ,很多环境已经带 apache2 ,不好另外安装一个 nginx ,因此,经过一番测试后,建议使用 apache2 + mode_proxy_uwsgi + uwsgi + upstart/systemd 的配置。整个配置并不复杂,请按照具体的步骤逐个处理。

以下的安装步骤是在 ubuntu 14.04 和 python3 中完成的。

安装依赖

安装 flask 和 uwsgi ::

pip3 install flask
pip3 install uwsgi

应用编写

首先,编写一个简单应用用于测试,可以使用 flask 或 django ,如果对 wsgi 熟悉,也可以直接使用 wsgi。这里是一个 flask 的示例 /var/www/test_app.py::

import flask
application = flask.Flask(__name__) @application.route('/')
def index():
return 'Hello, world!' if __name__ == '__main__':
application.run()

然后,做个简单的测试,启动服务器 ::

python3 /var/www/test_app.py

打开一个新的终端,用 curl 请求 ::

curl -v http://127.0.0.1:5000

可看到输出为 Hello, world!

uwsgi 配置

uwsgi 的运行方式有多种,这里只用命令行参数的方式运行,并写入到 upstart 中自动启动 /etc/init/uwsgi-test.conf ::

description     "uwsgi test"

start on runlevel [2345]
stop on runlevel [!2345] env LC_ALL=zh_CN.UTF-8
env LANG=zh_CN.UTF-8
env PYTHONIOENCODING=utf-8 exec uwsgi --socket 127.0.0.1:5000 --master --workers 2 --wsgi-file /var/www/test_app.py

为了能正确地处理 utf-8 编码的内容和日志输出,env 部分不能少。在 uwsgi 的配置可放到 ini 格式的配置文件中,并可指定一个 virtualenv 环境,防止破坏了主机的 python 环境,更多的配置选项见 http://uwsgi-docs.readthedocs.io/en/latest/

然后启动 uwsgi ::

start uwsgi-test

安装和配置 apache2

在 ubuntu 中,安装 apache2 和相关的工具 ::

apt-get install apache2 apache2-utils libapache2-mod-proxy-uwsgi

启用 mod_proxy_uwsgi ::

a2enmod proxy
a2enmod proxy_uwsgi

注意,必须同时启用 proxy 模块,否则 apache2 会报错,错误信息为 ::

Cannot load /usr/lib/apache2/modules/mod_proxy_uwsgi.so into
server: /usr/lib/apache2/modules/mod_proxy_uwsgi.so:
undefined symbol: ap_proxy_backend_broke。

编写一个配置文件 test.conf 放在 /etc/apache2/conf-available ::

ProxyPass /test uwsgi://127.0.0.1:5000

启用配置文件

a2enconf test

并重启 apache2 ::

service apache2 restart

现在用 curl 测试一下 ::

curl -v http://127.0.0.1/test

可看到输出为 Hello, world!

至此,全部工作已完成。

使用 apache2 + `mod_proxy_uwsgi` + uwsgi + upstart 部署的更多相关文章

  1. Nginx+uWSGI+Django部署web服务器

    目录 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py ...

  2. 使用uWSGI+nginx部署Django项目

    最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...

  3. vue+uwsgi+nginx部署路飞学城

    vue+uwsgi+nginx部署路飞学城   有一天,老男孩的苑日天给我发来了两个神秘代码,听说是和mjj的结晶 超哥将这两个代码,放到了一个网站上,大家可以自行下载 路飞学城django代码 ht ...

  4. linux vue uwsgi nginx 部署路飞学城 安装 vue

    vue+uwsgi+nginx部署路飞学城 有一天,老男孩的苑日天给我发来了两个神秘代码,听说是和mjj的结晶 超哥将这两个代码,放到了一个网站上,大家可以自行下载 路飞学城django代码#这个代码 ...

  5. 使用Flask+uwsgi+Nginx部署Flask正式环境

    环境准备 在开始正式讲解之前,我们将首先进行环境准备. Step1:安装Python,pip以及nginx: sudo apt-get update sudo apt-get install pyth ...

  6. nginx+uwsgi+django部署流程

    当我们在用django开发的web项目时,开发测试过程中用到的是django自带的测试服务器,由于其安全及稳定等性能方面的局限性,django官方并不建议将测试服务器用在实际生产. nginx+uws ...

  7. ngnix+uwsgi+django 部署mezzanine

    以下是我用ngnix+uwsgi+django 部署mezzanine全过程,其中ngnix+uwsgi这块是看了虫师大神的博客(http://www.cnblogs.com/fnng/p/52686 ...

  8. virtualvenv+django+uWSGI+nginx 部署

    原创博文 转载请注明出处! 1. virtualvenv 2. django 3. uWSGI 4. nginx 5. 踩坑记录 1. virtualvenv virtualvenv install ...

  9. django+uwsgi+nginx部署(非常详细)

    django+uwsgi+nginx部署 1.介绍: 在网上看了很多教程,但自己部署了很久都没有成功,这篇博文记录自己所踩过得坑. 2.环境: Ubuntu 16.04.1 LTS (GNU/Linu ...

随机推荐

  1. Web开发基本准则-55实录-缓存策略

    续上篇<Web开发基本准则-55实录-Web访问安全>. Web开发基本准则-55实录-缓存策略 郑昀 创建于2013年2月 郑昀 最后更新于2013年10月26日 提纲: Web访问安全 ...

  2. 理解callback function in javascript

    以下内容主要摘自[1,2] (1)In javascript, functions are first-class objects, which means functions can be used ...

  3. js无参数对象

    <script type="text/javascript"> var o={ a : function(){ for (var i = arguments.lengt ...

  4. 2016-2017 ACM-ICPC, NEERC, Moscow Subregional Contest

    A. Altitude 从小到大加入每个数,用set查找前驱和后继即可. 时间复杂度$O(n\log n)$. #include <bits/stdc++.h> using namespa ...

  5. Struts2 整合Spring(Maven,注解版)

    这两天正在试验Struts2与Spring框架的整合,和他们各自的“注解”.今天就总结一下这两个框架怎么用注解进行整合. 一,加入两者的依赖包,除了两者的必要依赖外,还需要导入struts2-spri ...

  6. JVM内存区域异常分析

    在Java虚拟机规范描述中,除程序计数器外,其他几个运行时区域都有可能发生OutOfMemoryError异常.接下来将对各区域分别进行分析介绍,内容包括触发各区域OutOfMemoryError异常 ...

  7. Unity3D "Library\UnityAssemblies\UnityEngine.xml" is denied错误解决方法

    错误信息 Access to the path "Library\UnityAssemblies\UnityEngine.xml" is denied 无法修改改文件 Unity版 ...

  8. EasyTouch绑定事件在电脑上点击有效Android上无效的解决方法

    最近做一个RPG类的游戏发现使用EasyTouch虚拟摇杆插件在电脑上点击有效Android上无效,查找资料发现是Easy Joystick中的一个属性interaction type要设置成 Dir ...

  9. VerifyCodeUtil.java

    package com.vcredit.framework.utils; import java.awt.Color;import java.awt.Font;import java.awt.Grap ...

  10. ES6(二)解构赋值详解

    详解一下之前的解构赋值 ①解构赋值中的"..." let [a,...b]= [1]; b // [] ...代表变量b去匹配剩余的所有元素返回一个数组 ,匹配不到时返回[] // ...