django环境部署

当前操作系统是在阿里云上的Ubuntu14,系统自带的python版本为2.7.6,而我们使用的版本为2.6.6+django1.4.2.

pyenv搭建基础环境

  1. 首先,安装pyenv并激活
#git pyenv到本地
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
#配置pyenv自启动
vi ~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
#对当前shell生效
source ~/.bashrc
  1. 安装python依赖库
    python在安装过程中需要ssl、sqlite等库的支持,先安装好,不然安装过程中提示缺少lib文件
apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
  1. pyenv下安装python2.6.6
    pyenv的用法这里就不多说了,一搜一大把,但是在实际运行pyenv install 2.6.6的过程中,会产生令人奔溃的等待,pyenv下载速度非常慢,一直显示从“www.python.org”下载,我自己在阿里云上多台机器测试过,下载时间都大于2小时,还很容易下载失败。后来找到两种解决办法,自己只验证了方法1,十分好用
方法1:使用国内镜像作为下载源,在shell中执行
export  PYTHON_BUILD_MIRROR_URL="http://pyenv.qiniudn.com/pythons/"
即可将python下载地址切换到七牛上,下载速度像打灰机
方法2:wget python源文件(就从pyenv提示的那个源下载,wget速度反而还挺快的,不知道为啥pyenv没那么快),以下为道听途说,未实际验证
把下载下来的包放到pyenv的cache目录,一般为~/.pyenv/cache,然后执行pyenv install此版本,即可用本地缓存
  1. 安装python库
    到这里后几乎都是一马平川了,pyenv安装python后自带了对应的pip版本,要什么库,pip install一下就好了,当然了PIL稍微复杂一些,如果是阿里云的Ubuntu系统,pip肯定是装不了的,我们还是本着解决问题的态度,手动编译PIL。
    下载PIL文件后解压
wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
tar zxvf Imaging-1.1.7.tar.gz
cd Imaging-1.1.7
python setup.py build #运行后不出意外应该是下面的结果
*** TKINTER support not available (Tcl/Tk 8.6 libraries needed)
*** JPEG support not  available
*** ZLIB (PNG/ZIP) support not  available
*** FREETYPE2 support not  available
*** LITTLECMS support not available

如果现在使用python setup.py install安装上,在实际处理图片的时候,肯定是会报图片格式不支持的错误的,因为build的结果是不支持任何类型的图片的,***为当前没找到支持的库,---表示当前系统内找到支持的库。

TKINTER、LITTLECMS格式的图片,现在项目中也不会支持,我们需要支持JPEG、ZLIB、FREETYPE2格式,做如下操作

apt-get install python-dev libjpeg-dev libfreetype6-dev zlib1g-dev
ln -s /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/
ln -s /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/
ln -s /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/
ln -s freetype2 freetype
python setup.py build #运行后不出意外应该是下面的结果
*** TKINTER support not available (Tcl/Tk 8.6 libraries needed)
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
*** LITTLECMS support not available

python setup.py install #执行安装

好了,安装好python库后保证使用python manage.py runserver 0.0.0.0:8008能够跑起来,并且在浏览器访问可以正常访问,那么基础环境也就完成了,现需要配置uwsgi+nginx

uwsgi配置+nginx配置

对于uwsgi和nginx的认识,我并不是很充分,只是知道nginx和django程序通过uwsgi通信,首先以uwsgi启动django,监听一个本地端口或socket,nginx将请求转发到uwsgi。

uwsgi本身也可以作为web服务器使用,直接提供对外的web服务,但是在安全性、访问控制方面做得还不够好,所以一般不会直接使用uwsgi做服务器程序,而是使用更强大的nginx做服务器,由nginx转发请求到uwsgi。

uwsgi

如果uwsgi还未装好,请先安装uwsgi

pip install uwsgi #安装对应python版本的uwsgi

uwsgi的配置有长篇大论,没来得及一一看完,这里仅仅列举我们所用到的配置文件示例(uwsgi版本:2.0.14)
uwsgi配置示例:服务使用了websocket,uwsgi.ini文在/project-path/uwsgi-config/下

[uwsgi]
chdir = %d../  #指定project目录为主目录
master = true #以独立守护进程运行
env = DJANGO_SETTINGS_MODULE=project_name.settings #项目的settings模块路径
module = project_name.wsgi:application #wsgi的application模块路径
socket=/project_dir/project.sock #本地监听的socket
http-websockets  #websokcet over http,官放文档说nginx >= 1.4 works fine and without additional configuration.
gevent=100  #gevent协程支持,最大100个
gevent-monkey-patch #gevent协程补丁
processes = 2 #2个处理进程
enable-threads = true #允许在请求中开启新线程
listen=300 #监听队列
daemonize=uwsgi.daemonize.log  #日志文件
memory-report #日志记录请求的内存等详细信息

启动uwsgi并查看日志

uwsgi -i uwsgi-config/uwsgi.ini
tail uwsgi.daemonize.log #查看日志的最后是否有工作进程启动的消息,看到如下信息,即表明uwsgi已启动,理论上的并发峰值为gevent*processes 数,这里为100*2,最大200个并发
spawned uWSGI master process (pid: 329)
spawned uWSGI worker 1 (pid: 330, cores: 100)
spawned uWSGI worker 2 (pid: 331, cores: 100)

nginx

现在配置nginx,使得请求转发到刚配置的uwsgi

server {
        server_name www.domain.com default; 

        root /project_dir; #设置主目录

        listen 80 ; 
        access_log /project_dir/access.log; 
        error_log /project_dir/error.log error; 

        location / {
                include uwsgi_params;  
                uwsgi_pass unix:///project_dir/project.sock; #uwsgi中设置的socket路径
        }

        location /static {
                alias /project_dir/static;
                expires 15d;
        }

        location /favicon.ico {
                log_not_found off;
                alias /project_dir/favicon.ico;
        }

        location /site_media {
                alias /project_dir/media;
                expires 15d;
        }
}

nginx -t检测一下,如果没有问题,使用nginx -s reload 重启服务后,基本配置就完成啦。

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

推荐阅读更多精彩内容