概要
Django(REST framework) + PostgreSQLのアプリケーションをElastic Beanstalk環境にデプロイしたものの、管理画面にアクセスできない...というか管理者アカウント生成で詰まったのでその備忘録に。
ローカル環境では python manage.py createsuperuser で管理者ユーザーを生成できる。
が、そのあとでデプロイするだけだと管理画面にアクセスはできても、ログインができない。
結論、重要な点だけ抜き出すと下記のファイルをイジる必要がある
- ./.ebextensions/django.config
- ./{myapp}/management/commands/createsu.py
- ./{config}/settings.py
※ {myapp} と {config} は任意のディレクトリ名。
※ {myapp} は views.py や models.py が格納されているディレクトリ
※ {config} は asgi.py や wsgi.py が格納されているディレクトリ
前提:psycopg2-binary
この構成でPostgreSQLを扱う際、pipモジュールのpostgresではなくpsycopg2-binaryを使用しなければいけないので注意。requirements.txt にも psycopg2-binary だけを記述する。もしpostgresをpipインストールしてしまっている場合は削除する。
1: ./.ebextensions/django.config
Elastic Beanstalk環境にデプロイする際、サーバー側で実行されるコマンド群を記すファイル。
これの container_commands オプションを下記のようにする。
container_commands:
01_makeMigrations:
command: "source /var/app/venv/*/bin/activate && python3 manage.py makemigrations --noinput"
leader_only: true
02_migrate:
command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate --noinput"
leader_only: true
03_createsu:
command: "source /var/app/venv/*/bin/activate && python3 manage.py createsu"
04_collectstatic:
command: "source /var/app/venv/*/bin/activate && python3 manage.py collectstatic --noinput"
leader_only: true
これらのコマンドはデプロイ時に上から順に実行される。
03_createsu には、後述する createsu.py ファイルを実行するよう命令が書かれている。




