nginx + gunicorn + upstartでdjangoを走らせる

はじめに

Djnagoでつくったアプリケーションはロカールの開発環境であれば、アプリケーション階層内において

で立ちあがります。
今回は、ローカル開発環境でつくったDjangoアプリケーションを本番のサーバー環境などにおいてデプロイするときの一方法を紹介します。

早速ですが、今回はWebサーバーにnginxを用います。また、Djangoをlocalhostの8000番ポートでupstartによって、gunicornを用いて立ち上げます。そして、最後にnginxのリバースプロキシの設定をすることでWebサーバーのデフォルトポートである80番へアクセスするとDjnagoアプリケーションが見れるようにしていきたいと思います。

 

それでは、やっていきましょう。

1,Nginxのインストール

まずは、サーバー環境を適宜用意します。今回はCentOs7を用いたのでyumを使ってnginxをインストールします。Ubutuなど使っている場合は、apt-getでインストールしてください。

インストールができたら起動できるか確認しておきましょう。

このコマンドを実行し、「OK」の表示がでたら大丈夫です。

2,Nginxの設定

nginxのインストールが完了したら、次にリバースプロキシの設定をしていきます。
/etc/nginx/内のnginx.confを編集していきます。

それでは、vimでnginx.confを開いて、ファイルの中身を次のように編集します。
基本的なリバースプロキシの設定をしていきます。

この設定では、domain.com:80ポートへのリクエストがきたときに、upstream app_serverで設定した127.0.0.1:8000を見に行くようになっています。

3、Djnagoの設定

次にDjangoをgunicornを使って立ち上げられるように設定していきましょう。
今回はDemoという名前のプロジェクトを作成し、そのプロジェクト内でbaseというアプリケーションをつくります。
階層は以下のようになっています。

まずは、Djangoアプリケーションを立てるpython環境において、gunicornをインストールします。

インストールができたら、djangoプロジェクトのsettings.pyにおけるINSTALLED_APPSにgunicornを追加します。

これでDemo/にてgunicorn をつかって立ち上がるかテストしてみましょう。

うまく立ち上がるとコンソール上に以下のような表示が出力されます。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-11-17-38-57

ちなみにhostやportは-bオプションで設定できます。

 

4、upstartの設定

ここまでで、Djangoをgunicornから立ち上げることができました。
しかし、いまのままでは、立ち上げているサーバーから抜けるとdjangoのアプリケーションも止まってしまうので、
自動で常に起動しておけるように設定をしていきましょう。

このための設定等に関しては、方法がいくつかあり、ドキュメントにも紹介されているので、参考にしてみてください。

ここではupstartを使って自動起動できるように設定していきます。

まずは、/etc/initに移動しましょう。

そしてinitctlコマンドを以下のように実行してみてください(一般に、root権限が必要)

そうすると、以下のようにinit設定で立ち上がっているタスク一覧をみることができます。
左側にタスク名、右側に状態(start/running or stop/waiting)が確認できるかと思います。

また、/etc/initにてlsコマンドを実行してみると上で表示されたタスクの設定が記述されたファイルが確認できます。
上のタスクは一般にinitctlのタスクに登録しておけば、起動時に設定が反映されます。
そして、このタスクの登録は/etc/itit内にその設定ファイルを作っておくだけで反映されるので、
djangoを立ち上げるようのタスクも登録しておきましょう。

によりdemo-app.confを作成し以下のように設定していきましょう。
 

ここで、/path/to/gunicornは

で取得できます。
編集が完了したら保存して、
次のコマンドでinitctlによりこの設定を反映し、djangoアプリケーションが立ち上がるか確認しましょう。

ちなみに停止は、こちらのコマンドです。

5,確認

ここまで設定できたら、この・サーバー環境のドメイン名にアクセスして
djangoがアプリケーションが立ち上がっているの確認できたら完了です。