docker でアプリ環境構築 のつづき
開発環境の展開
GitHub への登録
作成した開発環境を共有するために、GitHub へ環境を作成する
リポジトリ名は test として構成は以下の通り
[test]
├─db/
│ └─init.sql
├─test/
│ ├─config/
│ │ ├─__ init__.py
│ │ ├─settings.py
│ │ ├─urls.py
│ │ └─wsgi.py
│ ├─polls/
│ │ └─チュートリアルで作成した構成
│ ├─Dockerfile
│ ├─manage.py
│ └─requirements.txt
├─web/
│ └─nginx.conf
├─.gitignore
└─docker-compose.yml
docker でアプリ環境構築 から手作業で実行していた部分を、開発環境を展開するために設定を追記している
CREATE DATABASE IF NOT EXISTS manage CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER IF NOT EXISTS 'admin'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON manage.* TO 'admin'@'%';
GRANT ALL PRIVILEGES ON test_manage.* TO 'admin'@'%';
FLUSH PRIVILEGES;
初期データベース、ユーザの作成と権限付与を init.sql 内で実施する
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'manage',
'USER': 'admin',
'PASSWORD': 'password',
'HOST': 'app_db',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
},
'TEST': {
'NAME': 'test_manage',
},
}
}
# Logging.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'django.server': {
'()': 'django.utils.log.ServerFormatter',
'format': '[%(server_time)s] %(message)s a',
},
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s '
'%(process)d %(thread)d %(message)s'
},
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
'django.server': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'django.server',
},
'file_polls_log': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/app/logs/polls.log',
'formatter': 'verbose',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
},
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
},
'polls': {
'handlers': ['file_polls_log'],
'level': 'DEBUG',
'propagate': False,
},
}
}
データベース設定にテスト用定義を追加
ログ出力設定を追加
環境の構築
作成した git リポジトリを clone する
C:\>git clone https://github.com/****/test.git
Cloning into 'test'...
docker から環境を作成
D:\test>docker-compose up -d
...
Creating app_db ... done
Creating app_test ... done
Creating app_web ... done
動作確認
管理画面と
チュートリアルで作成した画面
これはひどい...
静的コンテンツが配置されていないのと、データベースが存在しないのが原因かなー
とりあえずコマンド実行して解消するかを確認してみる
docker-compose run --rm test ./manage.py makemigrations polls
docker-compose run --rm test ./manage.py migrate
docker-compose run --rm test ./manage.py collectstatic
再確認
管理画面に静的コンテンツが反映されている
チュートリアルで作成した画面もデータベースエラーにならず、表示された
最後に実施したコマンドも自動化したほうがいいのかなー