2016.08.14 コミケ90にて初版発行
2016.08.17 データベースのバックアップと
リストアを加筆
2016.08.18 cron の設定を加筆
2016.08.26 2.1.1 のインストールに関して
加筆
2016.10.07 2.2.0 のインストールに関して
加筆
2016.10.14 2.2.1 のインストールに関して
加筆
2016.12.01 2.3.0 のインストールに関して
加筆
2016.12.14 2.4.0 のインストールに関して
加筆
2016.12.16 JSトラッキングに関して加筆
2017.01.09 2.5.1 のインストールに関して
加筆
2017.02.12 2.6.0 のインストールに関して
加筆
2017.07.19 タイトルのバージョン表記を変更
MySQL 5.7関連に追記
設定画面のキャッシュ設定を追記

オープンソースマーケティングオートメーション
Mautic 2.8.2 インストールの手順

Written by かたあま☆彡  


Mautic とは

 Mautic とは、本稿執筆時点(2016年10月)で唯一のオープンソースなマーケティングオートメーションソフトウェアで、訪問者のトラッキングを行えるだけでなく、本格的なキャンペーンの設計や、Salesforce などに代表される外部の CRM との連携も可能になっています。

 2017年6月2日に 2.8.2 がリリースされましたが、本稿に記載されている手順でインストールを行うことができます。
 また、一部のスクリーンショットは 2.1.0 および 2.2.0 のものが使用されています。

 なお、記載されている内容については、私は一切保証しませんし、それに伴って発生した如何なる事故にも責任は負いませんので、あらかじめ御了承ください。


Mautic 2.2.0 のダッシュボード


コンタクト(リード)の情報を表示したところ


トラッキングの履歴が長くなることを考慮した表示方法に変更されたようだ


バージョン 2.1.0 から新しくなったキャンペーンビルダー


キャンペーンに追加したセグメントに対して何を行うかのグループが表示される


Decision を選択した場合のメニュー


Action を選択した場合のメニュー


Condition を選択した場合のメニュー


Action からスコアリングポイントの増減を選んだ場合


その次に何を行うかを順次設定していく


バージョン 2.2.0 から加わった「会社」のメニュー


「会社」のメニューでは会社の諸情報が設定できる


バージョン 2.5.0 から加わった SAML シングルサインオンの設定画面


外部ツールと連携するためのプラグインが用意されている

 筆者は2015年11月に転職したのですが、新しい職場でこのソフトウェアを2016年2月から実験することとなり、それまで Windows しか触ったことのなかった筆者が、CentOS のインストール直後の状態から、Mautic のホームページから zip ファイルをダウンロードしてきて、動くようになるまでのインストール作業で七転八倒した末の結果が本稿となります(笑)。


Mautic の動作環境

 Mautic を動作させるために必要な環境は次の通りです。

ソフトウェアPHP5.6.19 以降 または 7.0x 以降
データベースMySQL5.5.3 以降
WebサーバApache2.x 以降
Nginx1.0 以降(1.8 を推奨)
IIS7

 なお、最新情報は https://www.mautic.org/download/requirements/ に書かれていますので、そちらをご覧ください。


インストールを行った環境

 本稿は以下の環境にて行ったインストール作業を元に作成されています。

本体QuantaQSSC-S4R (Quality Sample) / Intel Xeon X7560×4 / 32GB / 仮想化なし
OSCentOS7.2(最小構成にてインストール)
ソフトウェアPHP5.6.23
データベースMySQL5.7.14
WebサーバApache2.4


自宅の Quanta QSSC-S4R (Quality Sample)


搭載しているCPUは Intel Xeon X7560 である


root 以外のユーザー作成

 OS のインストールが完了したら、ローカルで root でログインして他のユーザーを作成します。
# useradd eamautic
 (Mautic用ユーザーの作成)
# useradd kataama
 (メンテナンス用ユーザーの作成)

# passwd eamautic
 (Mautic用ユーザーのパスワード設定)
# passwd kataama
 (メンテナンス用ユーザーのパスワード設定)

# visudo
 kataama   ALL=(ALL) ALL
 (メンテナンス用ユーザーがsudoできるように追記)


ssh を使えるようにする

 ずっとローカルのコンソールで作業するのも大変なので、ssh をできるようにします。
# yum -y install openssh
 (opensshをインストール)
