Django+uwsgi+nginx环境安装部署

系统:
    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
            
            
            

猜你喜欢

转载自my.oschina.net/u/2343310/blog/1615398
今日推荐