やりたいこと
- nginx-django-mysqlを使った環境構築をdocker-composeで可能にする
- Python(Django)に限らず可能な限りどの言語でも使えるコンテナ環境を作成する
大まかな流れ
-
ハンズオン用のリポジトリを使ってnginx-django-mysql環境を構築する
-
.envと.gitignoreを修正
-
ソースコード作成
-
settings.pyを修正
-
docker-compose upして実際に表示できるか確認
-
ハンズオン用のリポジトリをclone
bash
git clone https://github.com/hkobashi/docker-for-python-django
-
.env_sampleを参考に.envファイルを作成
※.gitignoreに追記を忘れずに-
→すでに追記されているので改めての追記は不要でした
※@shun198 さんご指摘ありがとうございます -
この時点でこんな感じのディレクトリ構成になっている
tree
.
├── README.md # 本ファイル
├── docker-compose-dev.yml # 開発環境用コンテナ設定ファイル(django-mysqlのみ)
├── docker-compose-prd.yml # 本番環境用コンテナ設定ファイル(django-mysql-nginx)
├── dockerfiles # 各コンテナの詳細設定ファイルを格納
│ ├── mysql
│ │ ├── Dockerfile # mysqlのバージョンなどを設定
│ │ ├── init.sql # Djangoで使用するDBユーザーに権限を付与
│ │ └── my.cnf # 文字コードやシステム時刻を設定
│ ├── nginx
│ │ ├── Dockerfile # nginxのバージョンなどを設定
│ │ └── django.conf # リバースプロキシ、静的ファイルの設定
│ └── python
│ ├── Dockerfile # pythonのバージョンなどを設定
│ ├── entrypoint.sh # 本番環境用の起動スクリプト
│ └── requirements.txt # インストールするPythonライブラリ群
└── src # ソースコードを格納するディレクトリ
サンプル用ソースコード作成
- djangogirlsチュートリアルを使ってソースコードを作成していく
bash
# djangoプロジェクトを作成
docker-compose -f docker-compose-dev.yml exec app django-admin startproject mysite .
- settings.pyを修正
src/settings.py
# settings.pyに「STATIC_ROOT」を追記
STATIC_ROOT = '/static/'
# DB接続情報をSQLite→MySQLに変更
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
# .envで設定した環境変数をDATABASESのパラメータに反映
"NAME": os.environ.get("MYSQL_DATABASE"),
"USER": os.environ.get("MYSQL_USER"),
"PASSWORD": os.environ.get("MYSQL_PASSWORD"),
"HOST": "db",
"PORT": 3306, # コンテナ側のポート番号を指定
}
}
- 開発環境用コンテナを起動
bash
docker-compose -f docker-compose-dev.yml up -d
# DBマイグレーション
docker-compose -f docker-compose-dev.yml exec app python manage.py migrate
今後について
- 現状だとrootユーザーでコンテナが実行されているためこの辺りの権限制御もしていきたい
→セキュリティの観点からこのままデプロイするわけにはいかないため - 後日、ECSかEKSにデプロイした記事を投稿する予定
参考にした記事