如何部署Django應用程序:

向大家問好,這是我在 <» FromLinux 中的第一篇文章(我的草稿中有幾篇文章 xD),我希望它對你有用 

好吧,在我目前的新工作中,目前正在執行將多個系統遷移到Django的工作(多麼奇怪eh ?? xD),除了開發,我的任務之一就是將這些系統投入生產,然後作為一名好徒弟,因為這是我第一次將應用程序投入生產在真實服務器上:$我開始閱讀堆棧中每個必需軟件包(Gunicorn和Supervisord的大多數)的正式文檔,並看到教程在西班牙語中,它們在某些方面對我不太清楚,我決定根據Django,Gunicorn,Supervisord,Nginx和Postgresql堆棧創建一個迷你指南,其中包含按照我將應用程序投入生產的步驟。

在我工作的情況下,服務器仍在運行Debian Squeeze,但是該指南對於其他發行版應該是完全有效的...因此,讓我們直接開始吧:

我將以超級用戶身份工作。 首先,需要以下軟件包:

PIP ->安裝和管理Python軟件包的工具
aptitude install python-pip

Nginx的 -> Web服務器(我們將其用作反向代理,並緩存靜態文件“ img,js,css”),我們使用以下命令進行安裝:
aptitude install nginx

Supervisord ->用於管理和監視我們的應用程序的應用程序,儘管它用於更多用途。 我們通過以下方式安裝它:
aptitude install supervisor

虛擬環境 ->它可以幫助我們為應用程序創建自定義的虛擬執行環境。 我們通過以下方式安裝它:
aptitude install python-virtualenv

Gunicorn -> Python Web 伺服器(我們暫時不會安裝它)

我認為他們應該已經安裝和配置了postgresql

psycopg2 -> Python 的 PostgreSQL 連接器(我們暫時也不會安裝它)

使用virtualenv創建虛擬環境:

首先,我們將移至將用於生產的工作目錄:
cd /var/www/

然後,在此目錄中,我們將創建虛擬環境:
virtualenv ENV-nombreApp

我們移到我剛剛創建的virtualenv目錄
cd ENV-nombreAPP

我們將應用程序複製到此目錄中,現在我們使用以下方法激活環境:
source bin/activate

提示現在看起來應該像 (ENV)usuario@host:

這將確保我們所做的所有操作都儲存在/var/www/ENV-appname/目錄中,而不會影響系統套件。

現在我們轉到應用程序目錄:
cd nombreApp

我們繼續安裝應用程序依賴項列表(如果需要),在文件中指定依賴項列表 requirements.txt:
pip install -r requirements.txt

我們還可以單獨安裝軟件包,例如,安裝 PostgreSQL的:
pip install psycopg2

GUnicorn安裝和配置:

要安裝它,我們以相同的方式進行:
pip install gunicorn

現在我們來配置它。為此,我們將在應用程式根目錄下建立一個名為gunicorn-deploy.py的檔案(檔案名稱可以隨意),並添加以下內容:

bind = "127.0.0.1:8001" # dirección a donde accederá Nginx
logfile = "/var/www/logs/nombreApp/gunicorn.log" # dirección donde estarán los logs de la aplicación
workers = 1 # dependerá en medida de la carga de trabajo que tenga la aplicación, también depende del hardware con que se cuente
loglevel = 'info' # tipo de logging

Supervisord配置:

現在我們來設定supervisord;為此,我們產生設定檔。

echo_supervisord_conf > /etc/supervisord.conf

現在,我們編輯配置文件:
vim /etc/supervisord.conf

我們通過刪除來取消註釋以下幾行: (分號):

[unix_http_server]文件= /tmp/supervisor.sock [supervisord]日誌文件= / var / log / supervisord.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel =調試pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface:主管] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl = unix:[program:appname]命令= / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -appname / appname / gunicorn-deploy.py目錄= / var / www / ENV-appname / appname / autostart = true autorestart = true用戶=用戶名redirect_stderr = true stdout_logfile = / var / www /日誌/ appname / supervisord.log

現在,我們將為supervisor創建腳本以從系統開始,為此我們將創建文件:
vim /etc/init.d/supervisord

我們添加以下內容:

 #Supervisord自動啟動##描述:自動啟動超級用戶#進程名:超級用戶#pidfile:/var/run/supervisord.pid SUPERVISORD = / usr / local / bin /超級用戶SUPERVISORCTL = / usr / local / bin /超級用戶案例$ 1在開始)echo -n“正在啟動監督:” $ SUPERVISORD echo ;; 停止)echo -n“停止監視:” $ SUPERVISORCTL shutdown echo ;; 重新啟動)echo -n“正在停止監視:” $ SUPERVISORCTL關閉echo echo -n“正在開始監視:” $ SUPERVISORD echo ;; 那C

現在,我們授予文件執行權限,使其可以從系統啟動:
sudo chmod +x /etc/init.d/supervisord

我們更新鏈接以啟動服務:
sudo update-rc.d supervisord defaults

我們啟動服務:
sudo /etc/init.d/supervisord start

設置nginx:

這一步驟也很簡單;我們將為我們的應用程式建立以下nginx設定檔:

vim /etc/nginx/sites-enabled/nombreApp

我們將為您添加以下內容

服務器{聽9001; #他們希望nginx server_name監聽www.domain.com的端口; #或192.168.0.100,我們將訪問的地址access_log /var/log/nginx/Appname.access.log; #我們將在其中找到應用程序日誌的位置/ {#訪問www.dominio.com/ proxy_pass http://127.0.0.1:8001時,nginx將在其中調用; proxy_set_header主機$ http_host; } location / static / {#當我們輸入www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /時,nginx將在其中訪問; }}

然後我們重新啟動nginx:
service nginx restart

設置Django:

讓我們修改django配置文件:
vim nombreApp/settings.py

我們找到DEBUG = True的那一行,並將其值改為DEBUG = False。

我們添加數據庫參數:

DATABASES = {'default':{'ENGINE':'django.db.backends.postgresql_psycopg2',#或mysql,或任何他們使用的'NAME':'DBName','USER':'DBUser','PASSWORD' :'password DB','HOST':'localhost',#或他們需要的一個'PORT':'',#或他們正在使用的一個}}

我們查找ALLOWED_HOSTS=[]這行,並加入我們將要存取的網域名稱或位址,結果類似於ALLOWED_HOSTS=['www.domain.com']

我們為靜態文件配置目錄,我們尋找顯示以下內容的行 STATIC_ROOT = ' ' 然後我們更改該值,將絕對路徑放置在我們希望我們的靜態文件所在的位置,在我的情況下,我或多或少地將其保留為 STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

差不多完成了,我們執行以下命令:
./manage.py collectstatic

這將在我們settings.py中指定的路徑下建立一個名為「statics」的資料夾所有靜態檔案都將存放在這裡。

最後,我們重新啟動主管以進行新的更改:
supervisorctl restart nombreApp

就這樣吧,最終也沒什麼大不了的,對吧?對我來說這似乎很簡單 

希望對您有用,問候

GUnicorn文檔

主管文檔


在 Google 中將其新增為首選來源