Djangoアプリケーションをデプロイする方法:

皆さんにご挨拶はいかがでしょうか。これは <» FromLinux での私の最初の記事です (下書きにいくつかある xD)。お役に立てば幸いです 

さて、私の新しい現在の仕事では、現在、いくつかのシステムのDjangoへの移行が実行されており(どのように奇妙なええ?? xD)、開発以外の私のタスクのXNUMXつは、これらの生産に投入することです。実サーバーでアプリケーションを本番環境に移行するのは初めてだったので、良い見習いです。$スタックの必要な各パッケージ(GunicornとSupervisord)の公式ドキュメントを読み始め、チュートリアルを確認しました。スペイン語では、いくつかの面であまり明確ではありませんでした。Django、Gunicorn、Supervisord、Nginx、Postgresqlのスタックに基づいて、アプリケーションを本番環境に移行するための手順を記載したミニガイドを作成することにしました。

私が働いている場合、サーバーはまだDebian Squeezeを実行していますが、ガイドは他のディストリビューションでも完全に有効であるはずです...それでは、要点に直接取り掛かり、始めましょう。

私はスーパーユーザーとして働きます。 まず、次のパッケージが必要です。

PIP -> Pythonのパッケージをインストールおよび管理するためのツール
aptitude install python-pip

nginx -> Webサーバー(リバースプロキシとして使用し、静的ファイル 'img、js、css'をキャッシュします)次のコマンドでインストールします。
aptitude install nginx

スーパーバイザー ->アプリケーションを管理および監視するためのアプリケーションですが、さらに多くの用途に使用されます。 私たちはそれをインストールします:
aptitude install supervisor

仮想環境 ->アプリケーション用にカスタマイズされた仮想実行環境を作成するのに役立ちます。 私たちはそれをインストールします:
aptitude install python-virtualenv

ユニコーン -> python用のWebサーバー(これはまだインストールしません)

postgresqlがすでにインストールおよび構成されている必要があると思います

psychopg2 -> Python用のPostgresqlコネクタ(まだインストールしません)

virtualenvを使用して仮想環境を作成します。

まず、本番環境に移行するために使用する作業ディレクトリに移動します。
cd /var/www/

次に、このディレクトリに仮想環境を作成します。
virtualenv ENV-nombreApp

virtualenvを作成したばかりのディレクトリに移動します
cd ENV-nombreAPP

このディレクトリにアプリケーションをコピーし、次の方法で環境のアクティブ化に進みます。
source bin/activate

プロンプトは次のようになります。 (ENV)usuario@host:

これにより、私たちが行うすべてのことがディレクトリに保存されるようになります / var / www / ENV-アプリ名/ システムパッケージに影響を与えることなく

次に、アプリケーションディレクトリに移動します。
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

監視対象の構成:

それでは、 スーパーバイザー、そのために構成ファイルを生成します

echo_supervisord_conf > /etc/supervisord.conf

次に、構成ファイルを編集します。
vim /etc/supervisord.conf

そして、;を削除して、次の行のコメントを解除します。 (セミコロン):

[unix_http_server] file = / tmp / Supervisor.sock [supervisord] logfile = / var / log / Supervisord.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel = debug pidfile = / var / run / Supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface:supervisor] Supervisor.rpcinterface_factory = Supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl = unix:[program:appname] command = / 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 user =ユーザー名redirect_stderr = true stdout_logfile = / var / www / logs / appname / Supervisord.log

次に、supervisordがシステムで開始するためのスクリプトを作成します。そのために、ファイルを作成します。
vim /etc/init.d/supervisord

そして、次のコンテンツを追加します。

 #supervisord auto-start ## description:auto-startssupervisord#processname:supervisord#pidfile:/var/run/supervisord.pid SUPERVISORD = / usr / local / bin / Supervisord SUPERVISORCTL = / usr / local / bin / Supervisorctl case $ 1 in start)echo -n "Starting Supervisord:" $ SUPERVISORD echo ;; stop)echo -n "Stopping Supervisord:" $ SUPERVISORCTL shutdown echo ;; restart)echo -n "Stopping Supervisord:" $ SUPERVISORCTL shutdown echo echo -n "Starting Supervisord:" $ 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_namewww.domain.comをリッスンするポート。 #または192.168.0.100、access_log / var / log / nginx / Appname.access.logにアクセスするアドレス。 #アプリケーションログの場所があります/ {#www.dominio.com / proxy_passhttp://127.0.0.1:8001にアクセスするときにnginxが呼び出す場所; proxy_set_headerホスト$ http_host; } location / static / {#www.dominio.com / static / alias / var / www / ENV-appname / appname / staticfiles /;と入力したときにnginxがアクセスする場所}}

そして、nginxを再起動します。
service nginx restart

Djangoのセットアップ:

django構成ファイルを変更してみましょう:
vim nombreApp/settings.py

私たちは言う行を探します デバッグ = 真 値を変更します、残り デバッグ = 偽

DBパラメータを追加します。

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 '、そこにすべての静的ファイルがあります。

そして最後に、スーパーバイザを再起動して新しい変更を加えます。
supervisorctl restart nombreApp

それはそれで、結局のところ、それは大したことではありませんでしたね?私には簡単そうに見えました 

お役に立てば幸いです、ご挨拶 

GUnicornのドキュメント

監督された文書


Googleで優先ソースとして追加する