コメント投稿時の「An error occurred: コメントを入力していません。」のエラー表示で辿り着いた方は、
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インストール
- Movable Type用のNginx設定
- MariaDB(MySQL)インストール
- MariaDB(MySQL)初期設定
- Movable Type用のデータベース作成
- Movable Type設置
- Movable Typeのオプションモジュールをインストール
- Movable Type設定ウイザード実行
- Movable Type設定後の確認
※ Ubuntu実機のIPアドレスは 172.24.0.78 として説明しています。
- インストール後のカスタマイズ等
- コメント投稿時のエラー表示を修正
- コメント投稿時のCaptcha画像が表示出来ない場合
- コメント投稿時のCaptcha画像が見難い
- 他..
- Docker起動時のコマンド
fcgiwrapインストール
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
Movable Type用のNginx設定
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(MySQL)インストール
インストールするものは、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ポートで動作しています。
MariaDB(MySQL)初期設定
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用のデータベース作成
さて、あらためて 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作成は完了です。
Movable Type設置
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
Movable Typeのオプションモジュールをインストール
ここまでの設定で、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
インストールされていないオプションモジュールは、この様に黄色で詳細が表示されています。
mt-check.cgiが 502 Bad Gateway などで開けない場合は、MTのウイザードを始めて、途中のシステムチェック画面から「オプションモジュールを表示」のリンクからも確認できます。
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のウイザード途中のシステムチェック画面にも「オプションモジュールを表示」のリンクは表示されなくなります。
Movable Type設定ウイザード実行
MTにアクセスして設定ウイザードに従います。
http://172.24.0.78/mtsite/mt/ へアクセス
もし、このようにリダイレクト先ホストが "_" になってしまう場合は、Nginx の server_name が干渉してますので、server_name をコメントアウトしてください。
トップページ、「Movable Type にサインイン」のボタンをクリックします。
「Movable Typeへようこそ」使用言語: 日本語を選びます。
「システムチェック」次へ。
「データベース設定」MariaDBに作成したDBの情報を入力します。
データベースの種類: MySQLデータベース(推奨)
データベースサーバ: localhost
データベース名: mt_db
ユーザー名: mtuser
パスワード: P@ssw0rd
正しければ、接続テストも問題ありません。
次にメール設定です。これは記事へコメントが投稿された時に、記事の投稿者へメール通知される機能があるのですが、その際の差出人になるところです。
メール送信はとりあえず後回しで仮に入力しておきます。mt-config.cgiに設定されるので後で変更できます。
構成ファイル完了。ここでMTの構成ファイル設定が完了します。このタイミングでmt-config.cgiが作成されます。
次に、システム管理者のアカウント作成になります。自分自身が管理者で且つ唯一の記事の投稿者で運用するなら自分でも良いと思いますが、管理者アカウントは使い分けておくほうが良いと思います。
最初のウェブサイト作成です。公開サイトになるので、MTの管理下と考えているパスにしてください。作成後にもパス変更できますが、正しいパスにしておくほうが良いでしょう。MTの理解に乏しい場合は、とりあえず当エントリーの通りにして試してください。
ウェブサイト名: First Website
ウェブサイトURL: http://172.24.0.78/mtsite/
ウェブサイトパス: /var/www/html/mtsite
注意:ウェブサイトURLは、末尾 / で終わります。ウェブサイトパスは、末尾 / は入れてはいけません。
インストール後、DBにテーブルが作成され、MTが動作するための設定を自動で行ってくれます。
これでMTのインストールが完了です。
サインイン画面
システム管理者のアカウントでサインインしてください。
サインインした直後のダッシュボード画面
これで、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のマニュアルに委ねますが、サイトのカスタマイズで仕上げるまでに都度修正することも多いでしょう。
Movable Type設定後の確認
MTのダッシュボードが表示されたら、最初のサイト(First Website)で再構築を行うと、MTから各Webページのファイル生成されてWebブラウザから閲覧できます。これは最初の公開サイトになります。
ImageDriverがImageMagickであれば、画像をアップロードするする際のサムネイル変換も出来るはずです。
Captcha画像も表示出来るか確認しておいたほうが良いでしょう。当初コメント機能は使わないと思っていたところ、後々になってやっぱり使いたいとなった時に使えないとなると困ると思います。
サイトの設定、「コミュニケーション設定」で、CAPTCHAプロバイダがあるので、「Movable Type 規定」にします。もし選択肢が無い場合は、ImageMagickが使えない状態なのでインストールモジュールから確認し直します。
コメントを許可、コメントポリシーは自動的に公開しないにします。(任意ですが)
「登録/認証」の設定で、ユーザー登録をなしにして、匿名コメントを受けるために認証もなしにします。
適当な記事を書いて、コメント許可にして公開します。
記事を見て、Captcha画像が表示できていればOKです。
※コメント内容が未入力等で投稿するとエラー表示として正しくない画面になります。これについては次の項を参考にしてください。
セキュリティ的には、MT本体のパスには基本認証を掛け、検索やコメント(mt-search.cgi、mt-comments.cgi)は認証しない等、Nginx側の設定も必要になってきます。
コメント投稿時のエラー表示を修正
コメントを許可にした記事やウェブページで、コメント内容が未入力等で投稿するとエラー表示として正しくない画面になります。具体的には次のような画面になります。
具体的な修正方法を Movable Typeのコメント投稿時のエラー表示不具合を修正 に纏めましたので参照してください。
コメント投稿時のCaptcha画像が表示出来ない場合
当エントリーの構成には脱線しますが、ハマる可能性があるので記載します。
設定が正しいにも関わらず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画像が視認出来ないくらい見難いことがあります。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起動時のコマンド
※私的メモに近い内容ですが
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 は不要になります。
コメントする