# yum -y install openssh-server
 (opensshサーバをインストール)

 これでsshが可能になりますが、セキュリティを向上させるために、使用するポートを変更するとともに、root でいきなり ssh できないようにします。

 viなどのエディタを使用して、/etc/ssh/sshd_config 内にとりあえず22番ポートの設定を残したまま、任意のポート番号を追記します(※今回は2244番ポートを追加しています)。
 なお、初期状態では vim はインストールされていないので、必要に応じてインストールしてください。

# yum -y install vim
 (vim を使いたい場合はインストールする)
# vim /etc/ssh/sshd_config
 Port 2244
 PermitRootLogin no
 (sshd_configに追記)

 ただし、この状態では2244番ポートが ssh 用に開放されていないため、SELinux と firewalld の設定を変更します。
 SELinux の設定変更には semanage というコマンドを使いますが、入っていない場合にはインストールが必要です。

# yum -y install policycoreutils-python
 (semanage を使えるようにするためにインストール)
# semanage port -a -t ssh_port_t -p tcp 2244
 (2244番ポートを ssh 用として使用する設定)

 /usr/lib/firewalld/services/ の中に ssh.xml というファイルがありますが、これが ssh として使うポート番号を記述したファイルです。

 ssh.xml の中身には使用するポート番号として22番が書かれているので、これをそのまま書き換えてしまってもよいのですが、安全のために ssh-x.xml などのような別のファイル名でコピーしておき、そちらを書き換えます。

# vim ssh-x.xml
 <port protocol="tcp" port="2244"/>
 (ssh-x.xml に2244番を記載する)

# systemctl enable firewalld
 (firewalld を有効にする)
# systemctl start firewalld
 (firewalld を起動する)
# firewall-cmd --permanent --add-service=ssh
# firewall-cmd --permanent --add-service=ssh-x
# firewall-cmd --permanent --add-service=http
# firewall-cmd --permanent --add-service=https
# firewall-cmd --permanent --add-service=smtp
 (許可するサービスとして ssh / ssh-x / http / https / smtp を追加する)

 なお、今回は取り上げませんが、データベースを別の本体にレプリケーションする場合には、許可するサービスとして mysql も追加しておく必要があります。

# firewall-cmd --permanent --add-service=mysql
 (データベースのレプリケーションをする場合は mysql も許可するサービスとして追加する)

ここまで終わったら、sshd と firewalld を再起動します。

# systemctl relstart sshd
 (sshd を再起動する)
# systemctl restart firewalld
 (firewalld を再起動する)

 これで22番とは異なるポートを使って ssh できるようになったはずなので、別のコンピュータから新しいポートで ssh で入れるかを確認します。

 接続できない場合はローカルのコンソールから firewall-cmd --list-all や semanage port -l などを使用して、ファイアウォールと SELinux の設定が適切になっているかを確認してください。

 問題なく接続できたら、通常のポート番号に関する設定を /etc/ssh/sshd_config から削除するとともに、firewalld からも定義を削除して、sshd と firewalld を改めて再起動します。

# vim /etc/ssh/sshd_config
 (sshd_config に残してあった22番ポートの記述を削除する)
# firewall-cmd --permanent --remove-service=ssh
 (22番ポートの ssh の登録を削除)
# systemctl restart sshd
 (sshd を再起動する)
# systemctl restart firewalld
 (firewalld を再起動する)

 続いて、サービスに対して接続させるユーザーをIPで制御するため、/etc/hosts.allow と /etc/hosts.deny を編集します。

 ssh はメンテナンスに使用するコンピュータの IP のみ、httpd はメールに埋め込まれる gif トラッキングのために全ての IP を許可する設定を行います。
 また、自分自身がメールを送信する構成の場合には、sendmail も設定しておきます。

# vim /etc/hosts.allow
 sshd : ssh で接続を許可するIP
 httpd : ALL
 sendmail : 127.0.0.1
 (hosts.allow に追記)

# vim /etc/hosts.deny
 ALL : ALL
 (hosts.deny に追記)

 さらにセキュリティを向上させる場合には、ssh の認証を鍵ファイルで行うという方法もありますが、運用における制限や手間も増えてしまうため、今回は割愛します。

 さて、これで ssh によるリモート接続が可能になったので、Tera Term Pro などを使ってメンテナンス用ユーザーでログオンし、sudo su - で root になって作業を進めるとよいでしょう。


