マーケティングオートメーションの Mautic をインストールする

# Mautic とは
**Mautic** とは [Symfony](http://symfony.com/projects/mautic) で開発されている**オープンソース**の**マーケティングオートメーション**のツール。[Introduction to Mautic (Japanese)](http://www.slideshare.net/mautic/introduction-to-mautic-japanese) によると、主な機能は以下の通り。

* モニタリング（ビジターのWebサイトその他での行動を監視し、トラッキングする）
* リードを特定する詳細情報
* ポイント（見込み客のランク付け）
* キャンペーン（営業サイクルに従ってリードを育てていくワークフロー）
* Eメール
* フォーム
* ランディングページ
* アセット（資料や動画などの顧客獲得用のデジタルコンテンツ）
* レポート

[Mautic Meetup Tokyo](http://www.meetup.com/ja-JP/Mautic-Meetup-Tokyo/) へ参加したので記念パピコ。
発音は「モーティック」が一般的と思われるが、「マウティック」と言う人も多かった。

# インストール
作業は VirtualBox にインストールしてある **CentOS 7.2.1511** 上で検証した。
ミドルウェアは Apache 2.4 / PHP 7.0 / MySQL 5.7 を選択している。

## MySQL のセットアップ
### インストール
```bash
yum install https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
yum install mysql-community-server
```
### 文字コードと自動起動の設定
```bash
cp -a /etc/my.cnf{,.org} && echo "character-set-server=utf8" >> /etc/my.cnf
systemctl enable mysqld
```
### 起動とセキュリティ設定
```bash
systemctl start mysqld
grep "temporary password" /var/log/mysqld.log | awk '{print $11}' # 初期パスワードを確認
mysql_secure_installation
```
### DB と DB ユーザーの作成
```bash
openssl rand -base64 12 #パスワード用文字列の生成
cat << "_EOQ_" | mysql -u root -p
CREATE DATABASE `mautic` CHARACTER SET 'utf8';
GRANT ALL ON `mautic`.* TO `mautic`@`%` IDENTIFIED BY 'P@assw0rd';
_EOQ_
```
## Apache と PHP のセットアップ
### インストール
```bash
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && yum -y update
yum install yum-utils && yum-config-manager --enable remi-php70
yum install httpd php php-gd php-imap php-intl php-mbstring php-mcrypt php-mysqlnd php-pecl-zip php-process php-xml
yum install php-opcache php-pecl-apcu
```
### 設定
```bash
sed -i 's|;date.timezone =|date.timezone = Asia/Tokyo|' /etc/php.ini
sed -i '/memory_limit =/s/128M/512M/' /etc/php.ini
cat << _EOF_ > /etc/httpd/conf.d/mautic.conf
ServerName localhost
<Directory "/var/www/html">
    AllowOverride All
</Directory>
_EOF_
systemctl enable httpd
```
デフォルトだと `.htaccess` が機能しないので `AllowOverride` ディレクティブで許可する必要がある。
Apache のセキュリティ設定は「[Apacheセキュリティ設定](http://qiita.com/bezeklik/items/1c4145652661cf5b2271)」を参考にしてほしい。

### 起動
```bash
httpd -t
systemctl start httpd
```
### FirewallD
```
firewall-cmd --permanent --add-service=http && firewall-cmd --reload
```

## Composer のセットアップ
### Composer のインストール
```bash
curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer
```
### 高速化対応
```bash
composer config -g repos.packagist composer https://packagist.jp
composer global require hirak/prestissimo
```
Composer は大変遅いので、リポジトリをレイテンシの少ない packagist.jp に切り替え、ダウンロード処理を高速化する prestissimo プラグインを追加する。

## Mautic のセットアップ
### インストール
```bash
yum install git
curl -L https://github.com/mautic/mautic/archive/master.tar.gz -o mautic.tar.gz -#
tar vzxf mautic.tar.gz -C /var/www/html --strip=1
cd /var/www/html
composer install
```
zip ではなく tar.gz をダウンロードして展開すればパーミッションの設定は変更する必要が無い。

### 所有権とコンテキストの変更
```bash
chown -R apache:apache app/{config,logs,cache} media translations
chcon -R -t httpd_sys_script_rw_t app/{config,logs,cache} media translations
```
**SELinux** が有効になっている場合、 `app/config` `app/logs` `app/caches` ディレクトリのコンテキストを `httpd_sys_content_t` から `httpd_sys_script_rw_t` に変更しないと動作しない。

### ブラウザからセットアップ
![Mautic1.png](https://qiita-image-store.s3.amazonaws.com/0/15175/c68591e7-5417-9b99-a431-200bf367f50a.png)

問題がなければ上記のように表示される。

![Site is offline.png](https://qiita-image-store.s3.amazonaws.com/0/15175/3dfe7001-657b-9c39-dba3-9520c42cfac1.png)

このようなエラー画面が表示された場合、所有権とコンテキストの変更を再度実施する。

![Mautic2.png](https://qiita-image-store.s3.amazonaws.com/0/15175/301567a6-2f7b-a60c-19a9-3f909872b5e7.png)

![Mautic3.png](https://qiita-image-store.s3.amazonaws.com/0/15175/a31d02d4-4fb2-f0e6-e1fa-1aa8a57cfe51.png)

![Mautic4.png](https://qiita-image-store.s3.amazonaws.com/0/15175/500da2d7-b5f1-cd9a-a232-315e3a89b309.png)

![Mautic5.png](https://qiita-image-store.s3.amazonaws.com/0/15175/c2b82edf-41a6-7614-fcd0-7da7f4ed9291.png)

![Mautic6.png](https://qiita-image-store.s3.amazonaws.com/0/15175/21554351-971a-0b3d-8886-bdd4040c829e.png)


### MaxMind の GeoLite2 の DB データ取得
```bash
php app/console m:ip:d
```
小技だが `app/console` はコマンド名が重複していなければイニシャルだけで通る。

### Cron の設定
https://mautic.org/docs/jp/setup/cron_jobs.html

```bash
cat << "_EOF_" | crontab
0-45/15 * * * * cd /var/www/html && /usr/bin/php app/console m:s:u
1-46/15 * * * * cd /var/www/html && /usr/bin/php app/console m:c:r
2-47/15 * * * * cd /var/www/html && /usr/bin/php app/console m:c:t
3-48/15 * * * * cd /var/www/html && /usr/bin/php app/console m:e:s
4-49/15 * * * * cd /var/www/html && /usr/bin/php app/console m:e:f
5-50/15 * * * * cd /var/www/html && /usr/bin/php app/console m:w:p
0 0 1-7 * * [ "$(date '+\%w')" -eq 3 ] && cd /var/www/html && /usr/bin/php app/console m:ip:d
_EOF_
```
2.0 からか一部コマンド名が変わったようで、日本語のドキュメントではまだ更新されていないので注意。
MaxMind のデータベース更新は「毎月第一火曜日」らしいので、第一水曜日の日本時間0時に実行するように設定。

### トラッキングコードの設定
以下の JavaScript トラッキングコードを、 `yourmautic.com` を Moutic を設置したURLに書き換えて `</body>` タグの直前に貼り付ける。

```html
<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(s)://yourmautic.com/mtc.js','mt');

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