【摘要】
最近开始部署python的web环境,说实话对于python的单一站点部署还是有经验的,毕竟带团队已经多年(吹一下NB)。那么问题来了,不同版本的python环境部署还是必须了解的。今天,终于解决了python不同版本的环境配置。进入正题,我采用virtualenv 进行python环境隔离,部署不同的版本。然后在Nginx上进行反向代理,实现pythonweb环境。
一、python 安装(版本2.7)
1.下载python
wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2
2.解压
tar -jxvf Python-2.7.3.tar.bz2
3.进入目录
cd Python-2.7.3
4.安装
#./configure
#make all
#make install
#make clean
#make distclean
5.查看版本信息
/usr/local/bin/python2.7 -V
建立软连接,使系统默认的 python指向 python2.7
#mv /usr/bin/python /usr/bin/python2.6.6
#ln -s /usr/local/bin/python2.7 /usr/bin/python
6.重新检验Python 版本
python -V
7.解决系统 Python 软链接指向 Python2.7 版本后,因为yum是不兼容 Python 2.7的,所以yum不能正常工作,我们需要指定 yum 的Python版本
vi /usr/bin/yum
将文件头部的
#!/usr/bin/python
改成
#!/usr/bin/python2.6.6
二、pip 和 django (1.5.6版本)安装
1.安装pip
curl https://bootstrap.pypa.io/get-pip.py | python
2.安装django
pip install django==1.5.6
三、安装uwsgi
pip install uwsgi #推荐熟悉使用 http://www.cnblogs.com/weiok/p/5719004.html
四、Nginx 安装
yun -y install nginx
五、virtualenv 安装及使用
1.virtualenv 安装及使用(参考下面的链接)
廖雪峰 virtualenv 安装及使用
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432712108300322c61f256c74803b43bfd65c6f8d0d0000
2.环境布局
第一步:在环境中 source /env/bin/activate 进入隔离环境中
############环境检测###############
python
import django #是否在环境内有django框架
django.VERSION #获取django的版本信息
django-admin.py startproject python_app #创建一个python 工程
#########启动django应用############
在 python_app的根目录创建一个 py.ini 文件(内容如下)这是 uwsgi的启动文件
[uwsgi]
master = true
vhost = true
workers = 2
reload-mercy = 10
vacuum = true
max-requests = 1000
limit-as = 256
chmod-socket = 666
socket = 127.0.0.1:9090
pidfile = /usr/local/nginx/python_app.pid
########启动uwsgi##########
uwsgi py.ini -d uwsgi.log
##########配置Nginx############
server {
listen 80;
server_name a.baidu.com;#请填写自己的域名
index index.html index.htm index.php;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
uwsgi_param UWSGI_PYHOME /python/venv_web/venv_new;
uwsgi_param UWSGI_SCRIPT wsgi;
uwsgi_param UWSGI_CHDIR /python/venv_web/python_app/python_app;
}
access_log /www/log/nginx/python.log;
}
注:在wsgi.py 文件里我做了如下修改
apache_configuration = os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
sys.path.append('/python/venv_web/python_app/python_app')
sys.path.append('/python/venv_web/python_app')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "python_app.settings")
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)
uwsgi 单项目配置
<uwsgi>
<socket>127.0.0.1:8000</socket>
<listen>20</listen>
<master>true</master>
<pidfile>/usr/local/nginx/uwsgi.pid</pidfile>
<processes>2</processes>
<module>wsgi</module>
<pythonpath>/python/web/website</pythonpath> #刚才建立项目的路径
<profiler>true</profiler>
<memory-report>true</memory-report>
<enable-threads>true</enable-threads>
<logdate>true</logdate>
<limit-as>6048</limit-as>
</uwsgi>
注:隔离环境与Nginx+uwsgi的部署问题
1:假如我部署的虚拟环境是python2.7,那么启动uwsgi.ini文件的时候,一定要保证 source shici/bin/activate (切换到虚拟环境shici里)
2:如果启动了Nginx和uwsgi,但是无法访问项目(报错502),那么一定是项目路径除了问题,你就到环境的lib/python2.7目录下创建一个和Nginx里配置的uwsgi-script 一样的文件 wsgi.py
3:如果访问报错调用的是你虚拟环境里的site-page,恭喜你虚拟环境配置成功
如有疑问加QQ 1397981667 备注 python 其他一概不加 文章来至www.codexueyuan.com的实践