一开始不会,盲目的在百度上搜了一堆,花了三天时间验证,发现基本上都没法用。经常就是做着做着。发现做不下去了。(自己估计配置不成功可能跟两方面有关系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 start
mysite
#或者
supervisorctl -c /etc/supervisord.conf start mysite
这时执行,supervisorctl命令就可以看见你刚刚添加的项目已经在后台中执行了。再打开http://example.com:8000/发现完美的运行起来了。截个图(请忽略端口号不是8000):
以上,这篇博客好长,我好累。