0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Django、django-allauthの環境をdocker composeで構築する

Last updated at Posted at 2024-07-02

概要

  • Docker compose で開発用の環境を構築します
  • Djangoフレームワーク+django-allauthパッケージをインストールします
  • MySQLもインストールして、Djangoから使えるようにします

準備

  • Dockerを使うので、Docker Desktop(Windows)などをインストールしておきます
  • requirement.txt を作成します
Django~=5.0.6
django-allauth~= 0.63.2
requests
mysqlclient~=2.1.1
  • Dockerfile を作成します
# Pythonの公式イメージを使用。バージョン3.12を指定。
FROM python:3.12

# 作業ディレクトリを設定
WORKDIR /app

# 必要なパッケージをインストール(vimを入れるかはお好みで)
RUN apt-get update && apt-get install -y \
    git \
    default-libmysqlclient-dev \
    build-essential \
    vim \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 依存関係のあるPythonライブラリを記述したrequirements.txtをコンテナ内にコピー
COPY requirements.txt ./

# requirements.txtにリストされた依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt

# アプリケーションのソースコードをコンテナ内の作業ディレクトリにコピー
COPY . .

# ホストの5005番ポートをコンテナに公開
EXPOSE 5005

# デフォルトのシェルをbashに変更
SHELL ["/bin/bash", "-c"]

# コンテナが起動した際に実行されるコマンド
CMD ["bash"]
  • docker-comopse.yml を作成します
services:
  web:
    build:
      context:
        ./
    volumes:
      - .:/app
    ports:
      - "5005:5005"
    tty: true
    depends_on:
      - db
    environment:
      DB_HOST: db
      DB_PASSWORD: mypassword123456

  db:
    image: mysql:8.3.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: dj01
      MYSQL_USER: dj01user
      MYSQL_PASSWORD: mypassword123456
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
  • dockerコンテナをビルドして起動します
docker compose up -d --build

Djangoプロジェクトの作成

  • Dockerコンテナ内で、Djangoプロジェクトを作成します
docker exec -it django-fb-login-web-1 django-admin startproject dj_fb_login
  • Djangoが自動起動するように、Dockerfileを書き換えます
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,7 +2,7 @@
 FROM python:3.12

 # 作業ディレクトリを設定
-WORKDIR /app
+WORKDIR /app/dj_fb_login

 # 必要なパッケージをインストール
 RUN apt-get update && apt-get install -y \
@@ -26,6 +26,4 @@ EXPOSE 5000
 SHELL ["/bin/bash", "-c"]

 # コンテナが起動した際に実行されるコマンド
-CMD ["bash"]
+CMD python manage.py runserver 0.0.0.0:5005
  • Dockerコンテナを停止して、再作成します
docker compose down
docker compose up -d --build

MySQLへの接続設定

  • MySQLを使えるように、settings.py にあるデータベースの設定を変更します
--- a/dj_fb_login/dj_fb_login/settings.py
+++ b/dj_fb_login/dj_fb_login/settings.py
@@ -75,8 +75,12 @@ WSGI_APPLICATION = "dj_fb_login.wsgi.application"

 DATABASES = {
     "default": {
-        "ENGINE": "django.db.backends.sqlite3",
-        "NAME": BASE_DIR / "db.sqlite3",
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': 'dj01',
+        'USER': 'dj01user',
+        'PASSWORD': 'admin1234',
+        'HOST': 'db',
+        'PORT': '3306',
     }
 }
  • Dockerコンテナを停止して、再作成します
docker compose down
docker compose up -d --build
  • DjangoのDBへのマイグレーションを行います
docker exec -it django-fb-login-web-1 python manage.py migrate
  • Dockerコンテナを停止して、再作成します
docker compose down
docker compose up -d --build

WEBブラウザで表示を確認

  • WEBブラウザで、http://localhost:5005/ にアクセスし、ロケットの画像が出ればOKです
The install worked successfully! Congratulations!
You are seeing this page because DEBUG=True is in your settings file and you have not configured any URLs.
  • webサービスよりdbサービスが先に立ち上がってしまい、接続エラーになる場合は、DBのヘルスチェックを使って起動を確認します。docker-compose.ymlを修正して再起動します。

--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -10,7 +10,8 @@ services:
       - "5005:5005"
     tty: true
     depends_on:
-      - db
+      db:
+        condition: service_healthy
     environment:
       DB_HOST: db
       DB_PASSWORD: mypassword123456
@@ -25,7 +26,11 @@ services:
       MYSQL_PASSWORD: mypassword123456
       TZ: 'Asia/Tokyo'
     command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
-
+    healthcheck:
+          test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
+          interval: 20s
+          timeout: 10s
+          retries: 10

   phpmyadmin:
     image: phpmyadmin/phpmyadmin

Djangoの管理者ユーザーの作成

docker exec -it django-fb-login-web-1 python manage.py createsuperuser

パスワードが短いと赤文字でメッセージが出ますが、バイパスできます。

Username (leave blank to use 'root'): admin
Email address: admin@example.com
Password:
Password (again):
The password is too similar to the username.
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

WEBブラウザで管理者ユーザーでログインできることを確認

  • WEBブラウザで、http://localhost:5005/admin にアクセスし、上記で作成したIDとパスワードでログインできればOKです

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?