鉴于曾经观战过大神配置“nginx+php-fpm+php CI”环境的搭建过程,虽确未上手实践过,但大体流程还是晓得的。Python,作为一门脚本语言,众所周知其在数据分析领域确实炙手可热,但若使用于Web开发时,就万变不离其宗了:nginx【http守护进程】——>uwsgi【Web服务器,http://shenwang.blog.ustc.edu.cn/nginx%E5%92%8Cuwsgi%E9%80%9A%E4%BF%A1%E6%9C%BA%E5%88%B6/】——>django【开源的Web应用框架】;
那,我们切入正题啦~~
1. 安装Python
$ brew install python
2. 安装virtualenv
关于virtualenv的详细介绍可参见:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432712108300322c61f256c74803b43bfd65c6f8d0d0000
virtualenv经典的python环境隔离工具,几乎所有的相关文章都会告诉读者这样安装:
sudo easy_install virtualenv
这样的话,1. virtualenv会安装到全局的/Library文件夹中,而不是用户文件夹;2.
“Distribute”安装系统比默认的easy_install的bug要少;3. 将Python包和用户账户隔离显得更有意义一些,故而大神推荐了如下的安装方法:
https://hackercodex.com/guide/python-install-django-on-mac-osx-lion-10.7/
遗憾的是,虽然前序进展顺利,但当执行$ sudo easy_install --prefix=~/.local virtualenv virtualenvwrapper,报了如下错误:
根据如此良心的错误提示提供的解决方案,尝试"add the installation directory to PYTHONPATH enviroment":
$ export PYTHONPATH=$PYTHONPATH:/Users/hannah/.local/lib/python2.7/site-packages
python setup.py install --prefix=~/.local
easy_install --prefix=~/.local virtualenv virtualenvwrapper【切记不要惯性的加sudo】
似乎一切又开始运行顺利了,接着照大神流程执行安装virtualenv和virtualenvwrapper完成。
创建Virtual environment
mkvirtualenv personnelBlog
创建一个叫personnelBlog的虚拟环境,并自动切换到该虚拟环境中。如果要切换虚拟环境可使用 “cdvirtualenv” 命令。
📎:http://qicheng0211.blog.51cto.com/3958621/1561685
3. 安装Django Project
1. 在personnelBlog虚拟环境下,创建项目目录,比如我的本地环境:
mkdir /Users/hannah/dev/PycharmProjects/personnelBlog
Django普为常见的安装方式可能是:pip install Django
2. 比较好的做法应该是定义项目的依赖关系:vim personnelBlog/requirements.txt
比如此处仅依赖了Django,那就直接requirements.txt输入“Django”即可。
然后安装定义的依赖关系:pip install -r personnelBlog/requirements.txt
3. 使用 Django’s “startproject” 命令,在personnelBlog目录下创建新的网站:django-admin.py startproject sdwangblogs personnelBlog/
然后start Django’s development web server…,但是它却出现了:
依然是良心的错误提示,so 执行如下命令:
python manage.py migrate
python manage.py runserver
最后url输入http://127.0.0.1:8000/,你会看到It Worked,这表明Django测试正常,恭喜你,距离成功更近了一步。
4. 安装uWSGI
lsvirtualenv
在虚拟环境personnelBlog下安装uwsgi服务器:
workon personnelBlog
pip install uwsgi
连接Django和uwsgi
编写django_wsgi.py文件,将其放在与文件manage.py同一个目录下,文件内容如下:
#!/usr/bin/env python
# coding: utf-8
import os
import sys
# 将系统的编码设置为UTF8
reload(sys)
sys.setdefaultencoding('utf8')
os.environ.setdefault("DJANGO_SETTINGS_MODULE","personnel Blog.settings")
from django.core.handlers.wsgi import WSGIHandler
application=WSGIHandler()
然后,进入虚拟环境执行指令:
uwsgi --http :8000 --chdir /Users/hannah/dev/PycharmProjects/personnelBlog/ --module django_wsgi
成功显示Django It Works页面即表示uwsgi与Django已经连接起来了。
5. Ngnix配置
nginx配置
nginx安装这里就不赘述了,这里采用多站点的配置方式,新建/usr/local/nginx/conf/vhosts/personnel.blog.conf,输入以下内容:
server {
listen80;
server_name personnel.blog;
access_log /Users/hannah/dev/PycharmProjects/personnelBlog/logs/access.log;
error_log /Users/hannah/dev/PycharmProjects/personnelBlog/logs/error.log;
location / {
uwsgi_pass127.0.0.1:9090;
include uwsgi_params;
uwsgi_param UWSGI_SCRIPT index;
uwsgi_param UWSGI_PYHOME /Users/hannah/dev/PycharmProjects/personnelBlog/;
}
}
TIPS:1. 9090是为nginx和uwsgi通信指定的交互端口,当然也可以是8087之类的,但要确认端口号未被占用;
2. 确定为access.log,error.log指定的目录文件存在,当然如果想简化配置,不指定acces.log,error.log也可以;
3. 参数UWSGI_PYHOME指定了虚拟env的Python环境目录;
4. UWSGI_SCRIPT则是包含application的入口模块。这里配置的index,uwsgi将在PYTHONPATH中搜索模块index.py。
uWSGI配置
我们可以直接使用命令行来启动并配置uWSGI,但实际部署环境中通常采用部署文件的方式,而非命令行方式。
我的Django程序目录:/Users/hannah/dev/PycharmProjects/personnelBlog/
uWSGI 支持多种配置文件格式,比如 xml,ini,json 等等都可以,这里我们采用xml配置。
在personnelBlog目录下新建一个XML文件,比如personnelBlog.xml输入内容如下:
<uwsgi>
<socket>127.0.0.1:9090</socket>
<listen>80</listen>
<master>true</master>
<pythonpath>/Users/hannah/dev/PycharmProjects/personnelBlog</pythonpath>
<processes>1</processes>
<logdate>true</logdate>
<daemonize>uwsgi.log</daemoniz>
<plugins>python</plugins>
</uwsgi>
然后执行命令:uwsgi -x /Users/hannah/dev/PycharmProjects/personnelBlog/personnelBlog.xml。
加载指定的xml配置文件,有时候因各种环境问题,-x --xml 命令识别不了,可以使用ini 配置方式【http://www.nowamagic.net/academy/detail/1330334】uwsgi 这样就启动起来了。如果无意外的话,就能在网上访问你的 Python 项目了。
然而。。。然而。。。然而。。。
虽然一切都看起来似乎合情合理,我却并没有成功访问到python项目,拜访各路大神文章,折腾了一下午都没有解决,我也很绝望啊。。。。。。尽管如此,还是把具体过程贴出来,望与后来者共勉之~~