Help us understand the problem. What is going on with this article?

Djangoの環境をDocker化する(Docker + Django + Gunicorn + nginx)その3

More than 1 year has passed since last update.

前回は、docker-compose.ymlを中心に記載しました。今回は、Djangoアプリケーションの設定を記載します。

下記で公開中です。記事と合わせて参考にして下さい。
Dockerize Django Environment


Djangoプロジェクトの初期化

1.Djangoプロジェクトの作成

  • docker-compose.ymlがあるディレクトリ下で以下のコマンドを実行します。
docker-compose run web django-admin.py startproject 任意のプロジェクト名 .
  • 実行後にホスト側のwebディレクトリ(Django用ディレクトリ)内が以下のようになります。
┣web
┃  ┗任意のプロジェクト名ディレクトリ
┃  ┗Dockerfile
┃  ┗requirements.txt
┃  ┗manage.py

2.PostgreSQLへ接続

  • 接続情報を手順1で作成したプロジェクトディレクトリ下にあるsettings.pyファイルに定義します。
任意のプロジェクト名ディレクトリ/settings.py
# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases

DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.postgresql',
         'NAME': 'postgres',
         'USER': 'postgres',
         'HOST': 'postgres',
         'PORT': 5432,
     }
 }

3.WSGIサーバ(アプリケーションサーバ)の設定

  • 今回、WSGIサーバはGnicornを使用します。
    • WSGIとは、Web Server Gateway Interfaceの略です。名前の通り、webサーバとwebアプリケーションの間の汎用的なインターフェースです。
任意のプロジェクト名/settings.py
WSGI_APPLICATION = '任意のプロジェクト名.wsgi.application'

4.コンテナを立ち上げる

ここまで、設定が出来たらコンテナを立ち上げます。

docker-compose up


アプリケーションを作成する

  1. いよいよアプリケーション開発に着手します。下記のコマンドを実行してアプリケーションを作成します。
docker-compose run web python manage.py startapp 任意のアプリケーション名
  • 実行後にホスト側のwebディレクトリ(Django用ディレクトリ)内が以下のようになります。
┣web
┃  ┗任意のプロジェクト名ディレクトリ/
┃  ┗Dockerfile
┃  ┗requirements.txt
┃  ┗manage.py
┃  ┗任意のアプリケーション名ディレクトリ/
┃  ┃  ┗__init__.py
┃  ┃  ┗admin.py
┃  ┃  ┗apps.py
┃  ┃  ┗migrations/
┃  ┃  ┃  ┗__init__.py
┃  ┃  ┗models.py
┃  ┃  ┗tests.py
┃  ┃  ┗views.py

2.admin(管理画面の有効化)と静的ファイルの読み込み

  • settings.pyINSTALLED_APPSが下記のようになっているか確認します。
任意の任意のプロジェクト名ディレクトリ/settings.py
# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
  • データベースにテーブルを作成します。
docker-compose exec web python manage.py migrate
  • 静的ファイルディレクトリを定義します。
任意の任意のプロジェクト名ディレクトリ/settings.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
  • 静的ファイルを配信するディレクトリに集めます。下記のコマンドを実行します。
docker-compose run web python manage.py collectstatic --noinput
  • 管理者ユーザーを作成します。下記のコマンドを実行し、任意のuser名とパスワードを入力します。
docker-compose exec -it web python manage.py createsuperuser
  • ブラウザを開いて、INDEX管理画面にアクセスして表示されれば成功です。

展望

  • Django REST Frameworkと併用して画面とAPIを分割してマイクロサービスを構築する。

まとめ

dockerで環境構築するのは、各フレームワーク、ミドルウェアの仕様を押さえてない嵌ることを思い知りました。今回で、Docker + Djangoの組合せで環境構築出来るようになったので個人プロジェクトの開発をどんどん進められそうです。展望にも書きましたが、マイクロサービス構成を容易に出来るのもDockerのメリットなので挑戦したいと思います。公開している情報で誤りなどがありましたらご指摘頂ければ調査して修正していきたいと考えていますので、よろしくお願いします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした