VPS,オンプレミスサーバでMODXを動かす

最終更新日:2020年09月03日
レベル:★★★☆☆
オンプレミスサーバ、仮想マシン、VPSなどにMODX Evolutionをセットアップする方法を紹介します。

数あるCMS(コンテンツ・マネジメント・システム)の中で比較的自由度の高いCMSである「MODX」の基本的なインストール〜セットアップ方法を紹介します。

MODXには2019年11月現在、「Evolution」と「Revolution」という2つのバージョンが存在しますが、ここでは「Evolution」のほうを取り上げます。
したがって以降に表記している「MODX」はすべて「MODX Evolution」を指しています。

本章ではオンプレミスサーバ、仮想マシン、VPSなどにCentOS7をOSとしてLAMPサーバを構築し、その上にMODXをセットアップしていくことを前提とします。

ベースLAMPサーバのセットアップ

次のページを参考に、CentOS7 をOSとしたLAMPサーバ(Linux, Apache, MySQL, PHP)を構成します。

CMS用にLAMPサーバを構築する(CentOS7編)

MySQLのSQLモードの確認・変更

MySQLの設定によってはMODXの編集時にParse Errorとなることがあります。この原因の1つに、MySQLのSQLモード(strict mode)の設定状態があります。以下の手順で使用するMySQLの状態を事前に確認してみます。

ターミナルよりMySQLにログインし、以下を実行します。

mysql> SELECT @@GLOBAL.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode                                                                                                     |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

このような表示になっていたらMySQLが厳格な制限モードになっています。他のシステムへの影響も考慮して適切な状態に変更する必要があります。

他のシステムへの影響がなければ、MySQLの設定ファイル(/etc/my.cnf など)を次のように変更します。

sql_mode='' <---- この行を追加する

MySQLを再起動します。

systemctl restart mysqld

再度MySQLにログインし、SQLモードの状態を確認します。

mysql> select @@GLOBAL.sql_mode;
+-------------------+
| @@GLOBAL.sql_mode |
+-------------------+
|                   | <---- 反映されている
+-------------------+
1 row in set (0.00 sec)

MODX用データベースの作成

MODXで使用するデータベースを作成します。
以下の例では、MySQLにMODX用データベースを「modx_db」の名前で作成します。
MODX用データベースを作成する前に、専用のMySQLユーザを「modxuser」の名前で事前に作成しておきます。

ターミナルよりMySQLに接続します。
今回はMySQLユーザ「root」で接続します。
下の例のように「mysql>」のプロンプトが返ってきたら接続完了です。

  • 下の例で入力するrootユーザのパスワードはMySQLのrootユーザのものです。OSのrootユーザのパスワードではないので注意しましょう。
# mysql -u root -p
Enter password: <------------------- MySQLユーザ「root」のパスワードを入力
Welcome to the MySQL monitor.  Commands end with ; or \g.
 :
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

MODXデータベースを操作するためのMySQLユーザを作成します。
次の例ではユーザ名を「modxuser」パスワードを「usermodx」としていますが名前・パスワードはお好みで。

mysql> create user 'modxuser'@'localhost' identified by 'usermodx';
Query OK, 0 rows affected (0.03 sec)

MODXデータベースを作成します。
次の例ではデータベース名は「modx_db」としています(名前は任意で可)。
デフォルトの文字コード「utf8mb4」とソート順「utf8mb4_bin」指定しておきます。

mysql> create database modx_db default character set utf8mb4 COLLATE utf8mb4_bin;
Query OK, 1 row affected (0.03 sec)

MODXデータベースを操作できるユーザへ権限を付与します。
権限は厳密に設定しても良いでしょうが、「all」でも大丈夫です。

mysql> grant all on modx_db.* to 'modxuser'@'localhost' with grant option;
Query OK, 0 rows affected (0.02 sec)

正しく設定されているか確認してみます。

mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| information_schema     |
| modx_db                | <------ 表示されること
| mysql                  |
| performance_schema     |
| sys                    |
+------------------------+
5 rows in set (0.00 sec)

mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| modxuser         | localhost | <---- 表示されること
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

mysql> show grants for 'modxuser'@'localhost';
+---------------------------------------------------------------------------------+
| Grants for modxuser@localhost                                                |
+---------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `modxuser`@`localhost`                                 |
| GRANT ALL PRIVILEGES ON `modx_db`.* TO `modxuser`@`localhost` WITH GRANT OPTION |
+---------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

一旦MySQLを切断して、作成したMODXユーザで再度接続してみます。

mysql> quit <------------------------------ 切断する
Bye

# mysql -u modxuser -p <------------------- 「modxuser」で接続
Enter password: <-------------------------- 「modxuser」のパスワードを入力
Welcome to the MySQL monitor.  Commands end with ; or \g.
 :
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           | <------------------- 利用できるデータベースのみ表示される
+--------------------+
| information_schema |
| modx_db            | <------------------- MODX用データベースが表示されること
+--------------------+
2 rows in set (0.00 sec)

mysql> quit <------------------------------ 切断

最新版MODXの入手

次のページから最新のMODXのプログラムファイルを入手します。

MODX Evolution 日本語版 ダウンロード

MODXのプログラムファイルをインストールするサーバに送る手段としてFTP/SFTPを利用しても構いませんが、ここではサーバに直接SSHでログインし、サーバに直接取り込む方法を採ります。

まずはインストール先のサーバ(移行、単に「サーバ」と呼びます)にSSHでログインします。
Mac, Linuxクライアントの場合はターミナルから下記コマンドを実行します。
Windowsクライアントの場合は、PuTTYなどのSSHクライアントを使う、などの方法でSSHログインします。

以下の例では、サーバ「srv01.local」に「root」ユーザでSSHログインする例を示します。
初めて当該サーバにログインする場合は、以下の例のように警告が出ますので、「yes」を入力して先に進みます。

# ssh root@srv01.local
The authenticity of host 'srv01.local (192.168.1.7)' can't be established.
ECDSA key fingerprint is SHA256:9zbukkjaJwX4JU7ZItHbGJiobgFwvq5eIxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes <--- 「yes」入力
Warning: Permanently added 'srv01.local' (ECDSA) to the list of known hosts.
root@srv01.local's password: <------------------------------ パスワードを入力
Last login: Wed Jul 24 09:19:55 2019
[root@srv01 ~]#
  •  CentOS7であればインストール直後にSSHサービスが有効になっているので、特に何も設定せずにSSHログインが可能です。

先の「MODX Evolution 日本語版 ダウンロード」のページにる「https://github.com/modxcms-jp/evolution-jp/archive/master.zip」のリンクを右クリックし、表示されたコンテキストメニューから「リンクのURLをコピー」を選択し、リンク先のURLを取得します

 ターミナルに戻って次の操作を行い、最新のMODXプログラムファイルを「/usr/local/src」ディレクトリに入手し、展開します。

# cd /usr/local/src <----------------------------- 保存先へ移動
# wget https://github.com/modxcms-jp/evolution-jp/archive/master.zip <--- wgetで取得
--2019-11-02 09:26:01--  https://github.com/modxcms-jp/evolution-jp/archive/master.zip
github.com (github.com) をDNSに問いあわせています... 13.114.40.48
github.com (github.com)|13.114.40.48|:443 に接続しています... 接続しました。
:
`master.zip' に保存中

    [  <=>                                  ] 1,747,311   6.62MB/s 時間 0.3s   

2019-11-02 09:26:02 (6.62 MB/s) - `master.zip' へ保存終了 [1747311]
# ls -l <----------------------------------------------------------- 確認
-rw-r--r--. 1 root root 1747311 11月  2 09:26 master.zip <---------- 取得できている

# unzip master.zip <------------------------------------------------ 圧縮展開
# ls -l <----------------------------------------------------------- 再度確認
drwxr-xr-x. 7 root root     139  6月 23 21:02 evolution-jp-master <-- 展開後
-rw-r--r--. 1 root root 1747311 11月  2 09:26 master.zip

 これで最新のMODXを入手できました。

MODXを配置

入手したMODXのプログラムファイルをウェブサーバの公開ディレクトリへ移動します。

CentOS7 のApacheの初期設定状態であれば、「/var/www/html」がドキュメントルートですが、今回は「/var/www」ディレクトリ直下に「modx」ディレクトリ以下にMODXを配置し、「/var/www/modx」を新たなドキュメントルートとしてみます。

# pwd <--------------------------------------------- ①
/usr/local/src

# cp -rp evolution-jp-master /var/www/modx <-------- ②

# ls -l /var/www <---------------------------------- ③
 :
drwxr-xr-x. 7 root root 139  6月 23 21:02 modx <---- ④

# chown -R apache:apache /var/www/modx/ <----------- ⑤

# ls -l /var/www <---------------------------------- ⑥
 :
