VPS,オンプレミスサーバでMODXを動かす
数あるCMS(コンテンツ・マネジメント・システム)の中で比較的自由度の高いCMSである「MODX」の基本的なインストール〜セットアップ方法を紹介します。
MODXには2022年9月現在、「Evolution」と「Revolution」という2つのバージョンが存在しますが、ここでは「Evolution」のほうを取り上げます。
したがって以降に表記している「MODX」はすべて「MODX Evolution」を指しています。
本章ではオンプレミスサーバ、仮想マシン、VPSなどにCentOS7をOSとしてLAMPサーバを構築し、その上にMODXをセットアップしていくことを前提とします。レンタルサーバにインストールする際には不要な操作も含まれています。
ベースLAMPサーバのセットアップ
次のページを参考に、CentOS7 をOSとしたLAMPサーバ(Linux, Apache, MySQL, PHP)を構成します。
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)
PHPMyAdminを使ってデータベースを作成する方の場合、下図のように「データベース」タブよりデータベース名(例ではmodx_db)、照合順序(例ではutf8mb4_bin)を指定して[作成]ボタンをクリックします。
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のプログラムファイルはzip形式で圧縮されています。
クライアントPCでzipファイルを展開してからサーバに転送しても良いのですが、転送に時間がかかりますので、zipファイルを直接サーバに転送しサーバ側で展開する方法でも良いでしょう。
以下ではzipファイルをサーバに転送し、サーバ側で展開して配置する方法を採ります。
まず、入手した最新のMODXのzipファイルをFTP/SFTP/SCPなどの方法でインストール先サーバの適当なディレクトリに転送します。
例では「/home/user01」ディレクトリ直下にzipファイルを転送したものとします。
次にインストール先サーバ(以降、単に「サーバ」と呼びます)にSSHでログインしてzipファイルを展開します。
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プログラムのzipファイルを転送した「/home/user01」ディレクトリに移動し、展開します。
- zipファイル名はMODXのバージョンに応じて変わります。
# cd /home/user01 <----------------------------------------------------------- 保存先へ移動
# unzip evolution-jp-release-1.0.25J.zip <------------------------------------ 圧縮展開
# ls -l <--------------------------------------------------------------------- 確認
drwxr-xr-x. 7 root root 139 12月 12 2021 evolution-jp-release-1.0.25J <-- 展開後
-rw-r--r--. 1 root root 1747311 11月 2 09:26 evolution-jp-release-1.0.25J.zip
これで最新のMODXを入手できました。
MODXを配置
入手したMODXのプログラムファイルをウェブサーバの公開ディレクトリへ移動します。
CentOS7 のApacheの初期設定状態であれば、「/var/www/html」がドキュメントルートですが、今回は「/var/www」ディレクトリ直下に「modx」ディレクトリ以下にMODXを配置し、「/var/www/modx」を新たなドキュメントルートとしてみます。
# pwd <--------------------------------------------- ①
/home/user01
# cp -rp evolution-jp-release-1.0.25J /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」になっていること。
Webサーバとして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のセットアップ