MySQL のインストール

 CentOS 7 には、MySQL の互換データベースとして MariaDB が最初からインストールされていますので、そちらを使うこともできますが、今回は Mautic の推奨環境に近付けるべく、あえて MySQL に変更することにしました。

 そのため、MySQL のインストールを行う前に MariaDB のアンインストールが必要になります。

# yum remove mariadb-libs
 (MariaDB を削除する)
# rm -rf /var/lib/mysql/
 (データベースファイルが保存されるディレクトリを削除)

 続いて、MySQL 5.7 をインストールするためのリポジトリを追加し、インストールを進めていきます。

# yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
 (MySQL 5.7 をインストールするためにリポジトリを追加する)
# vim /etc/yum.repos.d/mysql-community.repo
 [mysql56-community]
 name=MySQL 5.6 Community Server
 baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
 enabled=0
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

 [mysql57-community]
 name=MySQL 5.7 Community Server
 baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
 enabled=1
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

 (5.6 の enabled を「0」・ 5.7 の enabled を「1」に変更する)

# yum -y install mysql-community-server
 (MySQL をインストール)

 MySQL のインストールが完了したら、使用する文字コード情報を MySQL の設定ファイルに追記します。また、本体起動時から有効になるように設定し、 MySQL にアクセスするための root アカウントを作成します。

# vim /etc/my.cnf
 character-set-server=utf8
 (my.cnf に追記)

# systemctl enable mysqld
 (mysqld を有効にする)
# systemctl start mysqld
 (mysqld を起動する)
# /usr/bin/mysqladmin -u root password '任意のパスワード'
 (mysql の root アカウントのパスワードを設定)

 なお、MySQL 5.7 では、初期の root パスワードとして仮のものが自動的に設定されるようになった模様ですので、インストール後に cat /var/log/mysqld.log | grep 'password is generated' を実行し、表示されるパスワードを使用して MySQL にログオン後に SET PASSWORD で設定を行ってください。

 これで MySQL に root としてアクセスできるようになったので、次に Mautic 用のデータベースの作成と、そのデータベースに接続するユーザーの情報を設定します。

# mysql -u root -p
 (実行すると MySQL の root のパスワードを聞かれるので入力する)
 mysql > create database mauticdb;
 (Mautic 用のデータベースを作成)
 mysql > grant all on mauticdb.* to 'eamautic'@'localhost' identified by 'eamautic のパスワード';
 (Mautic のデータベースにアクセスを許可するユーザーの設定)
 mysql > flush privileges;
 (データベースに対するユーザーの権限設定を読み直す)
 mysql > quit
 (MySQL を抜ける)


httpd のインストールと設定

 次に httpd をインストールと設定を行います。CentOS 7 では Apache の 2.4 がデフォルトでインストールされます。

# yum -y install httpd
 (Apache 2.4 をインストールする)

 Mautic のインストール階層はドキュメントルートにすることが多いと思いますが、セキュリティ向上のために /home/eamautic/public_html をドキュメントルートとし、さらにその階層にあらたなディレクトリとして easfma を作成して、その中にインストールします。

 上記の方針に合うように、/etc/httpd/conf/httpd.conf を編集していきます。

# vim /etc/httpd/conf/httpd.conf
 DocumentRoot "/home/eamautic/public_html"

 <Directory />
    AllowOverride none
    Require all denied
 </Directory>

 <Directory "/home/eamautic/public_html">
    AllowOverride none
    Require all denied
 </Directory>

 <Directory "/home/eamautic/public_html/easfma">
    Options FollowSymLinks
    AllowOverride All
    Require all granted
 </Directory>

 (httpd.conf を編集)

 Apache 2.4 以降であれば、上記の設定を行うことでドキュメントルートにはアクセスできなくなるはずなのですが、実験してみるとなぜかアクセスできてしまったので、ファイルサイズがゼロの index.html をドキュメントルートに置いておきます。

 また、Apache で mod_access_compat が使えるのであれば、Apache 2.2 と同じように以下の設定ができ、こちらはファイルサイズがゼロの index.html を置かなくても大丈夫です。

# vim /etc/httpd/conf/httpd.conf
 DocumentRoot "/home/eamautic/public_html"

 <Directory />
    AllowOverride none
    Deny from all
 </Directory>

 <Directory "/home/eamautic/public_html">
    order deny,allow
    Deny from all
    AllowOverride None
 </Directory>

 <Directory "/home/eamautic/public_html/easfma">
    order allow,deny
    allow from all
    Options FollowSymLinks
    AllowOverride All
 </Directory>

 (httpd.conf を編集・ mod_access_compat が使える場合)

 そして、Mautic では php を使用しますので、以下の記述も /etc/httpd/conf/httpd.conf に追加します。

# vim /etc/httpd/conf/httpd.conf
 <IfModule dir_module>
    DirectoryIndex index.html index.htm index.php
 </IfModule>

 AddType application/x-httpd-php .php
 (httpd.conf を編集)

 また、Apache にデフォルトで設定されている動作確認用のページを表示しないように /etc/httpd/conf.d/welcome.conf を編集します。

# vim /etc/httpd/conf.d/welcome.conf
 #<LocationMatch "^/+$">
 #   Options -Indexes
 #   ErrorDocument 403 /.noindex.html
 #</LocationMatch>

 (welcome.conf を編集・上記4行をコメントアウトする)


php のインストールと設定

 続いて、php のインストール作業を行います。CentOS 7 では php 5.4 がデフォルトとなっているため、そのままでは Mautic の動作要件に達していません。
 そのため php 5.6 をインストールための準備として、EPEL リポジトリと Remi リポジトリの追加を行います。

# yum -y install epel-release
 (EPEL リポジトリの追加)
# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
 (Remi リポジトリの追加)
 リポジトリの追加が終わったら、それらを使用して php 5.6 のインストールを行います。

# yum -y --enablerepo=remi,remi-php56 install php php-mbstring php-xml php-mcrypt php-mysql
 (php 5.6 および周辺モジュールのインストール)

 なお、Mautic 2.0 からは php 7.0 への対応も行われていますので、そちらを使用する場合は以下のとおりとなります。

# yum -y --enablerepo=remi,remi-php70 install php php-mbstring php-xml php-mcrypt php-mysql php-zip
 (php 7.0 および周辺モジュールのインストール)

 php のインストールが終わったら、/etc/php.ini の編集を行います。Mautic でのアセットのアップロードサイズの上限も、この設定に影響されます。
 また、日本語文字コードとして UTF-8 を想定していますので、その設定も行います。

# vim /etc/php.ini
 max_execution_time = 1200

 max_input_time = 1200

 memory_limit = 256M

 post_max_size = 20M

 upload_max_filesize = 16M

 default_socket_timeout = 1200

 date.timezone = Asia/Tokyo

 mysql.connect_timeout = 1200

 mbstring.language = Japanese
 mbstring.internal_encoding = UTF-8
 mbstring.http_input = UTF-8
 mbstring.http_output = UTF-8
 mbstring.encoding_translation = On
 mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII

 (php.ini を編集)


sendmail の設定

 Mauticでは、問い合わせなどをしてきた人にメールを送ったり、CSV でインポートしたコンタクト(リード)に対してメールを送付して、それが開封されたかどうかでスコアリングを行う機能があります。

 そのため、何らかのメール送信サービスを事前に準備する必要がありますが、今回は sendmail を使用することにしました。

# yum install sendmail
 (sendamail のインストール)
# yum install sendmail-cf
 (sendamail.mc のインストール)
# systemctl enable sendmail
 (sendamail を有効にする)
# systemctl start sendmail
 (sendamail を起動する)

 なお、今回のような「Mautic のサーバと sendmail のサーバが同じ」という環境であれば、インストール直後の「127.0.0.1 からの送信を許可するだけ」という設定でも特に問題はありませんが、念のため /etc/mail/sendmail.mc と /etc/mail/access の内容を確認しておくとよいでしょう。

 ただし、SPF レコードの登録を行っておかないと、送ったメールが迷惑メールと判断されてしまう可能性が高いので、通常のメールを送信するドメイン名の SPF レコードにメールを送信するサーバ(今回の場合は Mautic がインストールされているサーバ)のグローバル IP を追加して下さい。


