この記事はMovable Type Advent Calendar 2018の5日目の記事です。
今日は結婚記念日だったのでこの日にしました。結婚して5年立ちました。(意外と早いものですね)
今月27日で子供も二歳( クリスマスと誕生日は一緒にしたい。。 )になるので色々とやることが多い and 出費が多い年末です。
今年は、Dockerのハンズオンに初めて参加してみたりDockerを本格的に使い始めた年でした。
今まではMovable TypeをVagrantで動かしてテーマを作ってましたが、ハンズオン後から色々触ってみて自分用のDocker環境を構築し動かすようにしてみました。
リポジトリは以下からダウンロードして使うことが可能です。
Mac環境でDocker for Macがあれば動きます。
未検証ですが、Windows環境の方はDocker for Windowsかもしくは仮想環境内であれば動くかと思います。
Directory Structure
-
./
- .env.sample 環境変数(envにリネームして使用してください)
- .gitignore 除外ファイルの設定
- README.md ドキュメント
- docker-compose.yml
- docker/
- Dockerfile // Dockerfile サーバのセットアップインストールなど記述
- httpd/
- virtualhost.conf // VirtualHostの設定
- mt-data/ MT本体を格納するディレクトリ
- mt-settings/
- mt-static/
- mtml/ テーマで使用する静的ファイル
- plugins/ プラグインで使用する静的ファイル
- mt-config.cgi Movable Typeの設定ファイル
- mt-static/
- mtml/ テーマ本体(開発用テーマなど同梱)
- sql/ DBのsqlデータ保存先
- www/
- html/ Movable Typeでファイルが出力されるドキュメントルート
- logs/ Apacheのログ出力先
セットアップ
githubにアップされてるdocker環境をcloneもしくは下記URLからダウンロードします。
git clone git@github.com:redamoon/docker-mt-lamp.git project-name
cd project-name/
envファイルの編集
環境変数用の .env.sample
を env
にリネームしてDBの情報とPORTを編集します。
MYSQL_ALLOW_EMPTY_PASSWORD=yes MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=movabletype MYSQL_USER=movabletype MYSQL_PASSWORD=movabletype
PORT=10080:80
Movable Type セットアップ
- MT本体を取得
- MT本体ディレクトリを
MT-7.0
に変更しzipにする(MT-7.0.zip) MT-7.0.zip
をdocker/mt-data
に格納mt-settings/mt-config.cgi
のDB情報をenv
で設定した値に変更mtml/
・mt-static/mtml/
に必要なテーマを格納(無ければ飛ばしてください)mt-settings/plugins/
・mt-settings/mt-static/plugins/
に必要なプラグインを格納(無ければ飛ばしてください)- 格納したテーマとプラグインを
docker-compose.yml
に追記する(無ければ飛ばしてください) ※追記の仕方は後述 - ルートディレクトリで
docker-compose up -d --build
で起動をビルドを行う - ビルド完了後、
http://localhost:{{設定したPORT}}/cgi-bin/mt/
でアクセスをしてMT管理画面にアクセス - 次回起動時はビルド不要で
docker-compose up -d
でアクセス可能(Dockerfile編集した場合は再度ビルドする)
docker-compose.yml
に追記について
格納したテーマとプラグインを 格納したテーマとプラグインをコンテナ側と紐づけるには、 web
の volumes
にマウントさせます。
以下が設定した volumes
にマウントした例になります。
./mtml/project-name-themes:/var/www/local/cgi-bin/mt/themes/project-name-themes
から下がテーマとプラグインを追記した例になります。(名前をお使いの環境に合わせてください)
マウントしている状態で、テーマやプラグインを調整しつつ http://localhost:設定したPORT
で開発が可能になります。
web:
container_name: ${CONTAINER_BASE_NAME}-apache
build: ./docker
ports:
- "${PORT}"
volumes:
- ./www/html:/var/www/local/html
- ./www/logs:/var/www/local/logs
- ./mt-settings/mt-config.cgi:/var/www/local/cgi-bin/mt/mt-config.cgi
- ./docker/httpd/virtualhost.conf:/etc/httpd/conf.d/virtualhost.conf
- ./mtml/project-name-themes:/var/www/local/cgi-bin/mt/themes/project-name-themes
- ./mt-settings/mt-static/mtml/project-name-themes:/var/www/local/cgi-bin/mt/mt-static/themes/project-name-themes
- ./mt-settings/plugins/project-name-plugin:/var/www/local/cgi-bin/mt/plugins/project-name-plugin
- ./mt-settings/mt-static/plugins/project-name-plugin:/var/www/local/cgi-bin/mt/mt-static/plugins/project-name-plugin
depends_on:
- mysql
Tips:データの共有について
複数人で開発したり、本番データをローカルで再現させたりしたいケースがあったりします。
Git上では出力されたファイルやディレクトリなどは共有せず ( www/html
など ) 開発を行っています。
他の人に共有したり本番データに差し替えたい場合は、私の場合は以下の方法で共有をしています。
必要ファイル
- ローカルまたは本番のダンプしたSQL
www/html/
配下の画像データ(MTの場合はテンプレートで出力されるファイルは不要)
手順
www/html/
配下の出力された画像などをzipにまとめる- git経由でzipデータを共有する(共有先は任意)
- 本番からダンプデータを取得(ローカルの場合は以下コマンドを参照)
- git経由でバックアップしたsqlを共有(共有先は任意)
- zipを解凍してドキュメントルート
www/html/
へ配置する - sqlをリストアしてデータベースを上書きする
# Backup
docker exec CONTAINER /usr/bin/mysqldump -u root --password=root DATABASE > backup.sql
# Restore
cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u root --password=root DATABASE
今後のアップデートについて
- READMEのアップデート
- MTのセットアップをシェルで実行できるように改良
- 初期実行用の必要テーマの自動取得できるように調整
- その他リファクタリング
まだまだ改良する部分がありますが、このような形でDocker環境以降してMT案件を進めています。
release/2.0以降までには一通りの開発環境構築の手順のアップデートやMTのセットアップをシェルに変更したものをリリース出来ればと思っています。
まずは、さくっとMT7実行環境を使いたいときに試してみてはいかがでしょうか。