💭

Movable Type AMI版 を使用せず、EC2でMT動かしてみた

に公開

はじめに

AWSをよく触るようになり、「EC2でもMovable Typeを動かしてみたいなー」とふと思い、環境を構築してみました。
Movable TypeにはAMI版があり、簡単に構築はできるのですが、勉強がてら手動でミドルウェア等をインストールしていきたいと思います。
EC2の設定は今回説明しません。

Movable TypeにはAMI版の概要はこちら
https://www.movabletype.jp/documentation/mt8/start-guide/about-movable-type/about-movable-type-ami/

構築する環境

今回はMovable Type 8をインストールしていきます。
また、EC2のAMIではAmazon Linux 2023 AMIを使用します。

Movable Typeが動く環境はこちら
https://www.movabletype.jp/documentation/system_requirements.html

サーバー OS

  • Amazon Linux 2023 AMI

Webサーバー

  • Apache HTTP Server Apache/2.4.62 (Amazon Linux)

データベース

  • MariaDB 10.5.29

Perl

  • v5.32.1

Perl モジュール

  • CGI
  • Image::Size
  • File::Spec
  • CGI::Cookie
  • LWP::UserAgent
  • parent
  • HTML::Entities
  • Scalar::Util
  • DBI
  • DBD::mysql

事前準備

  • EC2
    • Amazon Linux 2023 AMIをインストールしておいてください。
    • SSHとインターネットに接続できるようにセキュリティグループを設定
  • MT開発ライセンス

ミドルウェアのインストール

Webサーバー・MariaDB・Perl・CPANモジュール

パッケージを最新バージョンにアップデートし、
「Apache Webサーバー・MariaDB・Perl・CPANモジュール(Perlのパッケージ管理)」 をインストールしていきます。

sudo yum update -y
sudo yum install -y httpd mariadb105-server mariadb105 perl perl-CPAN

MariaDBの起動と有効化

sudo systemctl start mariadb
sudo systemctl enable mariadb

#ステータス確認
sudo systemctl status mariadb

DB設定

インストールしたばかりのDBのセキュリティ設定

インストール直後のMariaDB(またはMySQL)サーバーには、初期状態ではセキュリティ的に弱い構成が含まれています。そのため、以下のコマンドで安全な設定を行うのが一般的です。

sudo mysql_secure_installation

Enter current password for root (enter for none):
→ MariaDB の root ユーザーの現在のパスワードを入力してね、という指示です。
→ まだ一度も設定していないなら「空」のはずなので、何も入力せず Enter を押します。

Switch to unix_socket authentication
→ MariaDB の root ユーザーへのログインを、Linux の root ユーザー(または sudo 権限ユーザー)だけに許可し、パスワード入力なしでログインできるようにする方法です。
→ パスワードを設定したいので「n」を押します。

Change the root password
→ 「y」でrootのパスワードを設定しましょう。

Remove anonymous users
→ MariaDB に存在する匿名ユーザー(ユーザー名なしで接続できるユーザー)を削除するかどうかを聞いています。
→ 通常はこの匿名ユーザーを削除するのが推奨されているので、「y」を押します。

Disallow root login remotely
→ rootユーザーがリモート(他のサーバーやPC)からのログインを禁止するかを聞いています。
→ 「y」を押します。

Remove test database and access to it
→ MariaDB に初期状態で作成される "test" データベースと、そのアクセス権を削除しますかという意味です。
→ 「y」を押します。

Reload privilege tables now
→ 今すぐ権限テーブル(ユーザーのアクセス権など)を再読み込みして、これまでの変更を反映しますかを聞いています。
→ 「y」を押します。

これでMariaDBの初期設定完了です。

MT用のデータベースとユーザーを作成

データベースとユーザーの作成をしていきます。
以下のSQLは
「MariaDB において、文字コードは UTF-8mt_db というデータベースを作り、mt_user というユーザーを作成して、
そのユーザーに mt_db に対する全権限を与える」
という一連の設定です。

#下記実行後パスワードを聞かれるので、入力してください。
mysql -u root -p

#データベースとユーザーの作成
CREATE DATABASE mt_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'mt_user'@'localhost' IDENTIFIED BY 'パスワードを入れてください';
GRANT ALL PRIVILEGES ON mt_db.* TO 'mt_user'@'localhost';
FLUSH PRIVILEGES;

作成したデータベースとユーザーを確認

下記のようにできていればOKです。
確認ができたら、MariaDBからexitでログアウトしましょう。
データベースの確認

SHOW DATABASES;

ユーザーの確認

