3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ubuntu 20.04.1 LTSにMovableType 7を構築する

Last updated at Posted at 2021-08-07

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
/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
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
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/

##システム管理者アカウントを作成

参考:https://www.movabletype.jp/documentation/mt7/installation/install/movabletype/

##Movable Type 7詳細設定

  • 下記の通りmt-config.cgi設定ファイルを構成。
/var/www/html/mt/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
/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アドレスに対して許可する必要があります。
www.example.comにて
% 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
www2.example.comにて
% cat /home/username/.ssh/id_rsa.pub >> /home/username/.ssh/authorized_keys
% rm /home/username/.ssh/id_rsa.pub

##データベースのバックアップ

  • MariaDBのバックアップ3世代をメインからサブに転送する
www.example.comにて
% vi /home/username/bin/rsyncTo2ndhost.sh
~/bin/rsyncTo2ndhost.sh
 rsync -avzu -e ssh --delete /home/username/db_backup username@www2.example.com:/home/username/
# --deleteオプションをつけているので、メインにないバックアップはサブからも削除されます。

ファイルのバックアップ

  • /var/www/htmlのデータをメインからサブに転送する
~/bin/rsyncTo2ndhost.sh
 rsync -avzu -e ssh /var/www/html username@www2.example.com:/home/username/html_backup
# --deleteオプションをつけていないので、メインから誤って消去したファイルもサブには残ります。

##ユーザのcrontabに登録

% crontab -e 
crontab
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
/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
/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
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?