Movable TypeをUbuntu, Nginx環境にインストール

2020-09-09 | コメント(0)

コメント投稿時の「An error occurred: コメントを入力していません。」のエラー表示で辿り着いた方は、

Movable Typeのコメント投稿時のエラー表示不具合を修正 を参照してください。

Movable Type コメント投稿エラー表示不正

ローカル環境でのテストやVPSを借りたときにMovable Typeの環境作成に戸惑うことがあると思いエントリーを残します。

インストール環境の Ubuntu は 18.04 です。Ubuntu実機、Docker EE, WSLでも同じく動作します。

MT は 6.7.0(MT-6.7.0.zip) を使いますが、MTの設定としては他のバージョンでも変わりありません。MT7でも環境を作る方法として同じです。

Ubuntu デスクトップでのGUI操作は基本的にしません。他PCからのsshでCUI操作をします。

動作優先とするので、セキュリティ的な考慮は深く考えません。

Movable Type って何?という人のために簡単に言うと、ブログサイトを作成するもので、ブログ用途だけでなくCMS的にサイト作成も出来ます。これは使い方次第です。

Movable Type はPerlで実装されているのでperl環境が必要です。WindowsでもPerl環境を整えれば動かすことが出来ます。

Movable Typeで生成されるサイトのコンテンツは静的なhtmlファイルが出力されます。このため、php等でよくあるような実行時にページ処理されて表示されるというものとは違いますが、生成されるファイルの拡張子を .php にすれば、phpタグコードを埋め込むと結果的にphpの処理が動きます。IISと.NETの環境であれば、拡張子を .aspx にすればASP.NETのコードを埋め込んで動作させることも出来ます。

なお当方、当エントリーの際に MT6, MT7 のコメント不具合のテスト確認のため、トライアルの申し込みをしてトライアル期間中に導入確認したものです。ついでに開発者ライセンスも申請しSAIDも取得しております。個人無償ライセンスを使用する方はインストール制限がありますのでライセンスに抵触しないようにご注意ください。

fcgiwrapは、WebサーバーからFastCGI動作としてperlアプリへ受け渡すために必要になるものです。

インストールパッケージは fcgiwrap で、最初はインストールされていないはずです。
インストールされているか dpkg で確認。

dpkg -l | grep fcgi*

インストールされて無ければ fcgiwrap は見つかりません。

それでは、インストール

sudo apt install fcgiwrap -y

インストール後、/var/run/fcgiwrap.socket が作られていることを確認しておきます。

ls /var/run/fcgi*

→ /var/run/fcgiwrap.socket があるはずです。

fcgiwrap はサービスなのでスタートしておきます。

sudo service fcgiwrap start

Nginxをインストールしていなければインストールしてください。

sudo apt install nginx -y

SSLを有効にする場合の設定は前のエントリーに少しだけ書いています。
UbuntuにNginxをインストール

Nginxのlocation設定で、cgi拡張子とcaptcha画像のURLパスを有効にします。
captcha画像は、../mt-comments.cgi/captcha/*/******.. という形式のパスになるので、.cgi/~のパスを有効にします。

sudo nano /etc/nginx/sites-enabled/default

以下、変更箇所 (46 行目, 65-81 行目)

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        #server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}

        location ~ \.cgi(/|$) {
            fastcgi_index index.cgi;
            fastcgi_split_path_info ^(.+?\.cgi)(/.*)$;
            if (!-f $document_root$fastcgi_script_name) {
                return 404;
            }
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
            fastcgi_pass unix:/var/run/fcgiwrap.socket;
            fastcgi_read_timeout 600;
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
            proxy_send_timeout 600;
            send_timeout 180;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#       listen 80;
#       listen [::]:80;
#
#       server_name example.com;
#
#       root /var/www/example.com;
#       index index.html;
#
#       location / {
#               try_files $uri $uri/ =404;
#       }
#}

(上書保存、終了 : CTRL + s、CTRL + x)

46 行目はサーバー名。ウェブサイトのホストが "_" になるので、外部へ公開する際のFQDNにするか、コメントアウトします。

(php拡張子の設定がコメントアウトされている下箇所に)
65-81 行目、追加行です。
cgi拡張子、.cgi/ パスのFastCGI設定になります。
75 行目の fastcgi_pass は、unixとして fcgiwrapをインストールした時の fcgiwrap.socket へのパスを指定します。

今後fcgiwrapがアップデートされて、"fcgiwrap.socket"のファイル名等が変更された場合には適宜変える必要があります。

76-80 行目は、CGI処理がタイムアウト等で 502 Bad Gateway が発生することがあるためタイムアウト秒を指定しています。

タイムアウトで600秒は多すぎると思いますので適宜変更してください。
具体的にMTの管理画面「システム」>「ツール」>「システム情報」の画面表示でエラーするので、システム情報画面が表示出来る範囲になれば良いと思います。
システム情報画面で時間が掛かりすぎるのも変なので、NginxかDNS周りなど、なにかが足りない事が原因かもしれません。

インストールするものは、mariadb-server と mariadb-client の2つです。
そのままインストールすると最新よりも前のものが降ってくるので先にリポジトリを更新します。

参考:リポジトリ更新前の list(エントリー投稿時)

sudo apt list | grep -i mariadb-server
mariadb-server/bionic-updates,bionic-updates,bionic-security,bionic-security 1:10.1.44-0ubuntu0.18.04.1 all
mariadb-server-10.1/bionic-updates,bionic-security 1:10.1.44-0ubuntu0.18.04.1 amd64
mariadb-server-core-10.1/bionic-updates,bionic-security 1:10.1.44-0ubuntu0.18.04.1 amd64

次のコマンドでリポジトリ更新

curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash

list 再確認

sudo apt list | grep -i mariadb-server

次の様に10.5 が加わった。

mariadb-server/不明 1:10.5.4+maria~bionic all
mariadb-server-10.1/bionic-updates,bionic-security 1:10.1.44-0ubuntu0.18.04.1 amd64
mariadb-server-10.5/不明 1:10.5.4+maria~bionic amd64
mariadb-server-core-10.1/bionic-updates,bionic-security 1:10.1.44-0ubuntu0.18.04.1 amd64
mariadb-server-core-10.5/不明 1:10.5.4+maria~bionic amd64

それでは、インストール

sudo apt install mariadb-server mariadb-client -y

インストール後 dpkg 確認

dpkg -l | grep -i mariadb
ii  libdbd-mysql-perl                          4.046-1                                          amd64        Perl5 database interface to the MariaDB/MySQL database
ii  libmariadb3:amd64                          1:10.5.4+maria~bionic                            amd64        MariaDB database client library
ii  mariadb-client                             1:10.5.4+maria~bionic                            all          MariaDB database client (metapackage depending on the latest version)
ii  mariadb-client-10.5                        1:10.5.4+maria~bionic                            amd64        MariaDB database client binaries
ii  mariadb-client-core-10.5                   1:10.5.4+maria~bionic                            amd64        MariaDB database core client binaries
ii  mariadb-common                             1:10.5.4+maria~bionic                            all          MariaDB common configuration files
ii  mariadb-server                             1:10.5.4+maria~bionic                            all          MariaDB database server (metapackage depending on the latest version)
ii  mariadb-server-10.5                        1:10.5.4+maria~bionic                            amd64        MariaDB database server binaries
ii  mariadb-server-core-10.5                   1:10.5.4+maria~bionic                            amd64        MariaDB database core server files
ii  mysql-common                               1:10.5.4+maria~bionic                            all          MariaDB database common files (e.g. /etc/mysql/my.cnf)

念のため、mariadbサービスをリスタート。※Dockerだとインストール直後に起動していないことがありました。

sudo service mariadb restart

これで最新のMariaDBのインストール完了です。デフォルトで TCP 3306ポートで動作しています。

mysql_secure_installationを実行します。

sudo mysql_secure_installation

以下のように質問されるので各回答します。ハイライトしたところが入力箇所です。

mariadbサービスが起動している状態で行ってください。
起動していない状態で進めると、

Enter current password for root (enter for none):

ここで、DBサーバーが起動していないため root のパスワードが通らず進めることができません。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] y
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

詳細な説明は省きますが、各質問は次の回答をします。

8行目
Enter current password for root (enter for none):
初期の root パスワードは無いので、初回だけはそのまま(空のまま)Enter

16行目
Switch to unix_socket authentication [Y/n]
→ y 入力

24行目
Change the root password? [Y/n]
→ y 入力

25,26行目
New password:
Re-enter new password:
→ root のパスワードを入力( 仮に P@ssw0rd など)
root はDBへのスーパーユーザーなので忘れないように!

38行目
Remove anonymous users? [Y/n]
→ y 入力

44行目
Disallow root login remotely? [Y/n]
→ y 入力

51行目
Remove test database and access to it? [Y/n]
→ y 入力

60行目
Reload privilege tables now? [Y/n]
→ y 入力

これで、MariaDB(MySQL)が出来たので、確認のため一度ログインしてみます。

mysql -u root -p mysql

rootのパスワードを入力しログイン、"MariaDB [mysql]>" のプロンプトでSQL入力待ちになるはずです。

Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 54
Server version: 10.5.4-MariaDB-1:10.5.4+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [mysql]>

試しに、データベース一覧

MariaDB [mysql]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec)

データベースが3つあるのが確認できます。

SQLコマンドから抜けるには、quitで抜けます。

MariaDB [mysql]> quit
Bye

さて、あらためて Movable Type 用のデータベースを作成します。データベースと言ってもテーブル等を作成する必要は無く、あくまでデータベースを作成するだけです。テーブルは後でMTのウイザードが勝手に作成してくれます。

MySQLにログイン

mysql -u root -p mysql

→パスワード入力して入ったら、ここからはSQLです。

データベース作成。DB名は "mt_db" とします。

create database mt_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Query OK, 1 row affected (0.000 sec)

ユーザー作成。ユーザー名は "mtuser" とします。('mtuser'@'localhost')
パスワードは"P@ssw0rd"とします。(仮です)

create user 'mtuser'@'localhost' identified by 'P@ssw0rd';
Query OK, 0 rows affected (0.065 sec)

作成ユーザーにDBへの権限を付与します。

grant all on mt_db.* to 'mtuser'@'localhost';
Query OK, 0 rows affected (0.124 sec)

権限をフラッシュさせます。(必須)

FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

終了、SQLから抜けます

quit;

これでDB作成は完了です。

MTのzipを取得しましょう。
(どこから?)私は、他のWebサーバーに置いてwgetしました。

まず、作業用に temp フォルダを作成してそこで作業します。

mkdir temp
cd temp

wgetで取得

wget http://172.24.0.31/temp/MT-6.7.0.zip

scpでローカルからコピーする場合は、

scp MT-6.7.0.zip adminuser@172.24.0.78:/home/adminuser/temp

の様になります。
参考 scpでファイル転送

unzipで解凍

unzip MT-6.7.0.zip

カレント移動

cd MT-6.7.0

zip解凍したMTのファイルはこの様になっています。

adminuser@ubuntu1:~/temp/MT-6.7.0$ ls -la
合計 204
drwxr-xr-x 15 adminuser adminuser  4096  7月 22 05:53 .
drwxrwxr-x  3 adminuser adminuser  4096  9月  6 11:03 ..
drwxr-xr-x  4 adminuser adminuser  4096  7月 22 05:53 addons
drwxr-xr-x  2 adminuser adminuser  4096  7月 22 05:53 alt-tmpl
drwxr-xr-x  2 adminuser adminuser  4096  7月 22 05:53 default_templates
drwxr-xr-x 44 adminuser adminuser  4096  7月 22 05:53 extlib
drwxr-xr-x  2 adminuser adminuser  4096  7月 22 05:53 import
-rw-r--r--  1 adminuser adminuser 17144  7月 22 05:52 index.html
drwxr-xr-x  3 adminuser adminuser  4096  7月 22 05:53 lib
-rwxr-xr-x  1 adminuser adminuser   345  7月 22 05:52 mt-atom.cgi
-rwxr-xr-x  1 adminuser adminuser 31329  7月 22 05:52 mt-check.cgi
-rwxr-xr-x  1 adminuser adminuser   348  7月 22 05:52 mt-comments.cgi
-rw-r--r--  1 adminuser adminuser  1571  7月 22 05:52 mt-config.cgi-original
-rwxr-xr-x  1 adminuser adminuser   561  7月 22 05:52 mt-cp.cgi
-rwxr-xr-x  1 adminuser adminuser   347  7月 22 05:52 mt-data-api.cgi
-rwxr-xr-x  1 adminuser adminuser   353  7月 22 05:52 mt-feed.cgi
-rwxr-xr-x  1 adminuser adminuser   356  7月 22 05:52 mt-ftsearch.cgi
-rwxr-xr-x  1 adminuser adminuser   346  7月 22 05:52 mt-search.cgi
-rwxr-xr-x  1 adminuser adminuser   586  7月 22 05:52 mt-sp.cgi
drwxr-xr-x 19 adminuser adminuser  4096  7月 22 05:53 mt-static
-rwxr-xr-x  1 adminuser adminuser   349  7月 22 05:52 mt-tb.cgi
-rwxr-xr-x  1 adminuser adminuser   835  7月 22 05:52 mt-testbg.cgi
-rwxr-xr-x  1 adminuser adminuser   348  7月 22 05:52 mt-upgrade.cgi
-rwxr-xr-x  1 adminuser adminuser   346  7月 22 05:52 mt-wizard.cgi
-rwxr-xr-x  1 adminuser adminuser  1769  7月 22 05:52 mt-xmlrpc.cgi
-rwxr-xr-x  1 adminuser adminuser   343  7月 22 05:52 mt.cgi
-rw-r--r--  1 adminuser adminuser   415  7月 22 05:52 mt.psgi
drwxr-xr-x  6 adminuser adminuser  4096  7月 22 05:53 php
drwxr-xr-x 16 adminuser adminuser  4096  7月 22 05:53 plugins
-rw-r--r--  1 adminuser adminuser 28613  7月 22 05:52 readme.html
drwxr-xr-x  2 adminuser adminuser  4096  7月 22 05:53 search_templates
drwxr-xr-x  7 adminuser adminuser  4096  7月 22 05:53 themes
drwxr-xr-x  8 adminuser adminuser  4096  7月 22 05:53 tmpl
drwxr-xr-x  2 adminuser adminuser  4096  7月 22 05:53 tools

これを Nginx がドキュメントとして扱えるフォルダにコピーします。

MTとして、どのパスで動かしたいのかによりますが、ここでは以下の様にします。

http(s)://host/mtsite/~~ を各MTサイトとする。つまり、/mtsite/ 配下をMTの管理下にする。
MT本体は、http(s)://host/mtsite/mt/ にする。(当然、/mt/のパスには、サイトやコンテンツは作らない様に注意)
※/mt-static はそのままMT本体の配下

ということで、まずは、Nginx のドキュメントルート配下に沿うところにフォルダを作成します。デフォルトのルートは、/var/www/html/ なのでその配下に直接設置します。

sudo mkdir /var/www/html/mtsite
sudo mkdir /var/www/html/mtsite/mt

/mt/ フォルダにすべてのファイルをコピー(カレントファイルの以下全て)

sudo cp -r * /var/www/html/mtsite/mt/

/mtsite 配下のファイル権限を変更

sudo chown www-data.www-data /var/www/html/mtsite -R

これでMTが動くための準備は完了です。

ここまでの関連サービスを一度リスタートしておきます。

sudo service fcgiwrap restart
sudo service mariadb restart
sudo service nginx restart

ここまでの設定で、MTは動く状態になっていますが、オプションで使えるperlのモジュールが入っていませんので、各モジュールをインストールして解決していきます。

オプションモジュールはMTの必須条件ではありません。

色々とインストールしたく無い場合や、よく判らない/とりあえず試すだけ・・など、この項は一旦飛ばしても問題ありません。MTを設定した後でも再確認しながらインストール出来ます。

個人的には、ImageMagickだけは何かと不便も出るので、ImageMagickはインストールしておくほうが良いと思います。

MariaDBは先にインストールしてください。
DBD::mysqlも解決しますし、502 Bad Gateway で画面が表示出来ない場合もあります。

mt-check.cgiでインストールされていないperlのモジュールを確認しましょう。

http://172.24.0.78/mtsite/mt/mt-check.cgi

インストールされていないオプションモジュールは、この様に黄色で詳細が表示されています。

Movable Type システムチェック mt-check.cgi

mt-check.cgiが 502 Bad Gateway などで開けない場合は、MTのウイザードを始めて、途中のシステムチェック画面から「オプションモジュールを表示」のリンクからも確認できます。

Movable Type システムチェック

Movable Type オプションのモジュールが見つかりません

MTの設定が完了した後は mt-config.cgi が存在しているので、mt-check.cgi や MTのウイザードが実行出来なくなります。その場合は mt-config.cgi を一旦リネームしてください。

リネーム例(先頭をアンダーバーにする場合)

# カレントをMTに移動
cd /var/www/html/mtsite/mt/

sudo mv mt-config.cgi _mt-config.cgi

元に戻す場合

sudo mv _mt-config.cgi mt-config.cgi

見つからないオプションモジュールは以下のものがありました。
依存関係の少ない順に並べてみましたが、実際の表示順は固定されて無く、表示する度に変わります。
最小構成のUbuntuでどの様になるかを確認するために、Docker EE のUbuntu 18.04 でも確認したので、その結果を記載します。

Net::SSLeay
Net::SSLeayはSMTP認証にSSLまたは、STARTTLSコマンドを利用する場合に必要となります。

IO::Socket::SSL
IO::Socket::SSL のインストールは必須ではありませんが、Google Analytics との連携や SMTP 認証を SSL/TLS で行う場合など、外部と SSL/TLS通信をするために必要になります。

Authen::SASL
Authen::SASLとその依存モジュールはCRAM-MD5、DIGEST-MD5又はLOGINをSASLメカニズムとして利用する場合に必要となります。

XML::Parser
XML-RPC APIを利用するために必要です。

XML::Atom
Atom APIを利用する場合に必要となります。

XML::SAX::Expat
XML::SAX::Expatのインストールは必須ではありません。バックアップデータの復元に必要となります。

必須バージョン: 0.37

XML::LibXML::SAX
XML::LibXML::SAXのインストールは必須ではありません。バックアップデータの復元に必要となります。

必須バージョン: 1.7

Archive::Zip
バックアップと復元で圧縮の機能を利用する場合に必要となります。

IPC::Run
MTのイメージドライバとしてNetPBMを利用する場合に必要となります。

XML::SAX::ExpatXS
XML::SAX::ExpatXSのインストールは必須ではありません。バックアップデータの復元に必要となります。

必須バージョン: 1.3

GD
アップロードした画像のサムネイルを作成する場合に必要となります。

Imager
アップロードした画像のサムネイルを作成する場合に必要となります。

Image::Magick
アップロードした画像のサムネイルを作成する場合に必要となります。

Cache::Memcached
キャッシング機能としてmemcachedを利用する場合に必要となります。

YAML::Syck
のインストールは必須ではありません。YAML::Tinyよりも、軽量で高速に動作します。

Crypt::DSA
コメント投稿時のサインインが高速になります。

Crypt::SSLeay
Crypt::SSLeayはAOLやYahoo!などのSSLを利用するOpenIDのコメント投稿者を認証する場合、または Google Analytics を利用するために必要となります。

Plack
PSGI環境下でmt.psgiを実行する場合に必要となります。

CGI::PSGI
PSGI環境下でmt.psgiを実行する場合に必要となります。

CGI::Parse::PSGI
PSGI環境下でmt.psgiを実行する場合に必要となります。

DBD::Pg
PostgreSQLデータベースを使うにはDBD::Pgのデータベースドライバが必要です。

必須バージョン: 1.32

DBD::SQLite2
SQLite(v2)データベースを使うにはDBD::SQLite2のデータベースドライバが必要です。

Digest::SHA1
LiveJournal、あるいはOpenIDでコメント投稿者を認証するために必要になります。

Cache::File
Yahoo! Japanによるコメント投稿者のOpenID認証を許可する場合に必要となります。

Mozilla::CA
このモジュールは、Google Analytics などで SSL 証明書の検証に必要です。

DBD::SQLite
SQLiteデータベースを使うにはDBD::SQLiteのデータベースドライバが必要です。

XMLRPC::Transport::HTTP::Plack
PSGI環境下でmt.psgiを実行する場合に必要となります。

まず、apt installでインストール出来るものをインストールします。
一つずつインストールしながら、先のmt-check.cgiもしくは「オプションモジュールを表示」を確認しながら解決していきます。

なお、

Net::SSLeay
IO::Socket::SSL
Authen::SASL
XML::Parser
XML::Atom
XML::SAX::Expat
XML::LibXML::SAX
Archive::Zip
IPC::Run

この9つは、Docker EE のUbuntu 18.04 で見つからないモジュールとして現れたので記載していますが、Ubuntu 18.04 日本語 Remix には最初からインストールされている様なので現れませんでした。

Net::SSLeay ~ XML::LibXML::SAX までの7つは、libxml-libxml-perl をインストールすると、依存関係で7つともインストールされて解決します。

# Net::SSLeay
sudo apt install libnet-ssleay-perl -y

# IO::Socket::SSL
sudo apt install libio-socket-ssl-perl -y

# Authen::SASL
sudo apt install libauthen-sasl-perl -y

# XML::Parser
sudo apt install libxml-parser-perl -y

# XML::Atom
sudo apt install libxml-atom-perl -y

# XML::SAX::Expat
sudo apt install libxml-sax-expat-perl -y

# XML::LibXML::SAX
sudo apt install libxml-libxml-perl -y

# Archive::Zip
sudo apt install libarchive-zip-perl -y

# IPC::Run
sudo apt install libipc-run-perl -y

# XML::SAX::ExpatXS
sudo apt install libxml-sax-expatxs-perl -y

# GD
sudo apt install libgd-perl -y

# Imager
sudo apt install libimager-perl -y

# Image::Magick
sudo apt install perlmagick -y

# Cache::Memcached
sudo apt install libcache-memcached-perl -y

# YAML::Syck
sudo apt install libyaml-syck-perl -y

# Crypt::DSA
sudo apt install libcrypt-dsa-perl -y

# Crypt::SSLeay
sudo apt install libcrypt-ssleay-perl -y

# Plack
sudo apt install libplack-perl -y

# CGI::PSGI
sudo apt install libcgi-psgi-perl -y

# DBD::Pg
sudo apt install libdbd-pg-perl -y

# DBD::SQLite2
sudo apt install libdbd-sqlite2-perl -y

この apt のパッケージ名にはパターンがあります。
ImageMagick と XML::LibXML::SAX だけは別ですが、他のものは lib~ で始まり -perlで終わります。途中の区切りはハイフンになります。

sudo apt list | grep **** で対象のものが見つかれば、それをインストールすることで大体は解決できます。

この他は、apt で探してもどうも見つからないのでCPANから取得・ビルドします。

ビルド環境のために、先に build-essential をインストールしておきます。(入れておかないとmakeで失敗します)

sudo apt install build-essential -y

CPANからの取得は、perl -MCPAN -e ***** のコマンドで行います。

CPANから取得する際の初回時に次の質問をされるので「yes」と答えてください。

CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes]

Digest::SHA1

sudo perl -MCPAN -e 'install Digest::SHA1'

Cache::File

sudo perl -MCPAN -e 'install Cache::File'

Mozilla::CA

sudo perl -MCPAN -e 'install Mozilla::CA'

DBD::SQLite

sudo perl -MCPAN -e 'install DBD::SQLite'

XMLRPC::Transport::HTTP::Plack

sudo perl -MCPAN -e 'install XMLRPC::Transport::HTTP::Plack'

Docker EE で試した時に Digest::SHA1 や DBD::SQLite などのインストールでメモリエラーが出ました。
起動しているサービスをストップしてインストール出来たので、もしメモリエラーが出る場合には起動しているものを停止してメモリの空きを確保するとインストール出来ると思います。

sudo service fcgiwrap stop
sudo service mariadb stop
sudo service nginx stop
... 他、起動しているものなど ...

XMLRPC::Transport::HTTP::Plack

Docker EE で試した時にインストール途中で下記の様に質問されました。
Ubuntu 18.04 日本語 Remixでは質問されませんでした。

Running install for module 'XML::Twig'
Fetching with LWP:
http://www.cpan.org/authors/id/M/MI/MIROD/XML-Twig-3.52.tar.gz
Fetching with LWP:
http://www.cpan.org/authors/id/M/MI/MIROD/CHECKSUMS
Checksum for /root/.cpan/sources/authors/id/M/MI/MIROD/XML-Twig-3.52.tar.gz ok
Configuring M/MI/MIROD/XML-Twig-3.52.tar.gz with Makefile.PL
run 'perl Makefile.PL -y' to install all tools,
    'perl Makefile.PL -n' to skip installation
Do you want to install 'xml_pp' (XML pretty printer)? [y]
Do you want to install 'xml_grep' (XML grep - grep XML files using XML::Twig's subset of XPath)? [y]
Do you want to install 'xml_split' (split big XML files)? [y]
Do you want to install 'xml_merge' (merge back files created by xml_split)? [y]
Do you want to install 'xml_spellcheck' (spellcheck XML files skipping tags)? [y]

依存関係のインストールと思いますので、全て y を入力します。

XMLRPC::Transport::HTTP::Plack

インストール時に次の様な表示がされて入力待ちになります。

Appending installation info to /usr/local/lib/x86_64-linux-gnu/perl/5.26.1/perllocal.pod
  NEILB/DIME-Tools-0.04.tar.gz
  /usr/bin/make install  -- OK
Running install for module 'Apache'
Fetching with LWP:
http://www.cpan.org/authors/id/G/GO/GOZER/mod_perl-1.31.tar.gz
Fetching with LWP:
http://www.cpan.org/authors/id/G/GO/GOZER/CHECKSUMS
Checksum for /home/adminuser/.cpan/sources/authors/id/G/GO/GOZER/mod_perl-1.31.tar.gz ok
Configuring G/GO/GOZER/mod_perl-1.31.tar.gz with Makefile.PL
************* WARNING *************

  Your Perl is configured to link against libgdbm,
  but libgdbm.so was not found.
  You could just symlink it to /usr/lib/x86_64-linux-gnu/libgdbm.so.5.0.0


************* WARNING *************
Enter `q' to stop search
Please tell me where I can find your apache src
 [../apache_x.x/src]

apachのソースコードを要求している様に見受けられますが、ここで CTRL + c を入力して進めます。ビルドが完了してインストール成功する場合もありますが、大抵は一旦結果としてビルドが失敗します。この場合は再度インストールすると成功します。駄目な場合は数回試してみてください。

make失敗時は、

/usr/bin/make test -- NOT OK

と表示されますが、

成功時は、

/usr/bin/make install  -- OK

が表示されます。

駄目な場合も数分後に再度インストールをすると成功するので、おそらく裏でアップデートか何か動いているのかもしれません。

すべてのモジュールがインストールされたら、mt-check.cgiで黄色で表示されるものが無くなります。MTのウイザード途中のシステムチェック画面にも「オプションモジュールを表示」のリンクは表示されなくなります。

MTにアクセスして設定ウイザードに従います。

http://172.24.0.78/mtsite/mt/ へアクセス

もし、このようにリダイレクト先ホストが "_" になってしまう場合は、Nginx の server_name が干渉してますので、server_name をコメントアウトしてください。
nginx server name error

トップページ、「Movable Type にサインイン」のボタンをクリックします。
Movable Type トップインデックス

「Movable Typeへようこそ」使用言語: 日本語を選びます。
Movable Typeへようこそ 使用言語の選択

「システムチェック」次へ。
Movable Type システムチェック Done

「データベース設定」MariaDBに作成したDBの情報を入力します。
Movable Type データベース設定

データベースの種類: MySQLデータベース(推奨)
データベースサーバ: localhost
データベース名: mt_db
ユーザー名: mtuser
パスワード: P@ssw0rd
正しければ、接続テストも問題ありません。

Movable Type データベース設定完了

次にメール設定です。これは記事へコメントが投稿された時に、記事の投稿者へメール通知される機能があるのですが、その際の差出人になるところです。
メール送信はとりあえず後回しで仮に入力しておきます。mt-config.cgiに設定されるので後で変更できます。

Movable Type メール設定 システムメールアドレス

構成ファイル完了。ここでMTの構成ファイル設定が完了します。このタイミングでmt-config.cgiが作成されます。

Movable Type 構成ファイル 設定完了

次に、システム管理者のアカウント作成になります。自分自身が管理者で且つ唯一の記事の投稿者で運用するなら自分でも良いと思いますが、管理者アカウントは使い分けておくほうが良いと思います。

Movable Type システム管理者アカウント作成

最初のウェブサイト作成です。公開サイトになるので、MTの管理下と考えているパスにしてください。作成後にもパス変更できますが、正しいパスにしておくほうが良いでしょう。MTの理解に乏しい場合は、とりあえず当エントリーの通りにして試してください。

Movable Type 最初のウェブサイトを作成

ウェブサイト名: First Website
ウェブサイトURL: http://172.24.0.78/mtsite/
ウェブサイトパス: /var/www/html/mtsite
注意:ウェブサイトURLは、末尾 / で終わります。ウェブサイトパスは、末尾 / は入れてはいけません。

インストール後、DBにテーブルが作成され、MTが動作するための設定を自動で行ってくれます。

これでMTのインストールが完了です。

Movable Type インストール 完了

サインイン画面
システム管理者のアカウントでサインインしてください。

Movable Type サインイン

サインインした直後のダッシュボード画面

Movable Type ダッシュボード

これで、MTの設定は完了です。

設定直後に mt-config.cgi を確認したところ以下の様になっていました。

sudo nano /var/www/html/mtsite/mt/mt-config.cgi
## Movable Type Configuration File
##
## This file defines system-wide
## settings for Movable Type. In
## total, there are over a hundred
## options, but only those
## critical for everyone are listed
## below.
##
## Information on all others can be
## found at:
##  http://www.movabletype.jp/documentation/config

#======== REQUIRED SETTINGS ==========

CGIPath        /mtsite/mt/
StaticWebPath  /mtsite/mt/mt-static/
StaticFilePath /var/www/html/mtsite/mt/mt-static

#======== DATABASE SETTINGS ==========

ObjectDriver DBI::mysql
Database mt_db
DBUser mtuser
DBPassword P@ssw0rd
DBHost localhost

#======== MAIL =======================
EmailAddressMain test@test.com

DefaultLanguage ja

ImageDriver ImageMagick

ImageDriverがImageMagickになっていますが、MTのウイザードを実行する前にオプションモジュール確認で ImageMagick をインストールしているためです。

オプションモジュールに何もインストールせずにウイザードを完了させると、Ubuntu 18.04 日本語 Remixの場合は IPC::Run があるので、ImageDriverはNetPBMになります。

レンタルサーバー等では、OSに何が入っているかはサーバー次第になるので、MTで有効なImageDriverが何も入っていなければMTの画像処理は何も出来ないことになります。

ちなみにXREAは、WebサーバーはApacheで、OSもおそらくUbuntuでは無いですが、ImageMagickは入っているのでMTでも使えています。

MTで使用するImageDriverを変更する際には公式の Movable Type 環境変数リファレンス ImageDriver を参考にしてください。

mt-config.cgiは、MT本体のパスやmt-staticのパス、メール設定、mt-search.cgi、mt-comments.cgi の名前変更や制限調整など、詳しくはMTのマニュアルに委ねますが、サイトのカスタマイズで仕上げるまでに都度修正することも多いでしょう。

MTのダッシュボードが表示されたら、最初のサイト(First Website)で再構築を行うと、MTから各Webページのファイル生成されてWebブラウザから閲覧できます。これは最初の公開サイトになります。

Movable Type 構築後の最初のサイト

ImageDriverがImageMagickであれば、画像をアップロードするする際のサムネイル変換も出来るはずです。

Captcha画像も表示出来るか確認しておいたほうが良いでしょう。当初コメント機能は使わないと思っていたところ、後々になってやっぱり使いたいとなった時に使えないとなると困ると思います。

サイトの設定、「コミュニケーション設定」で、CAPTCHAプロバイダがあるので、「Movable Type 規定」にします。もし選択肢が無い場合は、ImageMagickが使えない状態なのでインストールモジュールから確認し直します。

コメントを許可、コメントポリシーは自動的に公開しないにします。(任意ですが)

「登録/認証」の設定で、ユーザー登録をなしにして、匿名コメントを受けるために認証もなしにします。

適当な記事を書いて、コメント許可にして公開します。

Movable Type コメント入力画面Captcha

記事を見て、Captcha画像が表示できていればOKです。
※コメント内容が未入力等で投稿するとエラー表示として正しくない画面になります。これについては次の項を参考にしてください。

セキュリティ的には、MT本体のパスには基本認証を掛け、検索やコメント(mt-search.cgi、mt-comments.cgi)は認証しない等、Nginx側の設定も必要になってきます。

コメントを許可にした記事やウェブページで、コメント内容が未入力等で投稿するとエラー表示として正しくない画面になります。具体的には次のような画面になります。

Movable Type コメント投稿エラー表示不正

具体的な修正方法を Movable Typeのコメント投稿時のエラー表示不具合を修正 に纏めましたので参照してください。

当エントリーの構成には脱線しますが、ハマる可能性があるので記載します。

設定が正しいにも関わらずCaptcha画像が表示出来ない場合、MySQLが使われていないか確認しましょう。
古いバージョンのMySQLでは、ImageMagickと相性が悪くCaptcha画像が表示出来ない様です。

MariaDBを使用している場合は問題ありませんが、レンタルサーバー等ではMySQLでバージョンが固定されてしまうため、表示出来ないことがあります。

これは MT に原因があるわけでは無く、OSの構成に依存するため、問題がある場合は MT-6 も MT-7 も表示出来ません。
※XREAでは表示出来ません。

この場合の対応として、Q&Aにヒントになる回答内容がありました。
Movable Type Q&A, PNG 画像のサムネイルが生成されない

具体的には、ImageMagickLoader.pl ファイルを、addonsフォルダ内に新規作成し、

../[ MT 本体パス ]/addons/ImageMagickLoader.pl

ファイル内容を、

use Image::Magick; 1;

として設置します。

XREAでは、これでCaptcha画像が表示出来るようになりました。
暫定対処とのことですが、OS構成が変わることはあまり無いと思いますし、対応出来るなら使うというものです。

これを行っても駄目な場合、レンタルサーバーではOS構成を変えられないと思いますので、MT本体のCaptcha機能は諦めて reCAPTCHA 等を導入するしか無いと思います。

Captcha画像が視認出来ないくらい見難いことがあります。Captcha画像はMTの処理で明るさやノイズを付けて表示しているので、その部分を少し変更すると多少見やすいものに変更出来ます。

ここを触る場合は、自己責任でお願いします。

まず、この処理をしているコード箇所

../[ MT 本体パス ]/lib/MT/Util/Captcha.pm

    # Add some lines and dots to the image
    for my $i ( 0 .. ( $len * WIDTH() * HEIGHT() / 14 + 200 - 1 ) ) {
        my $a     = int rand( $len * WIDTH() );
        my $b     = int rand HEIGHT();
        my $c     = int rand( $len * WIDTH() );
        my $d     = int rand HEIGHT();
        my $index = $im->Get("pixel[$a, $b]");

        if ( $i < ( $len * WIDTH() * HEIGHT() / 14 + 200 ) / 100 ) {
            $im->Draw(
                primitive => 'line',
                stroke    => $index,
                points    => "$a, $b, $c, $d"
            );
        }
        elsif ( $i < ( $len * WIDTH() * HEIGHT() / 14 + 200 ) / 2 ) {
            $im->Set( "pixel[$c, $d]" => $index );
        }
        else {
            $im->Set( "pixel[$c, $d]" => "black" );
        }
    }

    # Read in the background file
    my $a          = int rand(5) + 1;
    my $background = Image::Magick->new();
    $background->Read(
        File::Spec->catfile( $base, 'background' . $a . '.png' ) );
    $background->Resize( width => ( $len * WIDTH() ), height => HEIGHT() );
    $im->Composite(
        compose => "Bumpmap",
        tile    => 'False',
        image   => $background
    );
    $im->Modulate( brightness => 105 );
    $im->Border(
        fill     => 'black',
        width    => 1,
        height   => 1,
        geometry => join( 'x', WIDTH() * $len, HEIGHT() )
    );

    my @blobs = $im->ImageToBlob( magick => $format );
    return $blobs[0];

ノイズを作っているのは、211 行目のfor文がメインです。
220-222 の3行で、ラインを入れたりドットを入れたりしてノイズを作っています。部分的にコメントするとその分のノイズが作成されなくなるのでCaptcha画像が見やすくなります。

背景の石壁画像は、ランダム値から236行目で選択されます。

明るさを調整しているのは244行目です。brightness => 105 の数値を上げると画像が明るくなります。

実際には、あまり細かく手を入れても再構成時に同じ設定をするのも面倒ですし、ノイズを除去するとCaptcha画像が鮮明になってしまうので、変更するなら明るさ調整程度で十分かと思います。
当方、244行目の brightness => 105 を、300 にして様子見したいと思います。

※私的メモに近い内容ですが

Dockerイメージに ubuntu:18.04 がプルされていることが前提です。

名前を blog01、ポート80, 443, 3306 が通るようにフォワードして作成する例です。

# 作成
docker run -it -d -p 8080:80 -p 8443:443 -p 3306:3306 --name "blog01" ubuntu:18.04

# 初回ログイン
docker exec -it blog01 /bin/bash
# 再ログイン
docker attach blog01

# 開始
# docker start blog01
# 停止
# docker stop blog01

# 強制停止
# docker kill blog01
# 削除
# docker rm blog01

Ubuntuに入ったら次のコマンド、DockerのUbuntuはパッケージが何も入っていないので必要なものを入れます。

apt update
apt upgrade -y

apt install iproute2 -y
apt install wget -y
apt install curl -y
apt install unzip -y
apt install nano -y

この後は、当エントリーの通りでインストール出来ます。rootで動くため sudo は不要になります。

カテゴリ:

コメントする

※HTMLタグは使えません

Author

あきちゃん

主に、.NETでWebシステムの設計と開発をしています。
(茨城県在住, 都内勤務)
プロフィール