MovableType 7の構築記事は、Wordpressと比較して大変少ないので、あとから参照できるように手順を残します。
#OS選定作業
- 国内のレンタルサーバー事業者にて、2サイトの契約を行いました。
- 1台目であるwwwには、マルチドメインmultiを設置して、複数サイトを運用する。
- 2台目であるwww2には、1台目からのファイルとDBのバックアップを入れておき、障害時にコールドスタンバイから復帰させる
- CentOSでは将来の見通しが困難なので、手堅くUbuntu 20.04.01 LTSを選択します。
- カスタマーコントロール画面のパケットフィルタ機能で、TCP 22, 80, 443,メール関連ポートを開発ホストからアクセスできるように設定しておきます。
#OSインストール、アップデート設定
- Ubuntu 20.04.1 LTSインストールがされていることを確認
%cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
パッケージのアップグレード
% sudo apt update && sudo apt upgrade
##cron-aptによるアップデート自動化
- cron-aptによるパッケージの自動更新を設定。aptのupdateおよびupgradeを自動で行う。
% sudo apt install cron-apt
% sudo sed -i 's/-d //' /etc/cron-apt/action.d/3-download
#MariaDB データベースサーバの設定
% sudo apt install mariadb-server mariadb-client
% sudo mysql_secure_installation
% sudo mysql -u root -p
MariaDB [(none)] > CREATE DATABASE dbname DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
MariaDB [(none)] > CREATE USER dbusername@localhost identified by 'dbpassword';
MariaDB [(none)] > grant all on dbname.* to dbusername@localhost identified by 'dbpassword';
MariaDB [(none)] > FLUSH PRIVILEGES;
MariaDB [(none)] > quit
参考:https://www.movabletype.jp/documentation/mt7/installation/database/mysql/
Apache2 Webサーバインストール、設定
Apache2を導入
% sudo apt install apache2
% sudo systemctl enable apache2
% sudo systemctl start apache2
ディレクトリのパーミッション設定
#メインサイト
% sudo chown -R www-data:www-data /var/www/html
#同IPでマルチドメインを運営
% sudo chown -R www-data:www-data /var/www/multi.example.com
% sudo usermod -aG www-data username
% sudo chmod 775 /var/www/*
##Perlモジュール設定
- Movable Type動作のために、多数のPerlモジュールが必要となりますので、できるだけパッケージで導入していきます。
% sudo apt install imagemagick perlmagick libimager-perl libgd-perl
% sudo apt install libcache-memcached-perl libarchive-zip-perl libauthen-sasl-perl
% sudo apt install libcrypt-dsa-perl libio-socket-ssl-perl libxml-atom-perl
% sudo apt install libxml-sax-perl libyaml-syck-perl libxml-sax-expatxs-perl
% sudo apt install build-essential
% sudo perl -MCPAN -e 'install Mozilla::CA'
##PHPの設定
- Movable Typeは基本的には「再構築」ボタンを押して静的にHTMLを出力させますが、ダイナミックパブリッシングを用いて動的にページを出力させることも可能です。このためにはPHPのインストールが必要です。
% sudo apt install php-mysql libapache2-mod-php
##mod_rewriteモジュールの設定
% sudo a2enmod rewrite
% sudo vi /etc/apache2/apache2.conf
<Directory /var/www/html>
AllowOverride All
</Directory>
<Directory /var/www/multi.example.com>
AllowOverride All
</Directory>
参考:https://www.movabletype.jp/documentation/supporting_dynamic_publishing.html
#Apache2 SSL設定
##Let’s Encrypt証明書導入
- certbotがDNSの所有者を確認するために一時的にWebサーバとして振る舞う。そのためcertbotコマンド入力時はApacheを停止させる必要あり。
- ネットワークフィルタを一時的に外さないと、検証に失敗する。
- また、失敗を繰り返すと数時間~1週間のロックアウトがかかるため、必ずdry-runでの成功を確認する。
% sudo apt install certbot
% sudo systemctl stop apache2
% sudo certbot certonly --standalone -d www.example.com --dry-run
% sudo certbot certonly --standalone -d www.example.com
% sudo systemctl start apache2
% sudo vi /etc/apache2/sites-available/virtual.host.conf
SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem
% sudo a2ensite virtual.host
% sudo a2enmod ssl
- Let’s Encryptでマルチドメインの証明書を取得するには、-dオプションのあとにホスト名を,(カンマ)区切りで複数指定します(今回は未実施)。
- 証明書自動更新については、certbot-autoからsnapdを用いた更新に変わったようです。自動更新においてはこちらを試したいと思います。
参考:https://certbot.eff.org/lets-encrypt/ubuntufocal-apache
#MovableType 7の設置
##ディレクトリ構成
- スタティックディレクトリ /var/www/html/mt/mt-static
- アプリケーションディレクトリ /var/www/html/mt
- ウェブサイトディレクトリ /var/www/html/
- 管理画面URL https://www.example.com/mt
- ウェブサイトの公開URL https://www.example.com
参考: https://www.movabletype.jp/documentation/mt7/installation/preparation/new-installation/
##パッケージの配置
% sudo apt install unzip
% unzip ~/MT7-R****.zip
% mkdir /var/www/html/mt
% mkdir /var/www/html/mt/mt-static
% cp -R ~/MT7-R****/* /var/www/html/mt/.
##CGI動作設定
% sudo vi /etc/apache2/conf-available/mt-cgi.conf
<Directory "/var/www/html/mt">
Options +ExecCGI
AddHandler cgi-script .cgi .pl .py .rb
</Directory>
% sudo a2enconf mt-cgi
% sudo a2enmod cgid
% sudo chmod 755 /var/www/html/mt/*.cgi
% sudo chmod 777 /var/www/html/mt
% sudo chmod 777 /var/www/html/mt/mt-static/support
参考:https://www.movabletype.jp/documentation/mt7/installation/install/linux/
##システム管理者アカウントを作成
- ログインURL https://www.example.com/mt/
- ユーザ名 username
- パスワード password
参考:https://www.movabletype.jp/documentation/mt7/installation/install/movabletype/
##Movable Type 7詳細設定
- 下記の通りmt-config.cgi設定ファイルを構成。
#======== REQUIRED SETTINGS ==========
CGIPath https://www.example.com/mt/
StaticWebPath https://www.example.com/mt/mt-static/
StaticFilePath /var/www/html/mt/mt-static
# マルチドメインで一つのCGIにアクセスさせるためには、上記CGIPathとStaticWebPathを変更する。
#======== DATABASE SETTINGS ==========
ObjectDriver DBI::mysql
Database dbname
DBUser dbusername
DBPassword dbpassword
DBHost localhost
#======== MAIL =======================
EmailAddressMain mail@example.com
MailTransfer smtp
SMTPServer example.com
SMTPPort 587 (or 25)
SMTPAuth starttls (or 1 or ssl)
SMTPUser username
SMTPPassword password
DefaultLanguage ja
ImageDriver ImageMagick
参考:https://www.movabletype.jp/documentation/mt7/installation/install/smtp/ (SMTP)
参考2:https://www.movabletype.jp/faq/publish-blogs-by-multidomain.html (マルチドメイン)
#冗長化設定
##MariaDBのバックアップを取得
- スクリプトはrootで動かし、ユーザのホームディレクトリにバックアップを貯めていきます。
# mkdir /root/bin
% mkdir ~/db_backup
# vi /root/bin/backup4mysql.sh
#!/bin/sh
# umask 077
period=3
dirpath='/home/username/db_backup'
filename=`date +%y%m%d`
mysqldump --opt --all-databases --events --default-character-set=binary -u root --password=dbpassword | gzip > $dirpath/$filename.sql.gz
oldfile=`date --date "$period days ago" +%y%m%d`
rm -f $dirpath/$oldfile.sql.gz
- パスワードが記載されているのでスクリプトはchmodしておきます。
# chmod 0700 /root/bin/backup4mysql.sh
rootのcrontabに登録して自動実行
# echo "0 3 * * * root /root/backup4mysql.sh" > /etc/cron.d/backup4mysql
参考:https://qiita.com/crimson_21/items/6171a95f8ddb2861e2e6
##wwwからwww2にデータを転送する準備
- パスワードレスの公開鍵認証でrsyncができるようにします。
- www2.example.comについて、rsyncでの転送のためにホスティング事業者のカスタマーコントロール画面でパケットフィルタを設定し、TCP22をwww.example.comのIPアドレスに対して許可する必要があります。
% ssh keygen -t rsa -b 4096
% chmod 700 /home/username/.ssh
% chmod 600 /home/username/.ssh/id_rsa.pub
% scp /home/username/.ssh/id_rsa.pub
username@www2.example.com:/home/username/.ssh/id_rsa.pub
% cat /home/username/.ssh/id_rsa.pub >> /home/username/.ssh/authorized_keys
% rm /home/username/.ssh/id_rsa.pub
##データベースのバックアップ
- MariaDBのバックアップ3世代をメインからサブに転送する
% vi /home/username/bin/rsyncTo2ndhost.sh
rsync -avzu -e ssh --delete /home/username/db_backup username@www2.example.com:/home/username/
# --deleteオプションをつけているので、メインにないバックアップはサブからも削除されます。
ファイルのバックアップ
- /var/www/htmlのデータをメインからサブに転送する
rsync -avzu -e ssh /var/www/html username@www2.example.com:/home/username/html_backup
# --deleteオプションをつけていないので、メインから誤って消去したファイルもサブには残ります。
##ユーザのcrontabに登録
% crontab -e
0 4 * * * /home/username/bin/rsyncTo2ndhost.sh
#メール送信設定
- SMTP-AUTHに対応したメール送信を行うために、PostfixとDovecotを設定
% sudo cp /etc/postfix/main.cf.proto /etc/postfix/main.cf
% sudo vi /etc/postfix/main.cf
mail_owner = postfix
myhostname = www.example.com
mydomain = example.com
myorigin = mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
local_recipient_maps = unix:passwd.byname $alias_maps
mynetworks_style = subnet
mynetworks = 127.0.0.0/8, [IPアドレス/ネットマスク]
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
#smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_banner = $myhostname ESMTP unknown
sendmail_path = /usr/sbin/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
#html_directory =
#manpage_directory =
#sample_directory =
#readme_directory =
# SMTP Auth
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_auth_destination, perm\
it_sasl_authenticated, reject
message_size_limit = 10485760
%sudo vi /etc/postfix/master.cf
# submission inet n - y - - smtpd
submission inet n - y - - smtpd
# -o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
% sudo newaliases
% sudo systemctl restart postfix
#コールドスタンバイ
- www2.example.comのapache2は停止して、自動起動を止めておく。
- バックアップを手動で取得した後、停止させる。
% sudo systemctl stop apache2
% sudo systemctl disable apache2
##異常発生時
- www2.example.comのWebサーバを起動して、自動起動を設定する。
% sudo systemctl start apache2
% sudo systemctl enable apache2
##mysqldumpファイルの書き戻し
- /home/username/db_backupから、データを選択する。
% sudo mysql -u root -p < dump.sql