基于ubuntu使用nginx+uwsgi部署django,并使用supervisor管理(不坑人)

一开始不会,盲目的在百度上搜了一堆,花了三天时间验证,发现基本上都没法用。经常就是做着做着。发现做不下去了。(自己估计配置不成功可能跟两方面有关系1、系统环境。2、权限。当然只是预测,如果有读者有心得,欢迎在博客下方留言。)

首先你得决定是否使用虚拟环境。我的机器是刚装的系统,环境比较整洁。所以没有使用虚拟环境。

肯定有部分读者是使用虚拟环境的。接下来的文章中,主要以本机环境为主,当遇到虚拟环境时,会贴上注释。

先介绍一下我的项目路径吧,我的项目是放在/home文件夹下的。使用django-admin startproject demo

建立了一个项目目录demo

一、安装

这里需要使用到的模块和工具有uwsgi,nginx,django, 和supervisor。

安装方法

pip install django
pip install uwsgi
sudo apt-get install nginx
pip install supervisor

二、测试uwsgi

在项目路径下,创建文件test.py

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return ["Hello World"] # python2

保存,执行

uwsgi --http :8000 --wsgi-file test.py

打开example.com:8000。这里的“example.com”指的是本机的“localhost”或是服务器的域名或者IP

如果显示了hello world则表示uwsgi通过了。

三、测试django+uwsgi

在项目目录下(包含manage.py的文件夹)执行

python manage.py runserver 0.0.0.0:8000

同上步一样,打开example.com:8000。看是否显示django的it worked。如果通过了,输入Ctrl+C结束进程。

uwsgi --http :8000 --module demo.wsgi

这里的demo.wsgi其实是“demo”+ “.”+  “wsgi.py”。“demo”指的是包含有文件wsgi.py的文件夹。“.”指的是当前路径。“wsgi”指的是“wsgi.py”并把“.py”省略。

同上一步一样,打开example.com:8000。看显示效果,如果显示了django的it worked。就视为django+uwsgi通过。

四、配置静态文件

首先需要“uwsgi_params”文件,它一般在/etc/nginx/下。你可以复制到项目文件夹下面。也可以还放在原来的位置,(后面引用的时候注意就行了)

项目目录下创建文件mysite_nginx.conf

# the upstream component nginx needs to connect to
upstream django {
    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      8000;
    # the domain name it will serve for
    server_name .example.com; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
        alias /path/to/your/mysite/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /path/to/your/mysite/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /path/to/your/mysite/uwsgi_params; # the uwsgi_params file you installed
    }
}

这里的“/path/to/your/mysite”就是你项目的路径。

sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/

如果你是centos系统,默认是没有sites-enabled这个路径的,你需要在nginx.conf中修改。如下

include /etc/nginx/sites-enabled/*;

注意在include /etc/nginx/conf.d/*.conf;后面添加。

在django项目中找到settings.py文件,打开修改

添加

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

wq!保存。执行

python manage.py collectstatic

重新启动nginx

/etc/init.d/nginx restart
# 或者
service nginx restart

在static文件夹下添加图片demo.jpg。打开浏览器,输入http://example.com:8000/static/demo.jpg

这时应该就可以显示你刚刚添加的图片了。

五、使用socket

uwsgi --socket :8001 --wsgi-file test.py

打开页面http://example.com:8000/

除了参数变成了--socket,其他没有什么不同。

注意操作的是端口8001。而打开的是端口8000。这个就说明了套接字socket连接了uwsgi和页面请求。

六、测试socket文件

到目前为止,我们使用了一个TCP端口套接字,因为它更简单,但事实上使用Unix套接字比端口更好 - 开销较少。

编辑mysite_nginx.conf,将其更改为匹配:

server unix:///path/to/your/mysite/mysite.sock; # for a file socket
# server 127.0.0.1:8001; # for a web port socket (we'll use this first)

重启nginx

执行

uwsgi --socket mysite.sock --wsgi-file test.py

这个socket选项告诉uWSGI哪个文件要使用。 在浏览器中尝试http://example.com:8000/。

如果不行 检查你的nginx错误日志(/var/log/nginx/error.log)。如果你看到像:

connect() to unix:///path/to/your/mysite/mysite.sock failed (13: Permission
denied)

 

那么可能您需要管理套接字上的权限,以便允许nginx使用它。

尝试:

uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=666 # (very permissive)

或者

uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=664 # (more sensible)

 

您可能还需要将用户添加到nginx的组(可能是www-data),

七、用uwsgi和nginx运行Django应用程序

uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=666

现在uWSGI和nginx应该不仅仅是一个“Hello World”,而是django项目中的it worked。

八、使用ini文件

这时候其实是可以说django已经配置成功了,但是如果用这条命令来管理网站的持续运行是很难的。这时候就需要把命令的参数写在ini文件里面了。

创建mysite_uwsgi.ini文件

[uwsgi]

# Django-related settings
# 项目路径
chdir           = /path/to/your/project
# Django的wsgi文件
module          = project.wsgi
# 虚拟环境路径,如果没有就注释掉
home            = /path/to/virtualenv

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# 项目中的sock文件路径。
socket          = /path/to/your/project/mysite.sock
# ... with appropriate permissions - may be needed
chmod-socket    = 666
# clear environment on exit
vacuum          = true

wq!保存。执行

uwsgi --ini mysite_uwsgi.ini

九、最后一步使用supervisor

生成配置文件supervisord.conf

echo_supervisord_conf > /etc/supervisord.conf

打开文件/etc/supervisord.conf文件。

[program:mysite]
command=uwsgi --ini /path/to/project/mysite_uwsgi.ini
directory=/path/to/project/
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

启动supervisor

supervisord -c /etc/supervisord.conf

启动django项目

supervisorctl startmysite
    #或者
 supervisorctl -c /etc/supervisord.conf start mysite

这时执行,supervisorctl命令就可以看见你刚刚添加的项目已经在后台中执行了。再打开http://example.com:8000/发现完美的运行起来了。截个图(请忽略端口号不是8000):

以上,这篇博客好长,我好累。

 

转载于:https://my.oschina.net/u/3280685/blog/918483

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值