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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,706评论 4 366
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,002评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,462评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,375评论 0 216
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,763评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,849评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,033评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,768评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,490评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,734评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,204评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,566评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,227评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,137评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,934评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,926评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,774评论 2 274

推荐阅读更多精彩内容