Mautic のダウンロードと展開

 Mautic のホームページ https://www.mautic.org/ にアクセスし、「Download Now !」から Mautic のインストール用 ZIP ファイルをダウンロードします。

 なお、後述するデータベースのリストアの際に、古いバージョンの ZIP ファイルが必要になる場合がありますので、各バージョンの ZIP ファイルは保管しておいた方がよいでしょう。

 ダウンロードしたファイルを、WinSCP などを使用して Mautic をインストールするサーバに転送し、インストールするディレクトリにコピーします(今回は /home/eamautic/public_html/easfma にコピーしています)。

 目的のディレクトリにコピーが終わったら圧縮ファイルを展開しますが、環境によっては事前に解凍ソフトウェアのインストールが必要になります。

# yum -y install unzip
 (unzip のインストール)
# cd /home/eamautic/public_html/easfma
 (カレントディレクトリを移動)
# unzip 2.4.0.zip
 (Mautic のインストール用 ZIP ファイルを解凍)

 なお、本稿執筆時点(2017年7月)での最新版の Mautic は 2.8.2 ですが、2.1.1 までは ZIP ファイルを展開すると app の下にあるべき logs のディレクトリが自動的に生成されず、そのままでは Web ベースのセットアップ画面でエラーとして認識されてしまいます。

 そのため、あらかじめ logs のディレクトリを作成しておく必要があります(※2.2.0 以降ではこの問題は修正されていますので、展開したままの状態で大丈夫です)。

# cd /home/eamautic/public_html/easfma/app
 (カレントディレクトリを移動)
# mkdir logs
 (logs ディレクトリを作成)


httpd の起動とディレクトリの所有権などの変更

 ここまで終わったら httpd を有効にし、本体を起動した直後から動作するように変更します。

 また、ドキュメントルート以下のパーミッションと所有権を変更し、ドキュメントルートの変更に合わせてセキュリティコンテキストを変更して、管理画面へのアクセスや Mautic からログファイルの書き込みなどが正常に動くようにします。

# systemctl enable httpd
 (httpd を有効にする)
# systemctl start httpd
 (httpd を起動する)
# chown apache:apache -R /home/eamautic/public_html
 (ドキュメントルート以下の所有権を変更)
# semanage fcontext -a -t httpd_sys_rw_content_t "/home/eamautic/public_html(/.*)? "
 (ドキュメントルートの変更に合わせて SELinux の設定を変更)
# restorecon -R /home/eamautic/public_html
 (設定した SELinux の内容に合わせてセキュリティコンテキストを再設定する・・・が、正常に反映されない)
# chcon -R -t httpd_sys_rw_content_t /home/eamautic/public_html/
 (やむなくセキュリティコンテキストを chcon で再設定してお茶を濁す)
# setsebool -P httpd_can_sendmail 1
 (sendmailでメールを送れるようにSELinuxを設定)


Web ベースでの Mautic のインストールと cron の設定

 これで、Web ベースのインストールを行う準備ができたので、ドキュメントルートにブラウザからアクセスします。

 Next Step をクリックして、表示される画面にデータベース関連の情報を入力します。

 Next Step をクリックして、表示される画面に管理者に関する情報を入力します。

 Next Step をクリックして、表示される画面にメール送信に関する情報を入力します。

 Next Step をクリックすると、インストールが完了した旨の画面が表示されるので、Proceed to Mautic をクリックします。

 ログオン画面が表示されたら管理者のアカウントでログオンします。

 ログオンが成功すると、ダッシュボードが表示されます。

 初期状態では言語が英語に設定されているので、右上の歯車のマークをクリックして、出てきたメニューの中から Configuration をクリックします。

 System Defaults の中にある Default language を Japanese に、Default timezone を Asia Tokyo に設定して Save & Close をクリックします。

 これで表示される言語が日本語になりました。

 なお、2.1.1 / 2.2.0 / 2.2.1 / 2.3.0 / 2.4.0 では、この言語設定の変更などが即座には反映されず、いったんブラウザを終了させるかログアウトして改めて表示させると、それ以降は日本語で表示されるようになります。

 環境によってはログアウトしても日本語表示にならない場合があり、その時は /app/cache の中の prod のディレクトリを削除するか、別名に変更して新たに prod ディレクトリを作成して所有権を apache に変更してから、ブラウザでアクセスし直してください。

 2.5.1 では、設定画面で各種設定を行っても「設定されている値は指定したものになっているものの、反映されない」という問題があります。前述の「いったんログアウト」や「prod のディレクトリを削除するキャッシュクリア」を行っても改善しませんので、個別のアカウントの設定画面でタイムゾーンと合わせて設定するとよいでしょう。

 また、2.6.0 では、2.5.1 で発生していた「各種設定が反映されない」というバグは解消されましたが、その場ですぐに反映されないのは相変わらずで、さらに前述の「いったんログアウト」を行ってもダメだったので、「prod のディレクトリを削除するキャッシュクリア」を行ってようやく改善しました。

 また、ダッシュボードで表示される情報にキャッシュが使われないように、設定画面のシステムデフォルト内の「キャッシュ更新間隔」は 0 を設定しておいたほうがよいでしょう。

 Web ベースのインストールが終了したら、定期的に実行する cron の設定を行います。

