1. 程式人生 > >新版本Django在Windows和Linux下的部署

新版本Django在Windows和Linux下的部署

伴隨著人工智慧和深度學習的火熱發展,Python也成為了一門非常熱門的語言。我們可以看到熱門的深度學習框架都提供Python的介面,有些甚至只有Python的介面,這一定程度上推動了Python的普及。當然,在我們完成模型的訓練之後,我們總是要搭建一個演示的平臺,要麼開放給使用者使用,要麼是內部進行測試。
雖然說Python是著名的膠水語言,可以和很多語言和框架進行互操作,但是要是能直接使用Python編寫的框架進行伺服器的部署的話,則可以簡化程式的編寫過程。Python下最著名的網站框架就是Django了,因此今天就介紹下新版本Django的部署方法,主要以Windows和Linux為例。那為何要寫這篇呢?因為Django這幾年也變化了很多,然而網上有很多陳舊的部署教程,會對我們的部署過程進行干擾,所以我覺得有這個必要好給你們傳授下一些部署的經驗。當然,部署前請用python manage.py runserver

檢查一下伺服器是否正常工作。

我們先看看Windows下怎麼進行Django的部署,我藉助的是Azure中的Django模板中所使用wfastcgi庫以及微軟自己的伺服器平臺IIS。過程如下:

  1. 安裝IIS,請務必勾選伺服器技術中的CGI。
    這裡寫圖片描述

  2. 安裝wfastcgi

    pip install wfastcgi
  3. 執行指令,獲得FastCGI的Handler引數。

    wfastcgi-enable

    會獲得一串類似c:\anaconda2\python.exe|c:\anaconda2\lib\site-packages\wfastcgi.pyc的字串,其實就是python的路徑和handler的路徑用|進行連線而成的字串,記錄下來,後面會用到。

  4. 在網站根目錄下新建一個web.config,填入以下內容

    <configuration>
      <system.webServer>
        <handlers>
          <add name="Python FastCGI"
               path="*"
               verb="*"
               modules="FastCgiModule"
               scriptProcessor="C:\Python36\python.exe|C:\Python36\Lib\site-packages\wfastcgi.py"
    resourceType="Unspecified" requireAccess="Script" />
    </handlers> </system.webServer> <appSettings> <!-- Required settings --> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" /> <add key="PYTHONPATH" value="C:\MyApp" /> <!-- Optional settings --> <add key="WSGI_LOG" value="C:\Logs\my_app.log" /> <add key="WSGI_RESTART_FILE_REGEX" value=".*((\.py)|(\.config))$" /> <add key="APPINSIGHTS_INSTRUMENTATIONKEY" value="__instrumentation_key__" /> <add key="DJANGO_SETTINGS_MODULE" value="my_app.settings" /> <add key="WSGI_PTVSD_SECRET" value="__secret_code__" /> <add key="WSGI_PTVSD_ADDRESS" value="ipaddress:port" /> </appSettings> </configuration>

    上面一段是樣例的web.config檔案,摘自wfastcgi的官方介紹頁面,我們需要做一些更改,首先scriptProcessor改為上面我們記錄的那段字串,然後是一些必要的引數,像PYTHONPATH改為網站的根目錄的路徑,最後就是一些可選的引數,像WSGI_LOG是log檔案的路徑,還有DJANGO_SETTINGS_MODULE需要改為自己專案的名稱,像APPINSIGHTS_INSTRUMENTATIONKEY,WSGI_PTVSD_SECRET,WSGI_PTVSD_ADDRESS這些都是Azure上的引數,我們可以將其刪除。

  5. 在IIS新建一個站點,指向網站的根目錄,注意埠不要重複。
    這裡寫圖片描述

  6. 開啟瀏覽器進行訪問,不出意外已經就OK了。

  7. 如果還是有問題,一般是許可權問題,檢查下Anaconda的目錄對於IIS_IUSRS是否有可讀、可執行、列出目錄許可權。
    這裡寫圖片描述

上面的部署過程在IIS 6及以上都測試通過了,基本沒啥大問題。而且通過上面設定的WSGI_RESTART_FILE_REGEX引數,可以實現自動重啟,簡直不要太爽。

