LoginSignup
0
0

More than 3 years have passed since last update.

docker でアプリ環境構築2

Posted at

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 でアプリ環境構築 から手作業で実行していた部分を、開発環境を展開するために設定を追記している

init.sql
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 内で実施する

settings.py
# 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

動作確認

docker03.png

管理画面と

docker04.png

チュートリアルで作成した画面

これはひどい...

静的コンテンツが配置されていないのと、データベースが存在しないのが原因かなー

とりあえずコマンド実行して解消するかを確認してみる

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

再確認

docker05.png

管理画面に静的コンテンツが反映されている

docker06.png

チュートリアルで作成した画面もデータベースエラーにならず、表示された

最後に実施したコマンドも自動化したほうがいいのかなー

0
0
0

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