# crontab -e
 */5 * * * * /usr/bin/php /home/eamautic/public_html/easfma/app/console mautic:segments:update
 */5 * * * * /usr/bin/php /home/eamautic/public_html/easfma/app/console mautic:campaigns:rebuild
 */5 * * * * /usr/bin/php /home/eamautic/public_html/easfma/app/console mautic:campaigns:trigger
 */5 * * * * /usr/bin/php /home/eamautic/public_html/easfma/app/console mautic:emails:send
 */5 * * * * /usr/bin/php /home/eamautic/public_html/easfma/app/console mautic:social:monitoring
 */5 * * * * /usr/bin/php /home/eamautic/public_html/easfma/app/console mautic:email:fetch
 */5 * * * * /usr/bin/php /home/eamautic/public_html/easfma/app/console mautic:webhooks:process
 00 * * * * /usr/bin/php /home/eamautic/public_html/easfma/app/console mautic:iplookup:download
 00 6 * * * yes|/usr/bin/php /home/eamautic/public_html/easfma/app/console mautic:maintenance:cleanup --days-old=365

 (5分 / 1時間 / 1日に1回のペースで実行するように root の crontab を設定)

# systemctl restart crond
 (crond を再起動する)

 なお、本来ならば cron -e -u apache で設定するのですが、なぜかパーミッション関連でエラーが出てしまうので、やむなく root の cron に設定しています。


管理画面へのアクセス制限

 これでセットアップ作業は概ね終わりですが、Mautic は WordPress などと違い、管理画面へのログオンがドキュメントルートへのアクセスとなっています。

 この状態のままでは管理画面が不特定多数からのアクセスに曝されてしまうため、トラッキングを正常に動作させつつ、特定の IP のみ管理画面へのアクセスを許可するようにドキュメントルートの .htaccess を編集します。

# vim /home/eamautic/easfma/.htaccess
 <IfModule mod_rewrite.c>
    RewriteEngine On

  RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.100$  
  RewriteCond %{REQUEST_URI} /easfma/s/login  
  RewriteRule (.*) - [F,L]  
  RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.100$  
  RewriteCond %{REQUEST_URI} /easfma/s/dashboard  
  RewriteRule (.*) - [F,L]  
  RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.100$  
  RewriteRule (index.htm|index.html) - [F,L]  

    # Set Authorization header for OAuth1a for when php is running under fcgi
    RewriteCond %{HTTP:Authorization} .+
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

 ※以下続く

 (.htaccess に赤枠内を追記・上記は 192.168.1.100 を許可する設定)

# chmod 600 /home/eamautic/public_html/easfma/.htaccess
 (.htaccess のパーミッションを設定)

 なお、追記した .htaccess は Mautic のバージョンアップを行うと自動的にデフォルトのもので上書きされてしまいますので、このファイルの控えを取っておいて、バージョンアップ後に書き戻す作業が必要になります。


エラー表示画面の変更

 さて、Mautic で存在しないファイルを読み込もうとすると、デフォルトでは以下のような微笑ましいページが表示されます。

 しかし、セキュリティ面を考えると、Mautic を使っていることは外部に知られたくありません。ですので、エラー表示画面もごく一般的なものに書き換えた方が安全です。

 Mautic のエラー表示画面はドキュメントルート内の app のディレクトリから辿って、app/bundles/CoreBundle/Views の下にある Error と Exception というディレクトリにそれぞれ 403.html.php / 404.html.php / 500.html.php というファイルがあるので、これらを書き換えます。

 編集を行うファイルのディレクトリパスが長いので、カレントディレクトリを目的のファイルのある場所にあらかじめ変更しておくとよいでしょう。

