Django+uwsgi+nginx環境安裝部署

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

相關文章
相關標籤/搜索