SELECT User, Host FROM mysql.user WHERE User IN ('root', 'mt_user');

Webサーバーの有効化

Apacheを有効化していきます。

sudo systemctl start httpd
sudo systemctl enable httpd

#ステータス確認
sudo systemctl status httpd

必要なPerlモジュールのインストール

ここからMTに必要なPerlモジュールをインストールしていきます。

sudo yum install -y perl-DBD-MySQL perl-CGI perl-Archive-Tar perl-Digest-SHA perl-File-Temp perl-Scalar-List-Utils perl-Time-HiRes perl-Tie-File perl-File-Which perl-File-Slurp

#CPANで不足しているモジュールをインストール
#Would you like to configure as much as possible automaticallyとでたら「yes」でダウンロード
sudo cpan install File::Spec Image::Size

MTパッケージの転送

ここまできたらもう少しです!
今回は開発者ライセンスを事前にダウンロードしておきました。
https://www.sixapart.jp/inquiry/movabletype/developer.html

mtディレクトリの作成

mtディレクトリにMTパッケージ一式を配置していきます。

sudo mkdir /var/www/html/mt

tmpディレクトリに転送

ローカルにダウウンロードしたMTパッケージzipをtmpディレクトリに転送します。
ec2-userは/var/www/html/mtに直接転送はできないので、一度tmpを挟みます。
下記はローカルで実行してください。

scp -i <キーペアのパス> <ローカルのmt.zip> ec2-user@<your-ec2-public-ip>:/tmp/
#scp -i xxxx cccc ec2-user@00000000:/tmp/

EC2に入り確認していきましょう。
転送されていますね。

zipファイルを展開

次に/var/www/html/mt/にzipファイルを展開しましょう。

sudo unzip /tmp/MT-8.0.4.zip -d /var/www/html/mt/
sudo mv /var/www/html/mt/MT-8.0.4/* /var/www/html/mt/

#MT-8.0.4ファイルを削除しておきましょう
sudo rm -rf /var/www/html/mt/MT-8.0.4

所有者と権限の設定

Apache HTTP サーバーがファイルを操作できるように/var/www/html/mt/ 以下のファイル・ディレクトリの所有者とグループをすべて apache に変更します。

また、.cgi ファイルはスクリプトなので実行可能にする必要があるため、/var/www/html/mt/ 以下の .cgi ファイルを探し出し、実行権限をつけます。

sudo chown -R apache:apache /var/www/html
sudo find /var/www/html/mt -name "*.cgi" -exec chmod 755 {} \;

mt-config.cgiの作成・編集

mt-config.cgi-originalをコピーして、mt-config.cgiを作成していきます。

sudo cp /var/www/html/mt/mt-config.cgi-original /var/www/html/mt/mt-config.cgi

mt-config.cgiを編集していきます。

sudo nano /var/www/html/mt/mt-config.cgi
mt-config.cgi
CGIPath    http://xxxxx/mt/
StaticWebPath    http://xxxxx/mt/mt-static/
StaticFilePath /var/www/html/mt/mt-static/

ObjectDriver DBI::mysql
Database mt_db
DBUser mt_user
DBPassword 設定したパスワード
DBHost localhost

DefaultLanguage ja

mt.confの作成・編集

MTを Apache 上で正しく動作させるため mt.conf(仮想ホストやディレクトリの設定)を設定していきます。

sudo nano /etc/httpd/conf.d/mt.conf
mt.conf
<Directory "/var/www/html/mt">
Options ExecCGI
AllowOverride All
AddHandler cgi-script .cgi
DirectoryIndex mt.cgi
Require all granted
</Directory>

<Directory "/var/www/html/mt/mt-static">
Options -ExecCGI
Require all granted
</Directory>

上記が保存できたらApacheを再起動しましょう。

sudo systemctl restart httpd

確認

http://xxxx/mt/にアクセスし、以下の画面が出たら成功です!!

MT初期設定

ここまでできれば、いよいよMTの初期設定に入ります!
パスワードユーザー名等を指定していきます。
サイトパスは/var/www/htmlで設定します。

再構築もうまくいっていますね!成功です!
お疲れ様でした。

おわりに

実際に手動でミドルウェアやPerlモジュールをインストールしてみることで、MT環境に必要な設定が 詳しくわかりました。
基本的にEC2でMTを使用する場合は、AMIを使用するほうが簡単でよいかと思いますが、特定のOSを使用する場合やセキュリティルールやカスタマイズ等自由に構築したい場合等は手動で環境構築をしていく必要があるのかと思います。

GitHubで編集を提案

Discussion