# vim 403.html.php
 <?php
 /**
  * @package Mautic
  * @copyright 2014 Mautic Contributors. All rights reserved.
  * @author Mautic
  * @link http://mautic.org
  * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
  */

 $redirectUrl = "http://192.168.1.222/";
 header("HTTP/1.1 403 Forbidden");
 print(file_get_contents($redirectUrl));
 exit;
 ?>

 (403.html.php を編集・上記は 192.168.1.222 に Mautic がインストールされている設定)

# vim 404.html.php
  <?php
 /**
  * @package Mautic
  * @copyright 2014 Mautic Contributors. All rights reserved.
  * @author Mautic
  * @link http://mautic.org
  * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
  */
 header('HTTP/1.1 404 Not Found');
 ?>

 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
 <html><head>
 <title>404 Not Found</title>
 </head><body>
 <h1>Not Found</h1>
 <p>The requested URL was not found on this server.</p>
 </body></html>

 (404.html.php を編集)

# vim 500.html.php
  <?php
 /**
  * @package Mautic
  * @copyright 2014 Mautic Contributors. All rights reserved.
  * @author Mautic
  * @link http://mautic.org
  * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
  */

 header('HTTP/1.1 500 Internal Server Error');
 ?>

 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
 <html><head>
 <title>500 Internal Server Error</title>
 </head><body>
 <h1>Internal Server Error</h1>
 <p>The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log.<br>
 <br>
 Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.</p>
 </body></html>

 (500.html.php を編集)

 上記の書き換えを行うと、エラー表示は次のような画面になります。

 なお、これらのファイルについても、Mautic のバージョンアップ時に上書きされてしまう可能性がありますので、控えを取っておいた方がよいでしょう。


Webページへのトラッキングコードの追加

 これで Mautic のインストールは終わったので、続いて行動追跡を行いたいWebページに JavaScript のトラッキングコードを埋め込みます。
 なお、ドメイン名はお使いのものに変更するとともに、Mautic への接続方法に合わせて http あるいは https のいずれかを選択してください。

Mauticにhttpで接続する場合 ※青文字の部分をお使いのドメイン名(またはIP)とドキュメントルートに変更してください
<script>
    (function(w,d,t,u,n,a,m){w['MauticTrackingObject']=n;
        w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)},a=d.createElement(t),
        m=d.getElementsByTagName(t)[0];a.async=1;a.src=u;m.parentNode.insertBefore(a,m)
    })(window,document,'script','http://hogehoge.com/easfma/mtc.js','mt');

    mt('send', 'pageview');
</script>

Mauticにhttpsで接続する場合 ※青文字の部分をお使いのドメイン名(またはIP)とドキュメントルートに変更してください
<script>
    (function(w,d,t,u,n,a,m){w['MauticTrackingObject']=n;
        w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)},a=d.createElement(t),
        m=d.getElementsByTagName(t)[0];a.async=1;a.src=u;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://hogehoge.com/easfma/mtc.js','mt');

    mt('send', 'pageview');
</script>


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

 Mautic の運用を始めたら、データベースが何らかの理由で破損してしまう可能性を考慮して、バックアップを行うようにした方が安全です。
 以下は1日1回ペースでバックアップを圧縮して取る方法ですが、古くなったデータは定期的に削除するなどの作業を行ってください。

 なお、Mautic 全体を復旧する際にはデータベースのバックアップだけでなく、Mauticがインストールされているディレクトリ以下のファイルも必要となりますので、同じタイミングでバックアップしておいてください。

# yum -y install gzip
 (gzipをインストール)
# cd ~
 (カレントディレクトリを root のホームディレクトリに移動)
# mkdir mautic_db_bak
 (バックアップデータ保存用ディレクトリを作成)
# vim mautic_db_backup.sh
 #!/bin/sh

 dirpath='/root/mautic_db_bak/'
 # バックアップファイルを保存するディレクトリを設定

 filename=`date +%y%m%d`
 # ファイル名を設定(ファイル名に日付を入れてバックアップ)

 mysqldump --default-character-set=utf8 --single-transaction -u root --password=MySQLのrootパスワード mauticdb | gzip > $dirpath/mautic_$filename.sql.gz
 # mysqldump実行(ファイルサイズを減らすために gzip で圧縮)

 (バックアップ用スクリプトを作成する)
