【前編】【Django+Nginx+Gunicorn】アプリケーションをEC2へデプロイしよう

Linux

 

Djangoでアプリケーションを作成したのでサーバーへデプロイします

ただ、サーバーへのデプロイ方法は本に書いてないこともあり、
Linux等の知識も必要なため、なかなかハードルが高いです。。。

そこで、Djangoをサーバーへデプロイする方法をご紹介します

 

 

システムのイメージ

 

 

(各役割)

Nginx:ユーザーからのアクセスに対して、静的ファイルを呼び出す or Gunicorn へ処理を振る

GunicornDjango と Nginx をつなぐもの

Django:Pythonのフレームワーク

PostgreSQL:Djangoが使用するデータベース

 

なので、

  1. ユーザーがブラウザからアクセスする
  2. Nginx で処理する
  3. Pythonを呼び出す場合はGunicorn 経由でDjangoに処理を振る
  4. ユーザーにレスポンスを返す

というのが今回のシステムのイメージです

 

デプロイの流れ

 

(前提)

Djangoでアプリを作成済み

 

  1. デプロイするために、Djangoのソースを変更する
  2. EC2(サーバー)を起動する
  3. EC2に nginx, Python, postgreSQL をインストールする 
  4. ソースをアップロードする
  5. PostgreSQL の設定をする
  6. Gunicorn をインストールする
  7. Django をデーモン化する
  8. Nginx の設定をする
  9. ブラウザからアクセスして確認する

 

Djangoの準備をする

 

以下のことを行います

  1. 環境ごとに読み込む設定ファイルを変える
  2. ライブラリ情報を書き出す
  3. Django プロジェクトを zip にする

 

環境ごとに読み込む設定ファイルを変える

 

DEBUGやDATABSEなど、
ローカル環境とサーバーにデプロイ後で値を変えたいものがあると思います。

デフォルトのままだと、settings.pyという1つのファイルになっており、
環境ごとに値を分けることが難しいです。

そこで、以下の手順でsettings.pyの構成を変更します

 

(手順)

  1. settingsディレクトリを作成し、その中に環境ごとのファイルを作成する
  2. base.pyには共通の設定値を記載する
  3. dev.py, production.pyには環境ごとの設定値を記載する
  4. manage.py , wsgi.py を修正する

 

settingsディレクトリを作成し、その中に環境ごとのファイルを作成する

 

  1. settings.py がある階層に settings ディレクトリを作成する
  2. settings.py → base.py にリネームし、settings ディレクトリに移動する
  3. settingsディレクトリに __init__.py , dev.py , production.py を作成する

 

base.py   :どの環境でも共通の設定
dev.py       :ローカル環境固有の設定
production.py:サーバー上の環境固有の設定

 

(作業前)

 

(作業後)

 

base.pyには共通の設定値を記載する

 

BASE_DIR , INSTALLED_APPS , MIDDLEWARE など
環境に左右されない値をbase.pyに残します

また、manage.py の場所を示す BASE_DIR の値を変更します。

理由は、デフォルトの設定ではbase.py(旧settings.py)の1つ上の階層を指定しているからです。

先ほど、ディレクトリの階層を1つ深くしましたので、
現在はbase.pyから見ると2つ上の階層にmanage.pyがあるため、そのように値を修正します。

 

 

dev.py, production.pyには環境ごとの設定値を記載する

 

1行目に下記を記載して、base.pyの値を読み取るようにします。

 

あとは、環境固有の値を記載していきます

具体的には

  • SECRET_KEY
  • DEBUG
  • DATABASES
  • ALLOWED_HOSTS
  • STATIC_ROOT, STATIC_ROOT
    など…

 

ローカル環境で、django-silkdjango-debug-toolbar を使用している場合は
dev.pyに以下を記載しましょう

 

production.pyには、以下の値を指定しましょう

 

manage.py , wsgi.py を修正する

 

デフォルトでlocal環境の設定を読み込むように2つのファイルを修正します

 

 

ライブラリ情報を書き出す

 

Djangoプロジェクトのルートディレクトリmanage.pyと同じ階層)
下記のコマンドを使用してライブラリの情報をテキストに出力します

 

実行すると、Djangoプロジェクトのルートディレクトリに requirements.txt が作成されます。

中身を見ると、環境にインストールしているライブラリとそのバージョンが記載されています

 

このファイルをもとにサーバーのPythonにも同じライブラリをインストールします

 

 

Django プロジェクトを zip ファイルにする

 

エクスプローラーでzip化していきます

  1. zip化したいフォルダをクリックする
  2. 送る」をクリックする
  3. 圧縮(zip 形式)フォルダー」をクリックする
  4. zipファイルが作成されます

 

 

LinuxやMacの場合、下記コマンドでzipファイルにできます

zip -r <zipファイル名> <zipファイルにしたいフォルダ>

 

これで、Djangoの下準備は完了です。

 

EC2を起動しよう

 

下記の記事を参考にEC2を起動します

 

また、コストがかかってしまうのですが、EIPを付与しておくと便利です

 

使用ツールのインストール

Nginx

 

下記の記事を参考にNginxをインストールします

 

Python

 

下記の記事を参考にPythonをインストールします

 

PostgreSQL

 

下記の記事を参考にPostgreSQLをインストールします

 

 

残りの作業は後編をご参考ください

【後編】【Django+Nginx+Gunicorn】アプリケーションをEC2へデプロイしよう
Djangoをサーバーへデプロイして、ブラウザからアクセスできるようにします。 後編では、ソースをアップロードして、 サーバーで動作するようになるまでをやってみます。 システムの概要やDjango・サーバーの下...

 

参考文献

 

【Django】Linuxサーバーへのデプロイ方法【NginxとGunicornを使う】
Djangoアプリをデプロイする手順とは? NginxとGunicornの使い方とは? 本記事ではこのような疑問を解決します。 Djangoアプリをデプロイする際に、簡単にできるのはHerokuなどのPaaS(Platform as a S
AWSにDjangoアプリケーションをデプロイ(Nginx, gunicorn, postgresql) - Qiita
デプロイ時に詰まりどころがいくつかあったのでとりあえずHTTPSで動くところまで1. AWSインスタンスを作成EC2インスタンスを作成。セキュリティグループを追加して22, 80, 443ポー…
[Django] settings.pyを環境毎に分割・切り替え方法。本番、開発、ローカル環境に分けてデプロイミスを防ぐ。 | Libproc
Django Settings.pyを分割する方法
Djangoではプロジェクト作成時にsettings.pyという設定ファイルが作成されます。このファイルを開発環境用、ステージング環境用、プロダクション環境用の様に環境に応じてに使い分けたい場合があります。settings.pyを分割して環境ごとに使い分ける方法を紹介します。

 

 

コメント

タイトルとURLをコピーしました