drwxr-xr-x. 7 apache apache 139  6月 23 21:02 modx
  • ① 現在の場所を確認。MODXを保存・展開した場所であること。
  • ② 「modx」ディレクトリを「/var/www」ディレクトリへ「modx」という名でコピー
      「-rp」オプションをつけること
  • ③ コピーされたか確認
  • ④ 「modx」ディレクトリが表示されればOK
  • ⑤ ディレクトリ「modx」の所有者とグループを「apache」に変更
     「-R」オプションを忘れないように
  • ⑥ 確認。所有者、グループが「apache」になっていること。

.htaccessの設定

MODXのディレクトリに入り、サンプルとして入っている.htdocsファイル「sample.htaccess」を正規の名前に変更します。

# mv sample.htaccess .htaccess

 

SELinuxの設定

CentOS 7 ではSELinuxがデフォルトで有効になっています。このままではコピーしたMODXファイルへのSELinuxの書き込み権限がないためインストールがうまくいきません
次の例では、「var/www/modx」ディレクトリにSELinuxの書き込み権限を付与する例を示します。

  • ファイルの書き込み権限は上記手順の⑤で「apache」ユーザ・グループに付与済みです。
  • セキュリティ上SELinuxを無効にすることはなるべく避けましょう。

 semanageコマンドがインストールされているかどうかを確認。
インストールされていなければ「CentOS 7 の基本設定:基本ソフトウェアのインストール」を参考にインストールしておきます。

# which semanage
/usr/sbin/semanage

現在の「/var/www/modx」のSELinuxファイル権限を確認します。
操作前は「/var/www/modx」ディレクトリのファイル権限は「httpd_sys_content_t:s0」になっているはずです。

# ls -Z /var/www
 :
drwxr-xr-x. apache apache system_u:object_r:httpd_sys_content_t:s0 modx

「/var/www/modx」ディレクトリのファイル権限を「httpd_sys_rw_content_t」(httpdデーモンが当該コンテンツの読み書きを可能にする)に変更します。

# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/modx(/.*)?"

設定を反映します。反映結果が以下に表示されます。

# restorecon -RFv /var/www/modx*
 :
pd_sys_content_t:s0->system_u:object_r:httpd_sys_rw_content_t:s0

再度「/var/www/modx」のSELinuxファイル権限を確認。
今度は「httpd_sys_rw_content_t:s0」になっていることを確認。

# ls -Z /var/www
 :
drwxr-xr-x. apache apache system_u:object_r:httpd_sys_rw_content_t:s0 modx

DocumentRootの変更

今回、「http://サーバ名/」でアクセスすることでMODXのコンテンツが参照できるように設定しますので、ApacheのDocumentRootをMODXをインストールしたディレクトリに変更します。

  • 「http://サーバ名/modx/」でアクセスできるようにしたい場合は、現在のドキュメントルート(初期設定では「/var/www/html」)以下にMODXプログラムファイルを配置するか、Apacheでエイリアスを設定します。
    詳しくは「MODXをドキュメントルート以外に配置する」を参照してください。

以下の例では。Apacheの設定ファイル「/etc/httpd/conf/httpd.conf」を編集してDocumentRootを「/var/www/modx」に変更します。
※.変更箇所は2箇所あります。

# vi /etc/httpd/conf/httpd.conf
----------------------------------------------------------------------
 :
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
#DocumentRoot "/var/www/html" <---------------- 先頭に「#」をつけてコメントアウト
DocumentRoot "/var/www/modx" <----------------- 「/var/www/modx」に設定
 :
# Further relax access to the default document root:
#>>> Edited by K'z Style
#<Directory "/var/www/html"> <----------------- 先頭に「#」をつけてコメントアウト
<Directory "/var/www/modx"> <------------------ 「/var/www/modx」に設定
 :
    #AllowOverride None <------------------------------ 先頭に「#」をつけてコメントアウト
    AllowOverride AuthConfig Limit Options FileInfo <-- 追記(AllowOverreide Allでも可)
 :
<IfModule dir_module>
    #DirectoryIndex index.html <----------------------- 先頭に「#」をつけてコメントアウト
    DirectoryIndex index.php index.html <-------------- 追記(index.phpを追加)
</IfModule>
 :
----------------------------------------------------------------------

設定ファイルをチェックします

# httpd -t
Syntax OK <------------------------- これが返ってきたらOK

Apacheをリロードします(再起動でも可)。

# systemctl reload httpd

ブラウザで「http://サーバ名/」にアクセスしてみます。

次のページが表示されればOKです。
MODX自体のセットアップを開始しましょう。

 

次の手順 → MODXのセットアップ

 

ー 以上 ー

 CMSを使ったホームページ制作
 VPS, AWS等クラウドシステム構築
等々のご依頼承っております