之後是在Linux下的部署,我原本想著會比Windows簡單的多,但是自從體驗過了DigitalOcean的一鍵部署的映象後,我感覺我還是too simple了。提醒大家千萬別用DO中Ubuntu16.04的Django的一鍵映象,不知道為什麼突然就掛了,而且一上來還不能用域名訪問。Ubuntu14.04的Django的一鍵映象還行,就是Django版本太老了,一升級又掛了。所以我還是從頭開始吧,這次主要是使用nginx和uwsgi來進行部署的,過程如下:

  1. 遵照nginx官方教程進行nginx的安裝,一般是下載證書,並新增到本機,重新整理庫安裝軟體的快取,再進行安裝這樣一個流程。此處以Ubuntu/Debian為例,在bash中敲入:

    wget http://nginx.org/keys/nginx_signing.key
    sudo apt-key add nginx_signing.key

    再修改/etc/apt/sources.list,新增以下兩行

    deb http://nginx.org/packages/system/ codename nginx
    deb-src http://nginx.org/packages/system/ codename nginx

    system按情況替換為debian或ubuntu,codename可通過lsb_release -a獲得,然後繼續執行

    apt-get update
    apt-get install nginx
  2. 確保Python及pip已經安裝,可以通過以下指令安裝。

    apt-get install python-dev python-pip
  3. 安裝uwsgi

    pip install uwsgi
  4. 像上面一樣,在根目錄下面新建一個配置檔案uwsgi.ini,填入以下內容。

    [uwsgi]
    socket = 127.0.0.1:8001
    chdir = /path/to/your/project/
    wsgi-file = project_name/wsgi.py
    master = true
    processes = 1
    vacuum = true
    optimize = 2
    stats = 127.0.0.1:9191
    daemonize = /var/log/uwsgi/myapp.log

    chdir修改為專案的根目錄,project_name修改為自己的專案名稱,daemonize則是日誌檔案的路徑,socket的埠可以靈活進行調整。

  5. 執行命令將uwsgi伺服器跑起來

    uwsgi uwsgi.ini
  6. 按照nginx的教程,我們修改nginx的配置檔案,新版本的路徑一般在/etc/nginx/conf.d/default.conf。

    
    upstream django {
        server 127.0.0.1:8001;
    }
    
    server {
        listen 80;
        server_name myapp.example.com;
    
        root /var/www/myapp/html;
    
        location / {
            index index.html;
        }
    
        location /static/  {
            alias /var/django/projects/myapp/static/;
        }
    
        location /main {
            include uwsgi_params;
            uwsgi_pass django;
    
            uwsgi_param Host $host;
            uwsgi_param X-Real-IP $remote_addr;
            uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
            uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;
        }
    }

    請保證上游django路由的埠與之前socket設定的一致,static目錄和其他配置等可以靈活進行調整。

  7. 如果你現在直接跑的話,可以發現網站可以正常跑,但是靜態檔案卻是有問題的。這還是許可權問題,因為nginx預設不是用root使用者跑的,他沒有訪問靜態目錄的許可權。這有兩種解決方法,一個是給nginx使用者靜態目錄的訪問許可權,還有一種就是讓nginx以root使用者來跑。以第二種為例,那就是將/etc/nginx/nginx.conf中的user nginx修改為 user root,再用service nginx restart重啟服務即可。
  8. 如果對專案做了更改,他並不會自動生效,需要先將之前的uwsgi程序kill掉,再次執行步驟5即可。

以上,就是文章的全部內容啦,如果感覺還意猶未盡的話,可以給我的Github 主頁 加個follow之類的(滑稽),以後說不定還會再分享一些相關的經驗。

相關推薦

版本Django在WindowsLinux部署

伴隨著人工智慧和深度學習的火熱發展,Python也成為了一門非常熱門的語言。我們可以看到熱門的深度學習框架都提供Python的介面,有些甚至只有Python的介面,這一定程度上推動了Python的普及。當然,在我們完成模型的訓練之後,我們總是要搭建一個演示的

SpringBoot熱部署linux通過vim修改jar裡面的檔案

解決問題: 1、在專案測試或者部署後,經常會遇到需要更改一些配置檔案或者java類,這時使用SpringBoot熱部署可以快速的修改後重啟,方便開發測試; 2、在專案上線後,會遇到一些需要修改的地方,使用linux下的vim工具可以快速的修改已部署好的專案。 一、引入熱部署依賴 &l

maclinux使用Docker,部署SpringBoot專案到docker

主要是看一下如何在linux及mac上安裝docker,建立docker映象,部署SpringBoot專案到docker,並藉助於DaoCloud進行docker映象下載加速等。我用的電腦是mac,本身並不支援docker,需要安裝Docker ToolBox才能使用Dock

關於LinuxWindows部署mysql.data.dll的註冊問題

mysql ado.net connector下載地址: http://dev.mysql.com/downloads/connector/net/ 選擇版本: Generally Available Releases(1)是釋出版(bug什麼的較少的版本吧),而Development Releas

linux部署執行kettle——(配置檔案、動態獲取、後臺執行)

一.部署準備 1.1 java安裝(略) 1.2 JDK配置         1.命令列鍵入“cd /etc”進入etc目錄 2.命令列鍵入“vi profile”開啟profile檔案 3.敲擊鍵盤ctrl+F到檔案末尾 4.在末尾處,即第一個~的地方,敲擊鍵盤

