使用 Nginx 部署 Django
使用 Nginx
部署 Django
项目
一: 实验平台:CentOS 7.3
二: Nginx版本:nginx-1.12.2
一、安装环境
1.安装 Nginx
这里测试就直接用 yum
安装
$ yum -y install nginx
2.安装 supervisor
,一个用来管理进程的工具,用来管理 uwsgi
$ pip install supervisor
3.安装 uwsgi
依赖包
$ yum -y install python-devel
若python-devel
未安装uwsgi
会报以下错误:
$ pip install uwsgi --upgrade
...
*** uWSGI compiling embedded plugins ***
[gcc -pthread] plugins/python/python_plugin.o
In file included from plugins/python/python_plugin.c:1:0:
plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
#include <Python.h>
^
compilation terminated.
----------------------------------------
Command "/usr/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-xIcJip/uwsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-B_IpPf-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-xIcJip/uwsgi/
4.再次安装 uwsgi
$ pip install uwsgi --upgrade
二、测试
1.使用 uwsgi
部署
$ uwsgi --http :8080 --chdir /blog/ --home=/usr/bin/env --module project.wsgi
#这样就跑起来了,--chdir /blog/项目地址内含(mang)--home 指定virtualenv 路径,如果没有可以去掉。project.wsgi 指的是 project/wsgi.py 文件
但是现在访问,我们会发现,静态文件都没正常显示。接着看下去
三、管理进程
1.使用 supervisor
来管理进程
生产supervisor
的配置文件--> /etc/supervisor.conf
$ echo_supervisord_conf > /etc/supervisord.conf
编辑配置文件/etc/supervisor.conf
$ vim supervisor.conf
[program:blog]
command=/usr/bin/uwsgi --http :80 --chdir /blog --module django_blog.wsgi
directory=/blog
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true
command 中写上对应的命令,这样,就可以用 supervisor 来管理了。
2.启用
$ supervisord -c /etc/supervisord.conf
3.重启项目
$ supervisorctl -c /etc/supervisord.conf restart blog
blog: stopped
blog: started
$ supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]
以 uwsgi
为例,上面这样使用一行命令太长了,我们使用 ini
配置文件来搞定,比如项目在 /blog/
这个位置,
$ vim /blog/uwsgi.ini
[uwsgi]
socket = /blog/blog.sock
chdir = /blog
wsgi-file = django_blog/wsgi.py
touch-reload = /blog/reload
processes = 2
threads = 4
chmod-socket = 664
chown-socket = tu:www-data
vacuum = true
注意:不建议把 sock
文件放在 /tmp
下,比如 /tmp/xxx.sock
(不建议)!有些系统的临时文件是 namespaced
的,进程只能看到自己的临时文件,导致 nginx
找不到 uwsgi
的 socket
文件,访问时显示502
,nginx
的 access log
中显示 unix: /tmp/xxx.sock failed (2: No such file or directory)
,所以部署的时候建议用其它目录来放 socket
文件,比如放在运行nginx
用户目录中,也可以专门弄一个目录来存放 sock
文件,比如 /tmp2/
4.创建空白文件 reload
$ touch /blog/reload
5.修改 supervisor
配置文件中的 command
一行:
command=/usr/bin/uwsgi --http :80 --chdir /blog --module django_blog.wsgi
修改为:
command=/usr/bin/uwsgi --ini /blog/uwsgi.ini
6.重启 supervisor
$ supervisorctl -c /etc/supervisord.conf restart blog
四、配置 Nginx
1.新建一个 Nginx
配置文件
$ mkdir /etc/nginx/sites-available/
$ vim /etc/nginx/sites-available/blog.conf
server {
listen 80;
server_name www.kjarbo.com;
charset utf-8;
client_max_body_size 75M;
location /media {
alias /blog/media;
}
location /static {
alias /blog/static;
}
location / {
uwsgi_pass unix:///blog/blog.sock;
include /etc/nginx/uwsgi_params;
}
}
2.创建超链接
$ mkdir /etc/nginx/sites-enabled/
$ ln -s /etc/nginx/sites-available/blog.conf /etc/nginx/sites-enabled/blog.conf
3.测试Nginx
配置语法
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Over~
版权协议须知!
本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
1315 0 2020-09-16
博主卡片
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。
现在时间 2024-12-28
今日天气
随机推荐
站点统计
- 文章总数:241篇
- 分类总数:29个
- 评论总数:12条
- 本站总访问量 353695 次
@xiaozi 最后的分享的镜像下载地址打不开 服务器没有开机吗?
@yuanyuan 为什么我的4b安装centos7.9 插上tf卡 显示不兼...
@Wong arrhenius 牛比
@MakerFace 厉害了!
@TongSir 老哥 更新下我的友链链接 https://blog.ton...