安装带 Python 支持的 uWSGI
http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html 这个快速入门指南将会向你展示如何部署简单的 WSGI 应用和普通 web 框架。 Python 在这里特指 CPython,如果你想用 PyPy 你需要使用专门的插件:,Jython 的支持正在开发中。 安装带 Python 支持的 uWSGI
uWSGI 是一个(巨大的) C 应用,所以你需要一个 C 编译器(比如 gcc 或者 clang)和 Python 开发版头文件。 在 Debian 系的发行版上一条 apt-get install build-essential python-dev命令就够了。 你有多种方式来安装 uWSGI 的 Python 包:
通过你的发行版的包管理器安装是不能面面俱到的(不可能让所有人都开心),但是一般的规则都适用。 当你使用发行版提供的包来测试这个快速入门的时候,一件你可能想重视的事情就是很有可能 你的发行版是用模块化的方式构建的(每个特性都是一个不同的必须被加载的插件)。 为了完成这个快速入门,你必须在前面第一个例子的前面加上 让我们从一个简单的 “Hello World” 例子开始吧(这是在 Python 2.x 中,Python 3.x 需要 返回字节字符串,看下面): (保存为 正如你看到的,它由一个单独的 Python 函数组成。它的名字是 “application”,这是 默认的函数名,uWSGI 的 Python 加载器将会搜索这个名字(但你当然可以修改它)。 Python 3.x 版本如下: 把它部署到 HTTP 端口 9090现在运行 uWSGI 来启动一个会把请求传递给你的 WSGI 应用的 HTTP 服务器/路由器。 uwsgi --http :9090 --wsgi-file foobar.py这就是全部了。 添加并发和监控 你想做的第一件事可能就是增加并发(uWSGI 默认启动一个单独的进程和一个单独的线程)。 你可以通过 这将会产生 4 个进程(每个进程 2 个线程),一个主进程(当你的进程死掉时会重新 spawn 一个新的)以及 HTTP 路由器(见前面)。 一个重要的任何就是监控。知道发生了什么在生产环境中是极其重要的。stats 子系统允许你 用 JSON 输出 uWSGI 的内部数据: uwsgi --http :9090 --wsgi-file foobar.py --master --processes向你的应用发送几个请求然后 telnet 到 9191 端口,你将得到大量有趣的信息。你可能想要使用 “uwsgitop” (使用 放到一个完整的 web 服务器后 即使 uWSGI HTTP 路由器(router)是一个可靠的高性能服务器,你可能还是想把你的应用放到一完整的 web 服务器后。 uWSGI 通常和 HTTP,FastCGI,SCGI 以及它自己特有的协议 “uwsgi” (呃,名字不应该这么取的) 通信。 性能最高的协议显然是 uwsgi,并且早已被 nginx 和 Cherokee 支持 (同时 Apache 也有许多可用的模块)。 一个普通的 nginx 配置如下: 这个意思是说 “把每个请求传递到服务器绑定的端口 3031,并且使用 uwsgi 协议通信”。 现在我们可以 spawn 一个 uWSGI 进程来天然地以 uwsgi 协议通信: uwsgi --socket如果你运行 如果你的代理/web 服务器/路由器使用 HTTP 协议,你必须告诉 uWSGI 使用 HTTP 协议(这与通过 –http spawn 一个它自己的代理是不一样的): uwsgi --http-socket 开机自启动 uWSGI如果你打算打开 vi 写一个 init.d 脚本来启动 uWSGI,坐下来冷静一下然后先确保 你的系统没有提供一个更好(更现代化)的方式。 没一个发行版会选择一个启动系统 (,...),除此之外也有许多 进程管理工具(supervisord,god,monit,circus...)。 uWSGI 与上面列出的那些工具都集成得很好(我们希望如此),但是如果你想部署大量应用的话, 看看 uWSGI 的- 它或多或少是每个开发运维工程师的梦想。 部署 DjangoDjango 可能是使用得最多的 Python web 框架了。部署它非常简单(我们仍然使用 4 个进程,2 个线程的配置)。 假定你的 Django 项目在 (通过 啊!这是什么鬼?!是的,你是对的,你是对的。。。处理这么长的命令行是不实际的,又蠢又容易出错。 不要怕! uWSGI 提供多种配置风格。在这个快速入门里我们将使用 .ini 文件。 更好一点了! 尽管运行它: uwsgi yourfile.ini如果 或者,使用 .ini 文件: 老版(1.4 以下)的 Django 发行版需要设置 Flask 是一个流行的 Python web 微框架。 保存下面这个例子到 <span class="nd">@app.route<span class="p">(<span class="s1">'/'<span class="p">) Flask 把它的 WSGI 函数(就是我们在之前快速入门里称作 “application” 即应用的东西)暴露成 “app”,所以 我们需要告诉 uWSGI 去使用它。 我们仍然使用 4 个进程/2 个线程,以及 uwsgi socket : uwsgi --socket(唯一增加的选项便是 又是一个流行的选择。你可以选择把 web2py 的发行版源代码解压到一个目录然后写一个 uWSGI 配置文件: script out of the 我们再次使用 HTTP 路由器(router)。用你的浏览器访问 9090 端口然后你就可以看到 web2py 的欢迎页面了。 点击管理页面然后...哎呀,它需要 HTTPS。不要担心,uWSGI 路由器(router)可支持 HTTPS (确保你 有 OpenSSL 开发版的头文件:安装它们然后重新构建 uWSGI,build 系统会自动检测到它)。 First of all generate your key and certificate: 首先生成你的秘钥(key)和证书(certificate): openssl genrsa -out foobar.key现在你有两个文件(算上 重新运行 uWSGI 然后使用 如果你没有使用线程启动 uWSGI,Python 的 GIL 将不会被开启,所以你的应用产生的线程 将永远不会运行。你可能不会喜欢这个选择,但是记住 uWSGI 是一个语言无关的服务器,所以它的 大部分选择都是尽可能维持它 “agnostic”。 但是不用担心,基本上不存在不能通过选项来改变的由 uWSGI 开发者决定的选项。 如果你想维持 Python 的线程支持同时应用又不启动多个线程,只需要加上 uWSGI 可以被配置成在某个特定的 virtualenv 中搜索 Python 模块。 只要添加 永远不要使用 root 来运行 uWSGI 实例。你可以用 (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |