Django應用部署
python manage.py runserver已經很接近於伺服器的形式,但是並不能支援外網訪問或多人同時訪問。因此需要將網站部署到伺服器上,而django在本地使用runserver執行和部署到伺服器在配置檔案上是不同的。
目前比較流行的部署、執行Django應用方式是基於Apache的mod_wsgi模組。
但更加高效、彈性,同時又更加複雜的方式是使用以下工具來部署實施:Nginx、Gunicorn、virtualenv、supervisor、Postgresql。
以下詳細介紹如何結合這些工具來部署Django應用到windows上(linux系統也類似)。
安裝和配置虛擬環境
前提是已經安裝了python3(或者python2+pip)
pip install virtualenv
Note:virtualenv安裝完成後不要將外面的python解除安裝了,但外面的python可以修改成python2
e:\mine\python_workspace >virtualenv venv
進入並激活虛擬開發環境
windows:
env\Script\activate.bat
Linux(mac os):
source env/bin/activate
mingw(git):
venv >source Scripts/activate
安裝Django並配置Django專案
虛擬環境中pip安裝Django
(venv) pip install Django
Note: pip install Django==1.7.9指定版本安裝(lz用的是1.7.9版本的django)
python
import django
django.VERSION
沒有發生錯誤,證明已經成功安裝Django了
2. 安裝包安裝
只要還在virtualenv環境裡,安裝Django的步驟跟實際安裝Django的步驟完全一樣。可以參考官網的步驟。其實就是下載,然後輸入命令列的事。
https://docs.djangoproject.com/en/1.4/topics/install/#installing-a-distribution-specific-package
1. Download the latest release from our download page.
2. Untar the downloaded file (e.g. tar xzvf Django-X.Y.tar.gz, where X.Y is the version number of the latest release). If you're using Windows, you can download the command-line tool bsdtar to do this, or you can use a GUI-based tool such as 7-zip.
3. Change into the directory created in step 2 (e.g. cd Django-X.Y).
4. If you're using Linux, Mac OS X or some other flavor of Unix, enter the command sudo python setup.py install at the shell prompt. If you're using Windows, start a command shell with administrator privileges and run the commandpython setup.py install. This
will install Django in your Python installation's site-packages directory.
安裝完Django 以後,用deactivate命令,退出virtualenv。
虛擬環境目錄venv中建立Django專案
django-admin.py startproject labsite
移植:git clone [email protected]:***.git
或者直接將已有的Django專案目錄copy到venv目錄中
生產環境中django的相關設定修改
關閉debug
為了安全起見,部署到伺服器前需要關閉debug模式,即修改settings.py檔案中的
DEBUG = False
TEMPLATE_DEBUG = False
當然,我們也可以重新建一個設定檔案,如settings_production.py用於生產環境。在這個py檔案中設定DEBUG為False。
當DEBUG= True時,預設使用的是django自帶的404錯誤頁面,同時頁面中會顯示具體的錯誤資訊,可能會暴露隱私資訊,因此需要關閉這一功能。關閉後如果出現404錯誤,django會在你的模版根目錄中尋找名叫404.html的頁面。因此,關閉了DEBUG功能後我們需要在根目錄中新增有意義的404頁面。
django在Debug功能關閉後就會自動停止staticfiles功能,因此這時候會發現runserver後網頁中的靜態檔案都沒有了。
到這一步的時候如果不需要部署到伺服器上只想在電腦上測試可以使用命令python manage.py runserver –insecure網頁中就會正確顯示css,js等靜態檔案。
修改允許的HOST
DEBUG關閉後需要在修改ALLOWED_HOSTS = [ ‘127.0.0.1’ ]
安裝並配置資料庫相關模組(lz用的是mysql,其它資料庫類似)
首先下載安裝MySQL
django要求MySQL4.0或更高的版本。 3.X 版本不支援巢狀子查詢和一些其它相當標準的SQL語句。
Django中Mysql初始配置
我們需要告訴Django使用什麼資料庫以及如何連線資料庫。假定你已經完成了資料庫伺服器的安裝和啟用,並且已經在其中建立了資料庫(例如,用 CREATE DATABASE books;)。 如果你使用SQLite,不需要這步安裝,因為SQLite使用檔案系統上的獨立檔案來儲存資料。
資料庫配置也是在Django的配置檔案裡,預設 是 settings.py 。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'books', #這裡不要用絕對路徑!
'USER': 'pipi',
'PASSWORD': '********',
'HOST': '',
'PORT': '',
}
}
配置資料庫連線外掛MySQL
需要安裝對應的mysql資料庫外掛。MySQLdb還不支援python3,所以用的是替代品PyMySQL。
1. 在虛擬環境中安裝mysql資料庫介面卡:
e:\mine\python_workspace\venv >pip install pymysql
2. 在上面建好的django專案的init.py中加入(maybe not):
import pymysql
pymysql.install_as_MySQLdb()
注意根據上面的連結中的三個步驟構建Django的初始化資料庫
配置資料庫圖片相關庫
pip install pillow
Note:否則在資料庫model中不能使用ImageField
配置後臺管理模組
如果使用巢狀關聯物件nested inline,安裝django-nested-inline
pip install django-nested-inline
windows下的安裝部署
可以參考使用apache+mod_wsgi相關文章[django部署]配置好mod_wsgi後,只要將django相關路徑新增到apache配置檔案httpd.conf中就可以啟動apache使用django。
Apache的安裝和啟動執行
安裝Apache 2.4
MSI Installer安裝
1. Run the msi installer.
2. Apache should now be seen in your computers Program Files directory under
[PROGRAM_FILES]\Apache Software Foundation\Apache2.4. This full path to Apache is known as theServer Root.
Zip File安裝
1. Download the appropriate zip file for your system architecture.
2. Extract the Apache24 directory to the desired location of the Apache installation. The full installation path that you use is known as the Server Root. For the purposes of these steps we will refer to the Server Root path as [SERVER_ROOT].
3. Open a command prompt as an Administrator. Go to [SERVER_ROOT]/bin and run the command httpd -k install.
啟動Apache
三種方法:
1. 手動啟動Apache
httpd -k start
2. 使用apache自帶的啟動停止工具
D:\Apache24\bin\ApacheMonitor.exe在圖形介面下控制apache。
Note:如果出現the requested operation has failed!可能是因為系統中python沒有安裝、安裝版本不對、安裝路徑改變了。
3. ApacheGUI圖形管理介面安裝和使用(可選)
Apache Web 伺服器管理工具,是一個免費開源的 Web 工具,用來幫助管理 Apache HTTP 伺服器。
1. Unzip the ApacheGUI archive to a directory of your choice. We will refer to this directory as [APACHEGUI_HOME] in the following installation steps.
2. To start the web tool go to [APACHEGUI_HOME]/bin and run the batch file
run.bat. Once the GUI has started it may be accessed through http://localhost:9999/ApacheGUI/
3. To stop the web tool go to [APACHEGUI_HOME]/bin and run the batch file stop.bat
4. 開啟http://localhost:9999/ApacheGUI/後輸入server root:如D:\Apache24(包含conf資料夾的目錄)。name和password自己設定即可。
Note:
1. 要安裝java並配置JAVA_HOME相關路徑才能正常執行apachegui[]
2. 要顯示ApacheGUI完整內容,IE的安全-Internet安全設定不能太高。禁用的東西太多可以GUI介面顯示不全。
3. 如果restart失敗可能是因為系統中python沒有安裝、安裝版本不對、安裝路徑改變了。
linux下安裝部署django應用
可以參考下面的部署步驟,因為gunicorn不能在windows下執行
配置Python WSGI 應用伺服器 - Gunicorn
在生產環境中,我們將不會使用Django自帶的單執行緒的開發伺服器(python manage.py runserver),而是使用專門的Python WSGI 應用伺服器——gunicorn
[gunicorn的詳細介紹Gunicorn]
在你的應用的虛擬環境中安裝gunicorn
pip install gunicorn
windows下要下載fcntl.py檔案放到虛擬環境PYTHONPATH路徑即可,如E:\mine\python_workspace\venv\Lib目錄下。
安裝成功後可以測試下gunicorn是否可以執行Django 應用,在專案hello目錄下執行以下命令:
(hello_django)[[email protected] hello]$ gunicorn hello.wsgi:application --bind localhost:8001
通過訪問http://localhost:8001 ,可以訪問到你的Gunicorn伺服器。此處特意將埠從8000改為8001是為了迫使瀏覽器建立一個新的連線。
Gunicorn現在已經準備好執行你的app,現在可以配置一些選項來使得Gunicorn更加有用。此處通過編寫一個shell指令碼來設定一些引數,指令碼儲存為/django_webapps/hello_django/bin/gunicorn_start:
#!/bin/bash
NAME="hello_app" # Name of the application
DJANGODIR=/django_webapps/hello_django/hello #Django project directory
SOCKFILE=/django_webapps/hello_django/run/gunicorn.sock #unix socket fro communication
USER=django # the user to run as
GROUP=django_webapps # the group to run as
NUM_WORKERS=5 # how many worker processes should Gunicorn spawn
DJANGO_SETTINGS_MODULE=hello.settings # which settings file should Django use
DJANGO_WSGI_MODULE=hello.wsgi # WSGI module name
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source ../bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--log-level=debug \
--bind=unix:$SOCKFILE
為該指令碼增加可執行許可權:
chmod u+x bin/gunicorn_start
以使用者django的身份來執行這個指令碼:
su - django
bin/gunicorn_start
Starting hello_app as django
2014-06-15 15:17:20 [18037] [INFO] Starting gunicorn 18.0
2014-06-15 15:17:20 [18037] [DEBUG] Arbiter booted
2014-06-15 15:17:20 [18037] [INFO] Listening at: unix:/django_webapps/hello_django/run/gunicorn.sock (18037)
2014-06-15 15:17:20 [18037] [INFO] Using worker: sync
2014-06-15 15:17:20 [18048] [INFO] Booting worker with pid: 18048
2014-06-15 15:17:20 [18049] [INFO] Booting worker with pid: 18049
2014-06-15 15:17:20 [18050] [INFO] Booting worker with pid: 18050
2014-06-15 15:17:20 [18051] [INFO] Booting worker with pid: 18051
2014-06-15 15:17:20 [18052] [INFO] Booting worker with pid: 18052
^C
2014-06-15 15:17:51 [18052] [INFO] Worker exiting (pid: 18052)
2014-06-15 15:17:51 [18051] [INFO] Worker exiting (pid: 18051)
2014-06-15 15:17:51 [18037] [INFO] Handling signal: int
2014-06-15 15:17:51 [18048] [INFO] Worker exiting (pid: 18048)
2014-06-15 15:17:51 [18049] [INFO] Worker exiting (pid: 18049)
2014-06-15 15:17:51 [18050] [INFO] Worker exiting (pid: 18050)
2014-06-15 15:17:51 [18037] [INFO] Shutting down: Master
註解:需要按照你自己的設定來修改指令碼的路徑和檔名。
-
--workers的設定一般是按照2*CPUS+1,我的cpu為雙核,所以設定為5.
-
--name(NAME)為你的應用在某些程式(top,ps)中的標識,預設為gunicorn,此處設定為hello_app以便與其他gunicorn應用區別開來。
-
為了能夠設定--name,需要安裝一個名為setproctitle的Python模組:pip install setproctitle
通過ps可檢視到哪個gunicorn屬於哪個應用:
ps aux | grep hello_app
django 15226 0.0 0.2 15184 8068 ? S Jun13 0:25 gunicorn: master [hello_app]
django 15237 0.0 0.4 27636 16556 ? S Jun13 0:01 gunicorn: worker [hello_app]
django 15238 0.0 0.4 27640 16592 ? S Jun13 0:02 gunicorn: worker [hello_app]
django 15239 0.0 0.4 27644 16600 ? S Jun13 0:01 gunicorn: worker [hello_app]
django 15240 0.0 0.4 27656 16624 ? S Jun13 0:01 gunicorn: worker [hello_app]
django 15242 0.0 0.2 19276 10820 ? S Jun13 0:01 gunicorn: worker [hello_app]
Note:
1. Gunicorn是一個開源的Python WSGI HTTP伺服器,移植於Ruby的Unicorn專案的採用pre-fork模式的伺服器。Gunicorn伺服器可與各種Web框架,包括django、flask、pyramid等。只要簡單配置執行,輕量級的資源消耗,而且相當迅速。與各個Web結合緊密,部署很方便。缺點不支援HTTP 1.1,併發訪問效能也不高。預設情況下,Gunicorn的工作程序是同步執行的模式,即單個程序在某個時間只處理一個請求。同時,Gunicorn也支援Gevent、Eventlet來實現非同步。
2. 關於WSGI:WSGI即Python Web server Gateway Interface,是Python專門的用於Python應用程式或框架與Web伺服器之間的一種介面,沒有官方的實現,因為WSGI更像一個協議,只要遵照這些協議,WSGI應用都可以在任何伺服器上執行,反之亦然。
Django安全配置
域名查詢和購買
相關推薦
Docker+Jenkins+Gitlab+Django應用部署實踐
一、背景介紹 在網際網路應用快速更新迭代的大背景下,傳統的人工手動或簡單指令碼已經不能適應此變化,此時Devops為我們提供了良好的解決方案,應用好CI/CD可以大大的方便我們的日常工作,自動化快速的持續整合/持續交付為我們帶來了應用開放的更快速度、更好的穩定性和更強的可靠性。 二、拓撲環境 2.1 架
Django應用部署
python manage.py runserver已經很接近於伺服器的形式,但是並不能支援外網訪問或多人同時訪問。因此需要將網站部署到伺服器上,而django在本地使用runserver執行和部署到伺服器在配置檔案上是不同的。 目前比較流行的部署、執行Django應用方
將 Django 應用程序部署到生產服務器
ftp wav script 數據表 登錄 項目文件 stc 促銷 參與 原文出自: http://www.ibm.com/developerworks/cn/opensource/os-django/ 比較有啟發性質的一篇文章,會避免很多彎路 Djang
如何在阿里雲上部署 Django 應用程式
關於 Django Django 是一個用 Python 語言寫的開源 Web 框架,可幫助開發人員在構想形成後僅數小時內啟動 Web 應用程式。它遵循模型檢視模板 (MVT) 來構建應用程式,這可降低 Web 開發的複雜性,同時可讓開發人員集中精力編寫應用程式。它為網站地圖、內容管理、使用者鑑權
Django+Ubuntu+Nginx+Gunicorn應用部署
Django是Python語言中最受歡迎的全棧式Web框架之一,過去部署Django應用一般採用Apache+mod_wsgi,但是由於有了Nginx出色的效能表現,Django也有了更先進的部署方式,比較常用的一種部署方案是Nginx+Gunicorn。 接下來我會詳細完整地介紹一個符合生
使用uwsgi部署Django應用
一、打包Django應用 1.建立setup.py檔案 from setuptools import setup import glob setup(name='blog', version='1.0', description='blog project', aut
【譯】在Heroku上部署Django應用(一)
title: 【譯】在Heroku上部署Django應用(1、配置) type: categories date: 2017-05-09 08:56:54 categories: Python tags: [Django, Heroku] H
在阿里雲上部署Django應用後,頁面403錯誤,始終無法載入靜態檔案的解決方案
設定好了 nignx uwsgi 還有一大堆亂七八糟的東西之後, 費勁九牛二虎之力,好不容易登上了自己寫的網站,結果卻發現,靜態檔案全都沒有加載出來… mdzz!!! 改來改去也改不好,萬般無奈,又在 bing 上搜索了一下,發現了另一個和我一樣蠢得同學
CentOS7 新機部署Django應用筆記
HOST [root@iZwz95v28cjpudhp2sikufZ ~]# hostctl status -bash: hostctl: 未找到命令 [root@iZwz95v28cjpudhp2sikufZ ~]# hostnamectl Sta
Django 應用開發(3)
images alt doc include 新的 logs end esp eat 1.編寫第一個視圖 打開polls/view.py 利用一個URLconf將這個視圖映射到URL上。 首先先創建一個urls.py文件 編寫polls/urls.py 編寫m
五步教你實現使用Nginx+uWSGI+Django方法部署Django程序
設置 wsgi alias admin 生效 server static 出現 mar 新建一個XML文件: djangochina_socket.xml,將它放在/data/www/org_management目錄下: Nginx采用8077端口與uWSGI通訊,請確保此
【Head First Servlets and JSP】筆記 26: web 應用部署
ins servlet schema servlets pre cati www 錯誤 b- 【須知】 物理目錄結構與虛擬目錄結構的差異 WAR 實際上就是 JAR 什麽東西應該放在 WEB-INF 文件夾下? 【了解】 <mime-mappin
rancher初級(搭建+基本操作+web應用部署)
進行 span png nbsp 添加數據 tar test 密碼 保持 Rancher搭建 首先rancher需要安裝了docker的linux環境,我的系統版本為 在docker的基礎上啟動rancher服務器,Rancher 服務器是一個 Docker image,所
Django線上部署系統環搭建
建立 如果 wrap 是否 libtool 下載 free 使用 ram Django線上部署系統環搭建 本文大致分為:系統環境準備、Python3安裝配置、Virtualenv基本使用 、git基本使用 四部分。 ps: 也可使用virtualenvwrapper代
2 Django應用 第1部分
入口 ews font 字段 cfile pre 添加 顯示 htm 目標應用: 一個公開的網站,可以讓訪客查看投票的結果並讓他們進行投票。 一個後臺管理網站,你可以添加、修改和刪除選票。 查看django版本 python -c "import djang
django的部署以及和docker 的集成
logs txt 沒有 build 目錄 buffered .html 註意 uil 開發環境:ubuntu14 python3 首先安裝docker,docker-compose 如果不懂,詳見 DOCKER官網 接下來安裝django 通過pip安裝 s
服務器應用部署規範
單獨 -a eve 參數 版本控制 運行 數據分區 自身 res 存儲 將應用以及相關的數據統一放置於數據目錄 /data 內。 使用阿裏雲的話,應添置獨立數據磁盤,如果是獨立服務器,應單獨設置數據分區。禁止將應用放置於服務器的系統磁盤內。 目錄設置 在/data下
Win10 iot 配置防火墻限制應用部署
style block all rop 問題 als spl 訪問ip es2017 最近在玩樹莓派接大觸摸屏 發現一個問題,vs 在 iot 上部署應用,使用的是 Universal (Unencrypted Protocol) https://docs.micro
.NET Core容器化之多容器應用部署-使用Docker-Compose
gre server rebuild asp ack 進行 add view created 1.引言 緊接上篇.NET Core容器化@Docker,這一節我們先來介紹如何使用Nginx來完成.NET Core應用的反向代理,然後再介紹多容器應用的部署問題。 2.
1、Python大數據應用——部署Hadoop
自動化運維 python 大數據 Hadoop Python大數據應用簡介 簡介:目前業界主流存儲與分析平臺以Hadoop為主的開源生態圈,MapReduce作為Hadoop的數據集的並行運算模型,除了提供Java編寫MapReduce任務外,還兼容了Streaming方式,可以使用任意腳本語