# chmod 700 mautic_db_backup.sh
 (スクリプトのアクセス権を変更)


(MySQL にアクセスするための root パスワードは * で表示しています)

# crontab -e
 00 0 * * * /root/mautic_db_backup.sh
 (1日に1回のペースで実行するように root の crontab に追記)

# systemctl restart crond
 (crond を再起動する)

 なお、crontab に追記する前に、いったんスクリプトが正常に動作するかを確認した方がよいでしょう。
 その際に、MySQL を途中でバージョンアップしている場合には、以下のようなメッセージが出ることがあります。

mysqldump: Couldn't execute 'SHOW VARIABLES LIKE 'gtid\_mode'': Table 'performance_schema.session_variables' doesn't exist (1146)

 これが出てしまった場合には、以下のコマンドで MySQL をアップグレードしてください。

# mysql_upgrade -u root -p
 (パスワードを聞かれるので入力すると MySQL がアップデートされる)


データベースのリストア

 データベースが何らかの理由で破損してしまったら、バックアップしておいたデータを使って復旧します(以下のレイは root のホームディレクトリに圧縮してバックアップしておいたデータがある場合です)。
 ただし、リストアが完了するまでは httpd のサービスを止めてデータベースへのアクセスが起きないようにしておきましょう。

 また、Mautic のバージョンアップによって、データベースの構造に変更が加わった場合には、それ以前のバージョンのバックアップデータを使ったリストアができなくなります。
 そのような場合は、いったん古いバージョンで Mautic をインストールして、データベースをリストアしてから Mautic をバージョンアップするなどの方法で対処してください。

# systemctl stop httpd
 (httpd を停止する)
# cd ~
 (カレントディレクトリを root のホームディレクトリに移動)
# gzip -d バックアップしておいたデータ.sql.gz
 (バックアップしておいたデータを解凍)
# mysql -u root -p
 (実行すると MySQL の root のパスワードを聞かれるので入力する)
 mysql > drop database mauticdb;
 (破損してしまった Mautic 用のデータベースを削除)
 mysql > create database mauticdb;
 (Mautic 用のデータベースを新たに作成)
 mysql > quit
 (MySQL を抜ける)

# mysql -u root -p mauticdb < 解凍したバックアップデータ.sql
 (パスワードを聞かれるので入力するとリストアが行われる)
# systemctl restart httpd
 (httpd を再起動する)


Mautic Meetup Tokyo #4 で発表したスライドについて

 2016年7月22日に開催された Mautic Meetup Tokyo #4 で発表したスライドでは、本稿の内容の一部に加えてネットワークの構成についてもふれており、SlideShare にて公開しています。

少しでもセキュリティを向上させたい! Mautic の運用方法


おわりに

 Mautic はオープンソースでありながら、ここまでの機能を盛り込んでいるというのは、驚くべきことだと感じます。

 ただ、Mautic の運用で必要になる人員が、

「Mautic でマーケティング活動の構築と運用をする人」
「Mautic とLinuxのシステム管理と運用をする人」
 の二つの系統になるので、自社内のみで完結しようとすると、その人的リソースをどう割り当てるかがポイントになるのではないかと思います。

 特に運用開始直後では Mautic の全機能の動作確認をすることなど、ほとんど不可能と言っても過言ではないので、しばらく運用を進めていった段階で特定の機能がうまく動かない、といった問題が発生した場合には、その時点で速やかに様々な試行錯誤をすることになります(汗。

 さて、今回はいわゆる OS の最小構成でのインストール直後の状態から動くようになるまででしたが、次回の冬コミで余力があれば、可用性向上のためのレプリケーション設定などについて解説したいと思います。


連絡先

 本稿に対してご質問があれば、kataama@fides.dti.ne.jp にメールを送っていただければ幸いです・・・が、答えられない内容が多いでしょうし、インターネットで検索して頂いたり、Facebook の Mautic Community Japanmautic.org の日本コミュニティ で質問や投稿をして頂いた方が正確な答えが得られると思います(ぉ

本稿に記載されている内容の無断転載・使用を禁じます。

戻る