本記事の対象の方
- docker-composeでDjango環境を構築をしたい方
以前当ブログでMySQLでDjango環境構築の紹介をしましたが、今回はPostgreSQLを使用します。MySQLでの構築は下記を参照ください。ただ今回の記事より下記の記事は各サービスのバージョンが古かったりするのでお好みで変更いただけますと幸いです。時間ができたら下記記事もアップデートしようと思っています、、、

ローカルの環境
- Docker 20.10
- docker-compose 1.27.4
- git 2.25
Dockerとdocker-composeをインストールされていない方
Macの方
まずは下記公式サイトからDocker Desktopをインストールしてください
ターミナルを起動後、下記コマンドでDockerとdocker-composeのバージョンを確認してみましょう。確認できたらOKです。バージョンは一緒じゃなくても大丈夫です。
$ docker --version
Docker version 20.10.1, build 831ebea
$ docker-compose --version
docker-compose version 1.27.4, build 40524192
※gitについてはMacは最初から入っていると思いますが最新版にしたい場合は各自でお願いいたします。
Windowsの方
MacよりDocker環境の構築がややこしいので記事にまとめております。
下記を御覧ください。
docker-composeで構築する環境
- Django 3.2 (Python 3.9.6)
- PostgreSQL 13.4
- Nginx 1.20.1
Dockerfileリポジトリをクローン
Django環境を構築用のDockerfileなどをgithubにあげていますのでそれをまずはCloneします。
下記がgithubのリポジトリです。
まずはターミナルを起動してください。
下記コマンドを実行します。
$ git clone https://github.com/E-handson/docker-django-postgre
cloneに成功したら「docker-django-postgre」ディレクトリが作成されます。
作成されたディレクトリに移動しましょう。下記コマンドを実行します。
$ cd docker-django-postgre
docker-django-postgre配下にはdocker-compose.ymlがあると思います。
docker-composeコマンドはdocker-compose.ymlがあるディレクトリ直下で実行できます。
Dockerサービスの立ち上げ
まずはDockerサービスを構築するために下記コマンドを実行します。
$ docker-compose build
次にDockerサービスを起動するために下記コマンドを実行します。
$ docker-compose up
サービスが立ち上がったかを確認するコマンドがありますので実行してみましょう。
$ docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------- docker-django-postgre_app_1 uwsgi --socket :8001 --mod ... Up 8001/tcp docker-django-postgre_db_1 docker-entrypoint.sh postgres Up 0.0.0.0:5433->5432/tcp docker-django-postgre_web_1 /docker-entrypoint.sh ngin ... Up 80/tcp, 0.0.0.0:8000->8000/tcp
Nameがコンテナ名になります。
docker-django-postgre_app_1 → Pythonが入っているコンテナ
docker-django-postgre_db_1 → PostgreSQLが入っているコンテナ
docker-django-postgre_web_1 → Nginxが入っているコンテナ
Stateという列がUpになっていたらそのコンテナが起動しているということになります。
これでDockerの立ち上げは完了です。
Djangoのインストール
appコンテナにDjangoアプリを作成
下記コマンドを実行します。
$ docker-compose exec app django-admin.py startproject app .
成功するとsrcディレクトリが作成されています。llコマンドで確認してみましょう。
$ ll drwxrwxr-x 8 user user 4096 Dec 24 01:43 .git/ -rw-rw-r-- 1 user user 486 Dec 24 01:43 README.md drwxrwxr-x 5 user user 4096 Dec 24 01:43 docker/ -rw-rw-r-- 1 user user 719 Dec 24 01:43 docker-compose.yml drwxr-xr-x 3 root root 4096 Dec 24 01:46 src/
一番下のsrc配下にDjangoのソースファイルが作成されています。
では実際にブラウザで確認してみましょう。一度Docker環境をリスタートさせます。
$ docker-compose restart
その後、下記URLにアクセスしてみてください。
Djangoのウェルカムページが表示されれば正常にインストールが完了しています!
http://localhost:8000/
PostgreSQLの設定
src/app/配下にあるsettings.pyを編集していきます。
76行目あたりに下記の編集前の記述があるかと思います。そこを編集後のように修正してください。
ちなみにPostgreSQLをDjangoで使用する場合はpsycopg2-binaryというライブラリをインストールする必要があります。今回はコンテナを起動する際にあらかじめインストールしておいているので特に作業は必要ありませんが覚えておくと良いかもしれません。
編集前
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
編集後
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'django_local', 'USER': 'django_user', 'PASSWORD': 'secret', 'HOST': 'db', 'POST': '5432' } }
下記コマンドを実行します。
$ docker-compose exec app ./manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
:
:
接続に成功しているとmigrateが実行されてPostgreSQLに認証系などのテーブルが作成されます。
これで開発環境構築は完了です!
docker-composeの構成についてはMySQL版の記事とほぼ同じです。dbコンテナがMySQLではなくPostgreSQLに代わっただけですね。
静的ファイルの設置
Djangoはデフォルトで http://localhost:8000/admin のURLにアクセスすると管理画面にアクセスできます。その際現状だとCSSが効いていない画面が表示されます。
これはなぜかというとNginxがDjango側が用意しているCSSファイルを参照できていないからです。Djangoのビルドインサーバーをコマンドで実行して開発をする場合は(python manage.py runserver)特に意識しなくてもCSSを参照しにいってくれてたんですが、今回はNginxを使用しているので自分で設定する必要があります。
settings.pyの修正
「import os」を追加して元々記述してあった「BASE_DIR」をコメントアウトして下記のように修正してください。
import os # Build paths inside the project like this: BASE_DIR / 'subdir'. # BASE_DIR = Path(__file__).resolve().parent.parent BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) STATIC_ROOT = os.path.join(BASE_DIR, 'static')
修正し終えたら下記コマンドを実行します。
$ docker-compose exec app ./manage.py collectstatic
./src直下にstaticディレクトリが作成されていると思います。もう一度 http://localhost:8000/admin にアクセスするとCSSが反映されたログイン画面が表示されるようになります。
せっかくなのでログインまでやってみます。下記コマンドでユーザーを作成します。ユーザー名とかパスワードを聞かれるので入力して下さい。
$ docker-compose exec app ./manage.py createsuperuser Username (leave blank to use 'root'): root Email address: admin@gmail.com Password:(任意のパスワード) Password (again):(任意のパスワード) Superuser created successfully.
上記で作成したユーザーとパスワードでもう一度 http://localhost:8000/admin にアクセスしてログインしてみましょう。
無事管理画面にログインできました!
コメント