Mac Python Web开发环境:nginx+uwsgi+django搭建

鉴于曾经观战过大神配置“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项目,拜访各路大神文章,折腾了一下午都没有解决,我也很绝望啊。。。。。。尽管如此,还是把具体过程贴出来,望与后来者共勉之~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容