windowsLinux定時啟動或關閉服務

ref sta article start 處理程序 window pin blog win http://blog.csdn.net/clare504/article/details/17410643 1、Windows下的定時啟動程序可以采用系統的計劃和任務,定時

Linux部署grafana + influxdb + telegraf , 構建性能監控平臺

grafana 監控 Grafana+telegraf+InfluxDB,采用客戶端->服務端存儲->WEB界面顯示的工作模式,使用UTP傳輸數據,並且支持自定義圖表,有良好的擴展性,重要的是Grafana頁面展示比較美觀,更關鍵的是InfluxDB提供了Python的API,Influx

linux部署一個JavaEE項目的簡單步驟

per cat source div read manage 沒有 scp git 部署項目的前提是準備好環境,包括:Java運行環境(JDK),Tomcat,Mysql數據庫 1.首先將東西上傳到服務器,我是在windows安裝ssh工具(下載安裝git即可http:

linux部署程序,tomcat啟動正常,但網頁無法訪問

tom 環境部署 firewalld png 開啟 但是 system emctl 圖片 問題背景:測試環境部署程序,之前是可以的。但是在安裝rabbitmq的時候,再來打開網頁的時候就出現一直轉圈圈,網頁無法打開。 經過檢查發現是由於開啟了防火墻。 系統是cento

windowslinux的抓包工具

gpo tcpdump linu window clas dst post blog windows Linux 抓包工具 tcpdump 示例 tcpdump -i bond0 host 10.70.11.182 -w ./sms.cap windows抓包

Linux部署Samba服務環境的操作記錄

command 解決辦法如下 some var sco most get -c can 關於Linux和Windows系統之間的文件傳輸,很多人選擇使用FTP,相對較安全,但是有時還是會出現一些問題,比如上傳文件時,文件名莫名出現亂碼,文件大小改變等問題。相比較來說,使

linux 部署單片 elasticsearch 服務

es本文是部署單機elasticsearch 服務。是通過yum進行安裝。elasticsearch 需要java環境。另一篇文章有配置java8環境說明。1: 首先下載 gpg簽名文件:rpm --import https://packages.elastic.co/GPG-KEY-elasticsearc

安裝Python-3.7linux網速測試工具

網速測試工具 Python-3.7 wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0b4.tar.xz tar -xvJf Python-3.7.0b4.tar.xz cd Python-3.7.0b4/ ./configure --p

Caffe使用版本CUDACuDNN

版本 time ted TP CA sigmoid 文件替換 caffe 腳本 因為一些原因還是需要使用別人基於Caffe的代碼,但是代碼比較老,默認不支持高版本的cuda或者cudnn 怎麽辦呢?基本上就是把最新官方Caffe-BVLC的幾個關鍵文件拿過來替換即可。 腳本

Linux 部署Django項目

重啟nginx system files 退出 box 協議類型 nec ret views Linux 下部署Django項目 說明:本文所使用的環境為CentOS 6+Python2.7+Django1.11 安裝Django、Nginx和uWSGI 1

Linux部署Tomcat ,然後部署WS信用盤平臺搭建web項目

bbs star 項目 shu pro .com .sh com 壓縮包 解壓tomcat服務器壓縮包 配置環境變量   tomcat服務器運行時是需要JDK支持的,所以必須配置好JDK用到的那些環境變量 編輯/etc下的profile文件,加上如下內容: 修改tomcat

xshell遠程連接服務器Linux磁盤分區方案

telnet 配置文件 但是 type rom pre 虛擬 分區 引導 一,設置xshell進入xshell,選擇文件,打開,新建。改會話名稱,並改主意主機ip;二,遠程連接服務器故障排查1,ip地址,也就是服務器的位置,地址;1)公網ip:指所有人都可以訪問的ip,但是

在windowsLinux安裝nodejs

兩個文件 tro window 顯示 name 測試 分享 如圖所示 運行 在windows下安裝nodejs 1.首先下載nodejs安裝包, https://nodejs.org/en/download/ 點擊下載相應的版本 然後將文件夾解壓到安裝目錄(任

linux部署Nginx以及相關簡介

配置 quest 上傳文件 reload 就是 conn 動靜 config html 1、安裝工具包   yum install -y wget  下載工具   yum install -y vim-enhanced  vim編輯器   yum install -y ma

python在windowslinux的安裝配置

str net .net cat ria 技術 連接 top 成功 一、windows下安裝python3.6 安裝編輯器:Ecplise+pydev插件 Eclipse是寫JAVA的IDE, 這樣就可以通用了,學習代價小。 學會了Eclipse, 以後寫Pytho