Debian环境 Python + Pyramid + Nginx + uWSGI配置备忘
提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!
前面我写过一篇文章讲解如何在 Debian环境下配置Python + Django + Nginx + uWSGI + MySQL ,也是具有借鉴意义的,欢迎大家先阅读那篇文章。
nginx安装我就不介绍了,直接apt-get即可。
Python大部分Linux系统里应该预装了,我也不介绍安装了,基本上我们这里需要Python 2.7即可,通过命令
python --version
确认一下默认Python的版本号。
通过命令安装uwsgi:
sudo apt-get update
sudo apt-get install uwsgi uwsgi-plugin-python
注意这个uwsgi-plugin-python是必不可少了,否则uwsgi的log日志会提示 -- unavailable modifier requested: 0 -- 。
好了,下面我们介绍如何安装Pyramid,大家也可以参考Pyramid的官方文档 《Installing Pyramid》 ,我这里再简单的叙述下:
1. 检查setuptools是否已经安装,正常情况下如果setuptools已经安装了:
[chrism@thinko docs]$ python2.7
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import setuptools
>>>
如果setuptools没有安装,会提示
ImportError: No module named setutptools
错误:
[chrism@thinko docs]$ python2.7
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import setutptools
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named setutptools
>>>
如果不幸没有安装setuptools,那么对于Python2系列,我们可以通过下面的命令来安装:
wget http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
2. 有了setuptools后这一步就是安装virtualenv了:
sudo easy_install virtualenv
使用virtualenv的好处就是可以隔离各类Python项目的配置以及环境变量,这样各个项目可以互不干扰,整个系统也会更加稳定。
3. 使用virtualenv创建工作区(workspace):
virtualenv --no-site-packages pyramidproj
切换到名为pyramidproj的工作区:
cd pyramidproj
完成上步切换后,再使用工作区环境内的easy_install安装pyramid:
bin/easy_install pyramid
4. 创建一个带SQLAlchemy的项目:
cd pyramidproj
bin/pcreate -s alchemy project1
5. 启用开发模式,具体什么模式由你的需求而定:
cd project1
../bin/python setup.py develop
6. 初始化数据库,如果这个项目带有数据库的话,需要执行此步:
cd project1
../bin/initialize_project1_db development.ini # 开发模式配置文件
根据上述6步,Pyramid项目已经配置完成并可以使用了,如果有不明白的地方,可以看 Pyramid的官方示例 。
下面我将介绍如何将Pyramid、uWSGI以及Nginx连接起来,使他们能够协同工作。
1. 创建Pyramid的WSGI配置文件,这点和之前配置Django一致,也可以参考官方文档 《Running a Pyramid Application under mod_wsgi》 :
假设我们的Pyramid项目位于
/home/user/www/pyramidproj/project1
,egg cache位于
/home/user/.python-eggs/
,那么配置文件pyramid.wsgi可以这么写:
import os
os.environ['PYTHON_EGG_CACHE'] = '/home/user/.python-eggs/'
import sys
print sys.path
from pyramid.paster import get_app
application = get_app(
'/home/user/www/pyramidproj/project1/development.ini', 'main')
值得注意的是上面仍然使用了开发模式下的配置文件development.ini,这个视需求情况而定。将这个配置文件pyramid.wsgi存入项目路径下供下面uwsgi配置备用。
还有就是PYTHON_EGG_CACHE环境变量不指定的话,可能会 因为权限问题报如下错误 :
Can't extract file(s) to egg cache The following error occurred while trying to extract file(s) to the Python egg cache: [Errno 13] Permission denied: '/root/.python-eggs' The Python egg cache directory is currently set to: /root/.python-eggs Perhaps your account does not have write access to this directory? You can change the cache directory by setting the PYTHON_EGG_CACHE environment variable to point to an accessible directory.
2. 建立我们项目的uWSGI配置文件:
cat > /etc/uwsgi/apps-enabled/project1.ini << EOF
[uwsgi]
chmod-socket = 666
master = true
harakiri = 60
harakiri-verbose = true
limit-post = 65536
post-buffering = 8192
daemonize = /var/log/uwsgi.log
max-requests = 1000
reload-on-as = 128
reload-on-rss = 96
no-orphans = true
log-slow = true
virtualenv = /home/user/www/pyramidproj
wsgi-file = /home/user/www/pyramidproj/project1/pyramid.wsgi
EOF
# 重启uwsgi
invoke-rc.d uwsgi restart
3. 建立Nginx配置文件:
cat > /etc/nginx/sites-enabled/www << EOF
server {
listen 80;
access_log off;
error_log /var/log/nginx/http.error.log;
charset utf-8;
location / {
uwsgi_pass unix:///var/run/uwsgi/app/www/socket;
include uwsgi_params;
}
}
EOF
# 重新加载nginx配置
nginx -s reload
到这里配置算是全部结束了,如果不出意外你的Pyramid项目应该能够正常运行了,如果显示502 Bad Gateway,请检查/var/log/uwsgi/app下面的log信息。
参考文档: Pyramid + Nginx + uWSGI + MySQL 、 Getting Pyramid to work with uWSGI in a buildout environment
你的代码插件,效果不错。
用的是WP-Syntax这款插件:-)