系统:
centos 7.2 (能够先更新yum源,yum -y install epel-release)
前提:
一、Django包在本地能正常运行
二、安装在安装完以后能访问首页
安装调试
一、上传Django包至本身单首创建的目录
mkdir /var/django
unzip django.zip
二、环境
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的链接
javascript
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;php
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;css
events {
worker_connections 1024;
}html
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';java
access_log /var/log/nginx/access.log main;node
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;python
include /etc/nginx/mime.types;
default_type application/octet-stream;mysql
#include /etc/nginx/conf.d/*.conf;linux
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;nginx
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/"
我的注意点:
一、由于我这里用到了验证码,须要pillow模块,生成的图片的时候得选择一种字体
Windows下的字体路径和Linux是有区别的
windows C:\\Windows\\Fonts\\
linux /usr/share/fonts/liberation/LiberationMono-Italic.ttf
二、若是有用到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