Wagtail入門。Dockerでの環境構築からuWSGI+Nginx+PostgreSQL構成まで
Django製のCMSライブラリ Wagtail の環境構築を、この記事1本にまとめて解説します。
- docker-composeによる最小構成での起動
- uWSGI + Nginx + PostgreSQLを組み合わせた本番相当の構成
Wagtailとは?
- DjangoのCMS用ライブラリ
- ブログやポータルサイトに特化しているわけではなく、あくまでCMSを作成するためのライブラリ
- WordPressのようにインストールしたらすぐサイトとして使える、というものではない
- DjangoのCMSライブラリとしては最も使われている(GitHubのスター数から判断)
前提として、DockerとGitがインストールされていることが必要です。
1. docker-composeで最小構成を作る
サンプルのリポジトリを用意しています: docker-wagtail
初期インストール
コンテナをビルドし、Wagtailのプロジェクトを作成します。
docker-compose build --no-cache
docker-compose run python3 wagtail start project
マイグレーションでDBを作成し、ログイン用のスーパーユーザーを作成します。
docker-compose run python3 python project/manage.py migrate
docker-compose run python3 python manage.py createsuperuser
起動
docker-compose up
http://localhost:8000 にアクセスして、Wagtailのウェルカムページが表示されれば完了です。
2. uWSGI + Nginx + PostgreSQL構成を作る
本番相当の構成(アプリケーションサーバー: uWSGI、リバースプロキシ: Nginx、DB: PostgreSQL)もdocker-composeで構築できます。
サンプルのリポジトリ: wagtail-postgres-docker
リポジトリの取得とビルド
git clone https://github.com/daikidomon/wagtail-postgres-docker
cd wagtail-postgres-docker
docker-compose build --no-cache
Wagtailプロジェクトの作成
docker-compose run python3 wagtail start project .
settingsをPostgreSQL用に修正
./app/project/settings/base.py のDATABASESを修正します。接続情報は環境変数から取得する形にしておくと、環境ごとの切り替えが容易です。
import os
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('POSTGRES_DB', 'postgres'),
'USER': os.environ.get('POSTGRES_USER', 'postgres'),
'PASSWORD': os.environ.get('POSTGRES_PASSWORD', 'postgres'),
'HOST': 'db',
'PORT': os.environ.get('POSTGRES_PORT', 5432),
}
}
マイグレーションと管理者ユーザーの作成
docker-compose run python3 python manage.py makemigrations
docker-compose run python3 python manage.py migrate
docker-compose run python3 python manage.py createsuperuser
静的ファイルの収集
CSS・JSファイルをcollectstaticで集めます(Nginxから配信するために必要です)。
docker-compose run python3 python manage.py collectstatic
起動
docker-compose up
ブラウザからアクセスしてWagtailの画面が表示されれば構築完了です。
まとめ
| 構成 | 用途 |
|---|---|
| Wagtail単体 + SQLite | 動作確認・学習用の最小構成 |
| Wagtail + uWSGI + Nginx + PostgreSQL | 本番相当の構成 |
Djangoでよく遭遇するエラーの対処はDjangoのよくあるエラーと解決方法まとめを参考にしてください。