欢迎使用CSDN-markdown编辑器

来源:互联网 发布:东京增大茶淘宝有吗 编辑:程序博客网 时间:2024/05/17 11:05

阿里云 ubuntu 利用 ngnix uwsgi supervisor 部署 django

阿里云 ubuntu 利用 ngnix uwsgi supervisor 部署 django
一时兴起,买了个阿里云的ECS :操作系统: Ubuntu 12.04 64位
部署下来,坑坑挖挖不少,就想记录下来,已备后来者参考

apt-get updateapt-get dist-upgradeapt-get install update-manager-coredo-release-upgrade -d

一路敲Y或者回车,基本升级完成,升级后putty:
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-119-generic x86_64)
参考:http://www.mobibrw.com/2016/3789

通过以下使用apt-get安装相关程序,可以复制内容保存为shell脚本,chmod u+x 加可执行权限后一键安装
并建立名为 : classbuy 项目文件夹,创建用户:user_classbuy, 创建组 classbuy ,执行 passwd user_classbuy时需要输入密码

#bin/bashaptitude updateaptitude upgradeapt-get install python-dev nginxapt-get install python-virtualenvapt-get build-depapt-get install supervisorapt-get install nginxapt-get install elinksmkdir /classbuymkdir -p /classbuy/classbuy/staticmkdir -p /classbuy/classbuy/mediamkdir -p /classbuy/classbuy/templatemkdir -p /classbuy/logstouch /classbuy/logs/gunicorn_supervisor.logtouch /classbuy/logs/gunicorn_supervisor.loggroupadd --system classbuyuseradd --system --gid classbuy --shell /bin/bash --home /classbuy user_classbuypasswd user_classbuy

这些基本完成之后,就可以开干,为了更好开发建议用virtualenv环境

virtualenv -p /usr/bin/python3.4 /classbuypip install djangopip install uwsgidjango-admin.py startproject classbuy

进行 /classbuy/classbuy ,运行如下,看能否成功,能就迈出第一步了
python manage.py runserver

建立UWSGI.ini文件并写放如下内容

[uwsgi]socket = /classbuy/run/classbuy.sockchdir = /classbuy/classbuywsgi-file = classbuy/wsgi.pytouch-reload = /classbuy/reloadprocesses = 2threads = 4chmod-socket = 664chown-socket = user_classbuy:www-datavacuum = true

执行uwsgi如下命令看能否成功,如果有错,命令行会出现类似fail信息,可能是文件找不到的,请调整ini文件所在路径
/classbuy/bin/uwsgi –ini /classbuy/classbuy/uwsgi.ini

进入 /etc/supervisor/conf.d/
建议classbuy.conf 文件,内容如下,每句前面不能有空格, 注意:每句都有分号’;’,分号和语句结束多保留几个空格
classbuy.conf 作用是把uwsgi命令通过supervisor生成一个服务,时时刻刻都在生台执行

[program:classbuy]command = /classbuy/bin/uwsgi  --ini  /classbuy/classbuy/uwsgi.ini                ; Command to start appuser = root                                                          ; User to run asdirectory=/classbuy/classbuy   ;stdout_logfile = /classbuy/logs/gunicorn_supervisor.log   ; Where to write log messagesredirect_stderr = true ;startsecs=0    ;stopwaitsecs=0  ;autorestart=true  ;

supervisor reread
supervisor update
supervisor start classbuy
supervisor tail classbuy
可以通过tail查看 classbuy是否有bug或者问题

进入:/etc/nginx/sites-available/
建立 classbuy文件,内容如下,nginx 把域名转化为uwsgi ->sock来执行django manage runserver,

server {    listen   80;    server_name www.classbuy.cn max_fails=10 fail_timeout=10s;    client_max_body_size 4G;    access_log /classbuy/logs/nginx-access.log;    error_log /classbuy/logs/nginx-error.log;    location /static/ {        alias   /classbuy/classbuy/static/;    }    location /media/ {        alias   /classbuy/classbuy/media/;    }    location / {        include        /classbuy/uwsgi_params;        uwsgi_pass   unix:///classbuy/run/classbuy.sock;        }}

service nginx restart 后就可以访问阿里云了 http://www.classbuy.cn/ (阿里云主机有内网和外网IP,还必须备案,因我是个人,备案从申请到批准几天时间(身份证,居住证之类)就很快完成,之后通过阿里云的云解析把公网IP和域名绑定一起)

流程走下来看似简单,就测试经常失败,在location 这项,有人使用如下(即使uwsgi也修改command为端口模式,指到同样的端口),我使用就是报错,后改通过sock方式没有一点问题。
期间多多看log,看问题出现在哪后去google或者百度
/var/log/nginx/
/var/log/supervisor/

include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;