ブログ
DockerでMovableType7インストール
Power Mode が動くから、VS code に乗り換えました。
そういうわけでオオコシです。
VS code用のPower ModeはXP世代にはおなじみのアイツも使えます。イルカじゃない方。
で、エディタの話は置いといて、そうです。Docker です。
なんとなくいつかはやらなきゃなーとは思っていたものの、Webアプリやってるわけじゃないし、Wordpressは Local by Flywheel でサクッと環境つくれるし、MAMP も BrowserSync もあるし、できればそっとしておきたかったんですが、昨今の開発環境の話をみているとどうにも避けて通れないようで。
というわけで、Docker試してみました。
せっかくだから毎回ImageMagickのインストールとかで躓くMovable Typeで。
Docker をインストール
まずはDockerのインストールです。
弊社は全員Macなので Docker Desktop で Download for Macをクリックしてダウンロード。
もしくは、Homebrew Caskで brew cask install docker
を実行。Homebrew Caskについてはこちらの記事を参考に。
サーバー構成
今回はMovable Typeクラウド版サービス仕様 のApache版を参考に、下記の内容で組んでみようと思います。
- CentOS 7
- Apache 2.4系
- MySQL 5.7
- php 5.6
これに加え、DB操作に phpMyAdmin、メールの確認に MailCatcher も使います。
ファイル構成
/
└ htdocs/(ドキュメントルート)
└mt-static/(MT用静的ファイル)
└ db/
└data/(MySQLデータ保存場所)
└init/(DB初回起動時読み込みファイル)
└ cgi-bin/(cgi実行環境)
└mt/(MT本体)
└ docker-compose.yml
└ Dockerfile
└ httpd.conf
└ mt-config.cgi(MT設定ファイル)
コンテナ内で MTのGithubリポジトリ をクローンして〜みたいなのも見かけたんですが、プラグインとテーマは管理したいのでMT本体も永続化させます。
DBも永続化しておきます。
複数人で作業する場合に都度インストール画面を出したくないので mt-config.cgi は共通化します。
必要がなければインストール時に自動生成されるものを使ってください。
MTの構成は公式の Movable Type の設置 (Linux, BSD, Mac OS X) に則って、/cgi-bin/
配下にインストールするパターンにしてみました。( /mt-static/
は手動で移動してください。)
ちなみに MT本体のダウンロードですが、個人ライセンスを作成/商用ライセンスを購入/Githubからクローン の他に、MovableType開発者登録 で開発者ライセンスを作成し シックス・アパート ユーザーサイト からダウンロードすることもできます。
今回は開発者ライセンスで Movable Type 7 r.4208 をダウンロードして使っています。
※ MTの商用利用は有償なのにソースがGithubにある件についてはこちら。Movable Type 6 の新しいライセンスについて
各設定ファイルについて
docker-compose.yml
version: '2'
services:
web:
build: .
container_name: app
volumes:
- "./htdocs:/var/www/html"
- "./cgi-bin:/var/www/cgi-bin"
- "./mt-config.cgi:/var/www/cgi-bin/mt/mt-config.cgi"
- "./httpd.conf:/etc/httpd/conf/httpd.conf"
ports:
- "1234:80"
links:
- "db:db"
db:
image: mysql:5.7
container_name: db
ports:
- "3306:3306"
volumes:
- "./db/init:/docker-entrypoint-initdb.d"
- "./db/data:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=db
- PMA_USER=root
- PMA_PASSWORD=root
links:
- db
ports:
- 1235:80
volumes:
- /sessions
smtp:
image: schickling/mailcatcher
container_name: smtp
ports:
- "1080:1080"
- "1025:1025"
Apacheの入ったapp、MySQLのdb、phpMyAdmin、MailCatcherの入ったsmtpを立てます。
container_name:app について
appはDockerFileを使います。PSGIを使わない&サムネイルにImageMagickを使用する想定でApacheとperlモジュールなどをインストールしています。phpは5.6を指定したいので Remiリポジトリから指定します。ブロッコリーを立てる人ではないです。
VolumesではApacheの設定を記載した httpd.conf
と、そこで指定したドキュメントルート/cgi実行ディレクトリをローカルのディレクトリと紐付け、mt-config.cgi
を本来あるべき場所にリンクさせています。
portは左側をローカルで使いたいものにしてください。サンプルなので1234。右側はコンテナ内なのでデフォルトの80です。(httpd.confで変えた場合はそちらに合わせる)
Dockerfile
FROM centos:7
RUN yum install -y httpd httpd-devel
RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm yum-utils
RUN yum-config-manager --enable remi-php56
RUN yum install -y php perl gcc \
libxml2-dev \
libssl-dev \
libexpat1-dev \
cpan \
make \
perl-HTML-Parser \
perl-Digest-MD5 \
perl-DBD-MySQL \
perl-IO-Socket-SSL \
perl-Net-SSLeay.x86_64 \
perl-XML-LibXML.x86_64 \
ImageMagick-perl.x86_64 \
perl-Crypt-SSLeay
RUN curl -L http://cpanmin.us | perl - App::cpanminus
RUN cpanm CGI Image::Size CGI::Cookie LWP::UserAgent parent HTML::Entities \
Archive::Tar \
Archive::Zip \
Cache::Memcached \
Mozilla::CA \
XML::Parser \
XML::SAX::Expat \
XML::SAX::ExpatXS \
YAML::Syck
RUN chown -R apache:apache /var/www/html/
RUN chown -R apache:apache /var/www/cgi-bin/
RUN chmod -R 755 /var/www/cgi-bin/
EXPOSE 80
CMD ["httpd", "-DFOREGROUND"]
httpd.conf
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@evoworx.co.jp
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
# ドキュメントルート設定
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# cgi-binのエイリアス設定
ScriptAlias /cgi-bin /var/www/cgi-bin
# /var/www/cgi-bin/ 設定
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
mt-config.cgi
#======== REQUIRED SETTINGS ==========
CGIPath /cgi-bin/mt/
StaticWebPath /mt-static/
StaticFilePath /var/www/html/mt-static
#======== DATABASE SETTINGS ==========
ObjectDriver DBI::mysql
Database mt
DBUser root
DBPassword root
DBHost db
#======== MAIL =======================
MailTransfer smtp
SMTPServer smtp
SMTPPort 1025
DefaultLanguage ja
ImageDriver ImageMagick
container_name:db について
dbでは公式のmysqlイメージを使用します。
どうやら Volumesで /docker-entrypoint-initdb.d
に指定したディレクトリに初回起動時に読み込ませたい .sh
.sql
.sql.gz
ファイルを入れておくとインポートしてくれるようです。 なので、db/init
にサンプルサイトのsqlデータをエクスポートして入れておきました。
MYSQL_ROOT_PASSWORD
ではルートのパスワードを指定しています。ちなみに、MYSQL_DATABASE
という項目で、初回に作成しておくデータベース名も指定できるんですが、照合順序が latin1_swedish_ci
になっていました。
ポートはデフォルトの3306を指定しておきます。
MTインストール画面(またはmt-config.cgi)では下記のように指定します。ポートを3306以外のものにした場合はポート番号も入力してください。
項目名 | 内容 |
---|---|
データベースの種類 | MySQLデータベース(推奨) |
データベースサーバ | db |
データベース名 | (任意のデータベース名:mtなど) |
ユーザ名 | root |
パスワード | root |
container_name:phpmyadmin について
上記dbと連携させて、ログイン情報等を入力します。
ポートは適当です。(1235)
初回起動時に読み込ませるsqlがない場合は起動後、localhost:1235でphpMyAdminにアクセスしてutf8_general_ci
のMT用データベースを作るといいと思います。
container_name:smtp について
MailCatcher は実際には送信されない簡易SMTPサーバーみたいなやつです。
デフォルトでは localhost:1050 にアクセスすることで、送信されたメールを確認することができるとのこと。
MTのインストール画面では下記のように設定するとテストメールが届いているのが確認できます。
項目名 | 内容 |
---|---|
メール送信プログラム | SMTPサーバー |
送信メールサーバー | smtp ※docker-compose.ymlでmailcatcherに設定した名前 |
SMTPサーバーのポート番号 | 1025 ※docker-compose.ymlでmailcatcherに設定したポート番号 |
使い方
以上のデータを用意したら、docker-compose.yml のあるディレクトリに移動して、下記コマンドを実行します。
$ docker-compose up -d
インストールするものが多いので時間はかかりますが、全部のサーバーが done
になったら localhost:1234/cgi-bin/mt/ で管理画面にアクセスできます。
インポートするsqlデータがない場合は phpMyAdminでデータベースを作成してインストールを進めてください。
コンテナの起動がうまくいかない場合は、Dockerfileやdocker-compose.ymlの設定を見直してビルドし直してみてください。
$ docker-compose build --no-cache
止める時は
$ docker-compose stop
再開するときは
$ docker-compose start
要らなくなったら
$ docker-compose down
その他のコマンドは docker-compose --help
や
docker-compose コマンド概要 で確認してください。