AWS Elastic BeanstalkでDjangoアプリをスケーラブルに運用する

2024-04-02

DjangoをApacheとmod_wsgiで使用する

必要なもの

  • Python 3.6以上
  • Django 3.2以上
  • Apache 2.4以上
  • mod_wsgi 4.0以上

手順

  1. mod_wsgiのインストール

    OSによってインストール方法は異なりますが、一般的には以下のコマンドでインストールできます。

    pip install mod_wsgi
    
  2. Apacheの設定ファイル(httpd.conf)に以下の内容を追加します。

    LoadModule wsgi_module modules/mod_wsgi.so
    
    <VirtualHost *:80>
        ServerName www.example.com
        DocumentRoot /var/www/example.com
    
        WSGIDaemonProcess example python-path=/var/www/example.com/venv/lib/python3.9/site-packages
        WSGIProcessGroup example
        WSGIScriptAlias / /var/www/example.com/wsgi.py
    
        <Directory /var/www/example.com>
            Require all granted
        </Directory>
    </VirtualHost>
    

    上記の設定例では、以下の設定を行っています。

    • LoadModule ディレクティブ: mod_wsgiモジュールをロード
    • <VirtualHost> ディレクティブ: バーチャルホストの設定
    • ServerName: バーチャルホスト名
    • DocumentRoot: ドキュメントルート
    • WSGIDaemonProcess: mod_wsgiデーモンプロセスの設定
    • WSGIProcessGroup: プロセスグループ名
    • WSGIScriptAlias: WSGIスクリプトのエイリアス
    • <Directory> ディレクティブ: ディレクトリの設定
    • Require all granted: アクセス許可
  3. WSGIスクリプトの作成

    以下の内容のwsgi.pyファイルを作成します。

    import os
    import sys
    
    path = '/var/www/example.com/venv/lib/python3.9/site-packages'
    if path not in sys.path:
        sys.path.append(path)
    
    os.environ['DJANGO_SETTINGS_MODULE'] = 'example.settings'
    
    from django.core.wsgi import get_wsgi_application
    
    application = get_wsgi_application()
    

    上記の設定例では、以下の設定を行っています。

    • sys.path に Django のライブラリパスを追加
    • DJANGO_SETTINGS_MODULE 環境変数を設定
    • get_wsgi_application 関数を使用して WSGI アプリケーションを取得
  4. Djangoプロジェクトの設定

    settings.py ファイルで、以下の設定を行います。

    ALLOWED_HOSTS = ['www.example.com']
    

    ALLOWED_HOSTS 設定に、アクセス許可するホスト名を設定します。

  5. Apacheの起動

    Apacheを再起動して設定を反映します。

    sudo service apache2 restart
    
  6. 動作確認

    ブラウザで http://www.example.com/ にアクセスして、Django アプリケーションが動作することを確認します。

補足

  • 上記の手順は基本的なものです。詳細は各ドキュメントを参照してください。
  • mod_wsgi にはさまざまな設定オプションがあります。詳細はドキュメントを参照してください。
  • 問題が発生した場合は、エラーメッセージの内容を調べて解決方法を探してください。


Django サンプルコード集

これらのサンプルコードを参考に、自分のDjangoアプリケーション開発を進めてください。

ヒント

  • サンプルコードをそのまま使うのではなく、自分の目的に合わせて改造してみましょう。
  • わからないことがあれば、Django公式ドキュメントやフォーラムなどを活用しましょう。
  • 積極的に他の開発者のコードを読んで、学びましょう。


Django を実行する他の方法

Gunicorn は、Python 製の WSGI サーバーです。軽量で高速なため、Django アプリケーションの実行によく使用されます。

Gunicorn を使用するには、以下の手順が必要です。

  1. Gunicorn をインストールする:
pip install gunicorn
  1. WSGI スクリプトを作成する:
import os
import sys

path = '/var/www/example.com/venv/lib/python3.9/site-packages'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'example.settings'

from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()
  1. Gunicorn を起動する:
gunicorn example.wsgi:application --bind 0.0.0.0:8000

uWSGI は、C++ 製の WSGI サーバーです。Gunicorn よりも高速で、多くの機能を備えています。

uWSGI を使用するには、以下の手順が必要です。

  1. uWSGI をインストールする:
pip install uwsgi
import os
import sys

path = '/var/www/example.com/venv/lib/python3.9/site-packages'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'example.settings'

from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()
  1. uWSGI を起動する:
uwsgi --socket 0.0.0.0:8000 --wsgi-file example.wsgi

Docker は、コンテナ化技術です。Docker を使用すると、Django アプリケーションを環境に依存せずに実行することができます。

Docker を使用するには、以下の手順が必要です。

  1. Docker をインストールする:

https://www.docker.com/get-started

  1. Dockerfile を作成する:
FROM python:3.9

RUN pip install django

COPY requirements.txt /app/requirements.txt

RUN pip install -r requirements.txt

COPY . /app

CMD gunicorn example.wsgi:application --bind 0.0.0.0:8000
  1. Docker イメージをビルドする:
docker build -t example .
  1. Docker コンテナを起動する:
docker run -p 8000:8000 example

これらの方法はそれぞれメリットとデメリットがあります。自分の環境や目的に合わせて最適な方法を選択してください。

その他の方法

  • Heroku
  • AWS Elastic Beanstalk
  • Google App Engine

これらのサービスは、Django アプリケーションを簡単にデプロイできるクラウドサービスです。

Django を実行する方法はたくさんあります。自分に合った方法を見つけて、Django アプリケーション開発を楽しみましょう。