WordPress Web.py uWSGI Nginx 集成配置
Python 目前在编程语言方面非常受欢迎,使用 Python 开发的各种应用覆盖面广,使用灵活方便。本篇文章将介绍一个方法可以在同一个域名(Domain)和 Nginx 服务的环境中集成WordPress(PHP)、Web.py(Python 框架)、Python 应用,其中Nginx 和 Web.py 的集成使用了 uWSGI 服务。
一、安装配置uWSGI
uSWGI 项目提供基于WSGI(Python Web Server Gateway Interface)协议的全栈服务,uSWGI 以 Plugin 的方式拓展对多平台和语言的支持,本篇文章介绍使用 Python 插件,更多关于该项目的信息,请参考官网的相关文档。
1、创建Python应用目录
$mkdir /home/user/www/webpy/app ## wordpress 位置可以在…/www/wordpress
$mkdir /home/user/www/webpy/logs
2、到官网下载源代码,然后编译安装uSWGI,命令如下:
$apt-get install python3-dev
$tar -xzvf uwsgi-2.0.20.tar.gz
$cd uwsgi-2.0.20
$python3 uwsgiconfig.py –build
$sudo python3 setup.py install ##安装服务到系统相关目录下
$PYTHON=python3.x ./uwsgi –build-plugin “plugins/python python3” ##编译python插件
# 完成后会生成一个库文件python3_plugin.so
$mv python3_plugin.so /home/user/www/webpy/app/ ##移动到上面建立好的应用目录中
3、配置uWSGI服务运行参数文件
$vi /home/user/www/webpy/app/uwsgi.xml
<uwsgi>
<uid>user</uid>
<gid>user</gid>
<plugin>python3</plugin>
<socket>/home/user/www/webpy/app/uwsgi.socket</socket>
<pythonpath>/home/user/www/webpy/app/</pythonpath>
<module>myuwsgiapp</module>
<master/>
<processes>4</processes>
<harakiri>60</harakiri>
<reload-mercy>8</reload-mercy>
<cpu-affinity>1</cpu-affinity>
<stats>/tmp/stats.socket</stats>
<max-requests>2000</max-requests>
<limit-as>512</limit-as>
<reload-on-as>256</reload-on-as>
<reload-on-rss>192</reload-on-rss>
<no-orphans/>
<vacuum/>
</uwsgi>
二、安装Web.py
参考官网的安装指南。这里使用Python组件的方式,命令如下:
$sudo pip3 install web.py
三、配置Nginx
在Nginx的原配置文件中加入uWSGI相关的访问配置信息。
location /uwsgi-test {
uwsgi_pass unix:///home/user/www/webpy/app/uwsgi.socket;
include uwsgi_params;
uwsgi_param UWSGI_SCHEME $scheme;
uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
access_log /home/user/www/webpy/logs/access.log;
error_log /home/user/www/webpy/logs/error.log;
}
四、创建Python应用
$vi /home/user/www/webpy/app/myuwsgiapp.py
import os
import sys
sys.path.append('/home/user/www/webpy/app')
os.environ['PYTHON_EGG_CACHE'] = '/home/user/www/webpy/.python-egg'
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.encode('utf-8')]
或者使用web.py的web模块的方式,编辑myuwsgiapp.py。
import os
import sys
import web
sys.path.append('/home/user/www/webpy/app')
os.environ['PYTHON_EGG_CACHE'] = '/work/www/webpy/.python-egg'
urls = (
'/uwsgi-test', 'index'
)
app = web.application(urls, globals())
class index:
def GET(self):
return "Hello, world!"
if __name__ == "__main__": app.run()
application = app.wsgifunc()
五、启动服务,运行Python应用
$uwsgi uwsgi.xml
### 或者后台运行 ###
$nohup uwsgi uwsgi.xml > logs/uwsgi.log 2>&1 &
#nginx -s stop
#nginx
如果希望某个 Python 代码文件修改后,uWSGI 主进程自动重启,同时uWSGI的输出重定向到一个文件中,可以使用下面的命令。
$nohup uwsgi –touch-reload=./myuwsgiapp.py uwsgi.xml > logs/uwsgi.log 2>&1 &
代码修改后,输入下面的命令,uWSGI服务会自动重启。
$touch myuwsgiapp.py
打开浏览器输入 localhost/uwsgi-test,就可以看到“Hello World!”了。