您的位置:首页 > 运维架构 > Nginx

Django+uwsgi+nginx环境安装部署

2018-01-30 00:00 585 查看
系统:
centos 7.2 (可以先更新yum源,yum -y install epel-release)

前提:
1、Django包在本地能正常运行
2、安装在安装完之后能访问首页

安装调试
1、上传Django包至自己单独创建的目录
mkdir /var/django
unzip django.zip

2、环境
2.1 centos7 以上现在都自带Python 2.7和pip,这里不在安装
2.2 pip install uwsgi
这里可能会报错,有些Python的依赖包得安装
yum install python-devel
yum install mysql-devel
yum install gcc

如果你的程序有用到mysql或者其他的模块在Linux你也得提前安装
pip install pillow
pip install django==1.8.2
pip install django-ckeditor
数据库mysql的驱动得自己下载版本手动安装
2版本:MySQLdb 下载解压 python setup.py install
3版本:pymysql
2.3 配置uwsgi文件加载Django项目启动
2.3.1 直接带参数启动,这种不太方便
uwsgi --http 10.36.3.74:8020 --file xs_dj/wsgi.py --static-map=/static=./myarticle/static
2.3.2 以配置文件启动,得先创建一个ini的配置文件
vim uwsigi.ini
#表示uwsgi模块
[uwsgi]
#项目目录
chdir=/var/django/xs_dj/
#指定项目的应用,固定写法,承接上面的项目目录
module=xs_dj.wsgi:application
#sock文件存放目录,方便nginx进行sock连接交互
socket=/var/django/xs_dj/scripts/uwsgi.sock
#并发进程
workers=5
#进程id存放文件
pidfile=/var/django/xs_dj/scripts/uwsgi.pid
#启动的ip及端口
http=10.36.3.74:8021
#静态文件映射,第一个等于代表Django里面的别名,第二个等于后面是Django里面的真实路径
static-map=/static=/var/django/xs_dj/myarticle/static
#启动的用户和组
uid=root
gid=root
#启用主进程
master=true
#自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
#序列化接受的内容,如果可能的话
thunder-lock=true
#启用线程
enable-threads=true
#设置自中断时间
harakiri=30
#设置缓存
post-buffering=4096
#日志存放目录,方便拍错
daemonize=/var/django/xs_dj/scripts/myarticle.log
2.3.3 注意事项
这个文件等于后面加入引号的话,实际的效果中也是加入了引号的,就好比路径多出了引号那肯定是错的
chdir、module、socket、http、static-map 这几个必填且必须准确无误

2.3.4 启动调试
uwsgi --ini uwsigi.ini
10.36.3.74:8021;web浏览器测试是否可以正常访问
若不行的话可以看日志去分析,下面第一个图是正确的,第二个的话进入本地tcp的连接了,根本就没有开启Unix sock的连接





uwsgi重新启动
得安全情况下强制杀死 pkill -INT uwsgi
3 nginx集成
3.1 nginx本身通过浏览器能正常访问
3.2 vim /etc/nginx/nginx.conf
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
worker_connections 1024;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

#include /etc/nginx/conf.d/*.conf;

server {
listen 80 ;
server_name 10.36.3.74;
charset utf-8;
#include /etc/nginx/default.d/*.conf;
# 支持压缩的类型
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif
image/png application/octet-stream;
# 指定项目路径uwsgi 这个location就和咱们Django的url(r'^admin/', admin.site.urls),默认匹配根的情况下全部转去sock
location / {
#导入一个Nginx模块他是用来和uWSGI进行通讯的
include uwsgi_params;
# 设置连接uWSGI超时时间
#uwsgi_connect_timeout 30;

uwsgi_send_timeout 600; # 指定连接到后端uWSGI的超时时间。
uwsgi_connect_timeout 600; # 指定向uWSGI传送请求的超时时间,完成握手后向uWSGI传送请求的超时时间。
uwsgi_read_timeout 600; # 指定接收uWSGI应答的超时时间,完成握手后接收uWSGI应答的超时时间
# 指定uwsgi的sock文件所有动态请求就会直接丢给他
uwsgi_pass unix:/var/django/xs_dj/scripts/uwsgi.sock;
}
# 指定静态文件路径,就是一个映射
location /static {
alias /var/django/xs_dj/myarticle/static;
index index.html index.htm;
}
error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
3.3 nginx启动及调试
/etc/init.d/nginx start
nginx -t #检测配置文件的准确性
nginx -s relaod #在不影响业务的情况下 重新加载
如果nginx error_log日志报以下的东西,表明是uwsgi的问题,看下uwsgi是否启动,以及配置文件必填的几个参数是否正确;connect() to unix:/var/django/xs_dj/scripts/uwsgi.sock failed (111: Connection refused) while connecting to upstream, client: 10.200.0.68, server: 10.36.3.74, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://unix:/var/django/xs_dj/scripts/uwsgi.sock:", host: "10.36.3.74", referrer: "http://10.36.3.74/"



个人注意点:
1、因为我这里用到了验证码,需要pillow模块,生成的图片的时候得选择一种字体
Windows下的字体路径和Linux是有区别的
windows C:\\Windows\\Fonts\\
linux /usr/share/fonts/liberation/LiberationMono-Italic.ttf

2、如果有用到django-ckeditor模块,得加载media文件,那么uwsgi配置文件和nginx都得添加配置
uwisgi.ini
static-map=/media=/var/django/xs_dj/myarticle/static/images
ngninx.conf
location /media {
alias /var/django/xs_dj/myarticle/static/images;
index index.html index.htm;
}
重启uwsgi和nginx服务
pkill -INT uwsgi
uwsgi --ini uwisgi.ini
nginx -s reload
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: