1. 程式人生 > >windows 2008 R2 nginx+FastCGI+Django 部署

windows 2008 R2 nginx+FastCGI+Django 部署

溫馨建議軟體使用版本python3.4、Django1.7、nginx1.2、flup1.0.3, 使用這三個版本是有原因的否則我也不會這樣,在windows 上面我能考慮到用這種情況是因為我剛開始使用apache+mod_wsgi進行部署的但是不知道什麼原因愣是有個問題沒辦法解決,我本以為是版本問題後來更換版本也不行,在httpd.conf檔案進行module載入的時候路徑正確也讀不出來,直接導致服務無法啟動,有人說去自動生成一個模板路徑但是還是不行;再後來我去使用nginx+uwsgi進行部署使用,這時候又出現一個問題window系統上面沒辦法安裝uwsgi資源庫,沒辦法只能放棄上面兩種辦法了。

  1. ngin安裝及配置
  2. nginx下載地址:http://nginx.org/en/download.html

  3. 進行nginx解壓,我這塊解壓路徑C:\Program\nginx-1.12.2;

  4. 然後去下載一個安裝nginx的神器,windows service wrapper,這塊藐視現在只有1.9版本的winsw-1.9-bin.exe。把它放在這個解壓目錄下建立一個winsw檔案;

  5. 然後在該目錄下建立與神器名字相同的xml檔案winsw-1.9-bin.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <service>
    <id>nginx</id>
    <name>nginx</name>
    <description>nginx</description>
    <executable>C:\Program\nginx-1.12.2\nginx.exe</executable>
    <logpath>C:\Program\nginx-1.12.2\</logpath>
    <logmode>roll</logmode>
    <depend></depend>
    <startargument>-p C:\Program\nginx-1.12.2</startargument>
    <stopargument>-p C:\Program\nginx-1.12.2 -s stop</stopargument>
    </service>
    
    
  6. 進入該C:\Program\nginx-1.12.2\winsw\檔案下安裝服務:

    winsw-1.9-bin.exe install
    
  7. 配置conf/nginx.conf檔案主要配置服務:

    server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   index;
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }	
            #重點在這,這個路徑是你建立的Django專案的主檔案路徑
    		location ~* ^.+\.(html|jpg|jpeg|gif|png|ico|css|js)$  
            {  
                root D:/myjango;  
                expires 30d;  
                break;  
            }  
      		# 載入靜態資源路徑
            location ~ ^/static/ {  
                root D:/myjango;  
                expires 30d;  
                break;  
            }   
      		# fastcgi 配置相關的ip和埠方便去呼叫
            location ~ ^/ {  
                fastcgi_pass 127.0.0.1:8051;  
                fastcgi_param PATH_INFO $fastcgi_script_name;  
                fastcgi_param REQUEST_METHOD $request_method;  
                fastcgi_param QUERY_STRING $query_string;  
                fastcgi_param CONTENT_TYPE $content_type;  
                fastcgi_param CONTENT_LENGTH $content_length;  
                fastcgi_param SERVER_PROTOCOL $server_protocol;  
                fastcgi_param SERVER_PORT $server_port;  
                fastcgi_param SERVER_NAME $server_name;  
                fastcgi_pass_header Authorization;  
                fastcgi_intercept_errors off;  
            } 
      }
    
  8. negix常用命令

    啟動命令:start negix
    停止命令: negix -s quit
    
2.FastCGI安裝

2.1 FastCGI安裝用的是flup,可直接用pip3 安裝版本最新版是1.0.3。1.0.2主要是用在py2上的如果用在py3中會出現安裝中的錯誤。

pip3 install flup

2.1 在專案目錄下執行該程式

manage.py runfcgi method=threaded host=127.0.0.1 port=8051

在專案執行中儘量不要使用Django,太高版本的操作否則會出現你意向不到的問題,如果正常執行完這個命令專案是沒有任何反應和提示資訊的,否則就出錯誤了。

問題歸納:

  1. 路由配置

    在Django路由配置方面儘量使用django.conf.urls 下面的url進行配置

    基本規則示例如下:

from django.contrib import admin
from django.conf.urls import url,include
from index.views import *

urlpatterns = [
    url(r'^admin/$', admin.site.urls),
    url(r'', include('index.urls')), # 引入另一個應用urls
]
  1. settings.py配置

    在setting配置中主要就是要配置DEBUG改為False,還有一個東西很重要,看下面:

    不知道在那個版本的Django框架中MIDDLEWARE_CLASSES被改成了MIDDLEWARE導致在runfcgi時會報沒有在MIDDLEWARE_CLASSES中配置’django.contrib.sessions.middleware.SessionMiddleware’, ‘django.contrib.auth.middleware.AuthenticationMiddleware’, ‘django.contrib.messages.middleware.MessageMiddleware’,這三個引數,導致錯誤,不能繼續編譯。

    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    MIDDLEWARE_CLASSES = [
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
    ]
    
  2. 專案分頁情況

    在Django2.0.3版本使用下面方法就可以完成分頁:

    from django.core.paginator import Paginator
    	paginator = Paginator(article, 4)
        page = request.GET.get('page')
        art = paginator.get_page(page)
    

    在Django1.7版本以前可以使用下面方法來完成:

    from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
    	page = request.GET.get('page')
        #art = paginator.page(page)
        try:
            art = paginator.page(page)
        except PageNotAnInteger:
            art = paginator.page(1)
        except EmptyPage:
            art = paginator.page(paginator.num_pages)
    

    出現這這種原因是因為Django版本更新去掉了一些複雜的方法簡化了,所以之前的版本就不能用了。

  3. 還有一些沒有碰見的問題希望有心人能夠留下你們的一些想法或者思路或者問題都可以。

  4. django 樣式丟失問題點選此處去往檢視問題解決方案。