この記事をおすすめしたい人
- SynologyのNASにWordPressをインストールしようとしている人
- SynologyのNASでWebサーバを構築しようとしている人
- つまりオレ
今回はSynology社製のNAS上にウェブ開発環境を構築していく第二弾、WordPress導入編です。
動くまでに丸一日かかりました。
XSERVERもQNAPもだいぶ親切設計やったんやなって…。
今回も僕の無知を晒しながら、Synology NAS上で複数のWordPressを管理できるとこまでやります。
事前準備としてWeb Stationの導入を終えておいてください。
このページの目次
MariaDBのインストール
WordPressはMySQLというデータベースを利用したシステムなので、先にMySQL互換データベースであるMariaDBをインストールします。
SynologyのパッケージセンターにはMariaDBのバージョン5と10がありますが、僕がレンタルしてるXSERVERにはバージョン10が入っていたので10を選択。
ちなみに以前使っていたQNAPにはバージョン5が入っていて、このせいでDrupalというCMSを試そうとした時にバージョンの問題で蹴られてしまいました。
こういうケースもあるので10の方がいいんじゃないかなーと思います。
知らんけど。
rootパスワードを控えておいてください
もうデータベースが稼働中なのでインストール画面をお見せできないのですが、インストールの途中でroot権限を持ったユーザのパスワードを設定します。
あとでWordPress側からMariaDBにアクセスする際に必要になるので必ず控えておいてください。
MariaDBのポート設定
Synology NASのWordPress導入でつまずきやすいポイントその1です。
パッケージセンターなどからMariaDBを開くと、この↓ような設定画面がでます。
この画面の下半分、「情報」の部分。
デフォルトではたしか「TCP/IP接続を有効にする」がオフ、「ポート」が3307になっていました。 前者をオン、後者を「3306」に変更してください。
MariaDBのポートは一般に「3306」なことが多いらしく、「3307」だとわざわざポート指定が必要になるケースがあるみたいです。 「3306」に設定している方がよさそう。
その下の「ドメインソケット」の「/run/mysqld/mysqld10.sock」は後で使うのでメモしておいてください。
なんでデフォルトが3306なのに、わざわざ3307にしているのかは後で推論が出てきます。
パッケージ「WordPress」の利用
「パッケージ」というのはSynology NASにおける「アプリ」のことです。
パッケージとして用意されているWordPressを利用してちょっと簡単にWordPressを導入する方法です。 もうひとつ方法があるので、両方知った上で自分に合う方法を採用してください。
NASにログインするとデスクトップに「パッケージセンター」があるので、この中からWordPressをインストールします。
DSM6.2.4に入っていたWordPressの場合だと、PHP7.3とセットでインストールされます。 MariaDBが入っていない場合はおそらくMariaDBも。
インストールが終わると、WordPressの初期設定が始まります。
データベースへの接続設定では先ほどメモしたMariaDBのパスワードを入力してください。 ここはMariaDBへの接続の設定なので「アカウント」もMariaDBのものを。
次はWordPressで使用するデータベースの設定です。
「データベース名」はパッケージ利用の場合はそのままでいい気がします。 複数サイトを管理する場合は他のWordPressのデータベースと違いが分かるようにユニークな名前を付けた方がよさそう。
「データベースのユーザー」はこのWordPress用のMariaDBアカウントです。 特に分ける必要がない場合は「root」とそのパスワードでも大丈夫でした。
後は「次へ」「適用」と押していくと、WordPress自体のインストール画面が出てくるのでいつものように設定するだけ。
おそらくこれでだいたい動くはず…です。
パッケージセンターの「WordPress」から開くと、WordPressのログイン画面になります。 NASのIPアドレスを「192.168.0.10」とした場合、「http://192.168.0.10/wordpress/」でも同じように開けます。
パッケージ利用の際の注意事項
上で「だいたい動く」と書きましたが、パッケージ利用ではなく手動インストールの場合はいくつかトラブりやすいポイントがあってですね。 パッケージ利用の場合にこれらが自動で設定されるのかどうかが不明だからです。
初期状態を復元して確認しようとしてみたんですが、設定が保存されていたり、もう消せないパッケージがあったため、初期状態を再現できませんでした。
もしPHPの拡張モジュールや、パーミッションの設定、DBアクセスの際のホスト名でトラブった場合は手動項目の項を参照してください。
パッケージ利用でも自動設定されてなかったような気がします。
パッケージ利用のデメリット
WordPressをひとつしかインストールできなさそうです。
あとインストールフォルダも変更できなさそう。
1サイトしか管理しない場合は大きなデメリットにはならないと思うので、上の注意事項がパッケージ利用の場合でも起きたとしても、いくらかお手軽のはず。
以下、手動インストールの場合の説明です。
PHPの設定
PHPの拡張モジュールやphp.iniの設定をします。
設定は、Web Stationの「PHP設定」タブから、使用するプロフィールごとに行います。
拡張モジュールの設定
MySQLへ接続できるようにしたり、zipファイルを展開できるようにしたりと、PHPを拡張するためのモジュールの設定です。
「PHP設定」の「デフォルトのサーバー設定」内「拡張」の部分で設定します。
いくつかのモジュールは、ただWordPressを動かすだけでも必須。
以前使っていたQNAPや、ホスティングしているXSERVERでは最初からある程度のモジュールが最初から組み込まれていたようで、僕はこの「拡張モジュール」という存在自体を知りませんでした。
お恥ずかしい限りです。
で、この必須モジュールについてはWordPress公式に一覧があったんですが、「recommended」「For the sake of completeness」など、何が必須なのかいまいち分かりません。
最初、1個1個エラーを潰しながら最小構成を探そうとしたところ、プラグインを入れた途端に必要になるモジュールもあったりで、既に安定稼働していたQNAPやXSERVERの設定をget_loaded_extensions()で出力して真似ることにしました。
両方で有効だった拡張モジュール
QNAP、XSERVER共に有効になっていた拡張モジュールは次の26個です。
過不足は分かりませんが、以前のQNAP環境で困ったことがなかったので僕はこれをデフォルトとして採用しました。
名前 | 説明 |
---|---|
bcmath | For arbitrary precision mathematics PHP offers the Binary Calculator which supports numbers of any size and precision, represented as strings. |
calendar | The calendar extension presents a series of functions to simplify converting between different calendar formats. |
curl | The curl extension allows you to connect and communicate to many different types of servers with many different types of protocols. |
dba | These functions build the foundation for accessing Berkeley DB style databases. |
exif | With the exif extension you are able to work with image meta data. |
ftp | The functions in this extension implement client access to files servers speaking the File Transfer Protocol (FTP). |
gd | Enables Creation and manipulation of images in various formats. |
gettext | The gettext functions implement an NLS (Native Language Support) API which can be used to internationalize your PHP applications. |
iconv | With iconv extension, you can turn a string represented by a local character set into the one represented by another character set, which may be the Unicode character set. |
imagick | This module helps you to create and modify images using the ImageMagick library |
imap | These functions enable you to operate with the IMAP protocol, as well as the NNTP, POP3 and local mailbox access methods. |
ldap | Can be accessed to LDAP (Lightweight Directory Access Protocol) based directory servers; Based on the OpenLDAP library |
mysqli | These functions allow you to access MySQL 4.1 and above. |
openssl | This module uses the functions of OpenSSL for generation and verification of signatures and for sealing (encrypting) and opening (decrypting) data. |
pdo_mysql | PDO_MYSQL is a driver that implements the PHP Data Objects (PDO) interface to enable access from PHP to MySQL 3.x, 4.x and 5.x database. |
pdo_sqlite | PDO_SQLITE is a driver that implements the PHP Data Objects (PDO) interface to enable access to SQLite 3 databases. |
phar | The phar extension provides a way to put entire PHP applications into a single file called a “phar” (PHP Archive) for easy distribution and installation. |
posix | This module contains an interface to those functions defined in the IEEE 1003.1 (POSIX.1) standards document which are not accessible through other means. |
shmop | Shmop is an easy to use set of functions that allows PHP to read, write, create and delete Unix shared memory segments. |
soap | The SOAP extension can be used to write SOAP Servers and Clients. |
sockets | The socket extension implements a low-level interface to the socket communication functions based on the popular BSD sockets, providing the possibility to act as a socket server as well as a client. |
sqlite3 | This is an extension for the SQLite Embeddable SQL Database Engine. |
xmlrpc | Can be used to write XML-RPC servers and clients. |
xsl | Implements the XSL standard, performing XSLT transformations using the libxslt library. |
zip | Enables to transparently read or write ZIP compressed archives and the files inside them. |
zlib | This module enables you to transparently read and write gzip. |
XSERVERで有効になっていた拡張モジュール
QNAPでは無効、XSERVERでは有効になっていた拡張モジュール8個です。
名前 | 説明 |
---|---|
bz2 | The bzip2 functions are used to transparently read and write bzip2 (.bz2) compressed files. |
gmp | These functions allow you to work with arbitrary-length integers using the GNU MP library. |
intl | Internationalization extension (further is referred as Intl) is a wrapper for ICU library, enabling PHP programmers to perform UCA-conformant collation and date/time/number/currency formatting in their scripts. |
pdo_pgsql | PDO_PGSQL is a driver that implements the PHP Data Objects (PDO) interface to enable access from PHP to PostgreSQL databases. |
pgsql | PostgreSQL database is an Open Source product and available without cost. |
sysvmsg | This module provides wrappers for the System V IPC inter-process messaging of functions. |
sysvsem | This module provides wrappers for the System V IPC shared memory of functions. |
sysvshm | This module provides wrappers for the System V IPC semaphores of functions |
逆に、XSERVERで無効、QNAPで有効なものはありませんでした。
その他の拡張モジュール
QNAPやXSERVERで有効になっていたのにSynology側で設定ができないものがけっこうあります。
Synology NASでもget_loaded_extensions()で出力してみたところ、その多くは勝手に有効になっていました。
以下、それぞれの環境でオン/オフだったものの一覧です。
名前 | Synology | QNAP | XSERVER |
---|---|---|---|
apcu | ○ | - | ○ |
cgi-fcgi | ○ | ○ | ○ |
Core | ○ | ○ | ○ |
ctype | ○ | ○ | ○ |
date | ○ | ○ | ○ |
dom | ○ | ○ | ○ |
fileinfo | ○ | ○ | ○ |
filter | ○ | ○ | ○ |
hash | ○ | ○ | ○ |
json | ○ | ○ | ○ |
libxml | ○ | ○ | ○ |
mbstring | ○ | ○ | ○ |
mcrypt | - | - | ○ |
mysqlnd | ○ | ○ | - |
pcntl | ○ | ○ | - |
pcre | ○ | ○ | ○ |
PDO | ○ | ○ | ○ |
pspell | - | - | ○ |
readline | ○ | - | - |
Reflection | ○ | ○ | ○ |
session | ○ | ○ | ○ |
SimpleXML | ○ | ○ | ○ |
SPL | ○ | ○ | ○ |
standard | ○ | ○ | ○ |
tokenizer | ○ | ○ | ○ |
wddx | - | ○ | ○ |
xml | ○ | ○ | ○ |
xmlreader | ○ | ○ | ○ |
xmlwriter | ○ | ○ | ○ |
実質設定不可なのは「mcrypt」「pspell」「wddx」の3つだけなんですかね。
php.iniの設定
PHPの動作を制御するphp.iniの設定です。
「PHP設定」の「デフォルトのサーバー設定」内「コア」タブで設定します。
php.iniはQNAPでもXSERVERでも設定したことがあります。 何を設定したかは覚えてないのでおいおい詰まって設定し直すことになる予定ですが、とりあえず今回はSynology NAS上でWordPressを動かす上で必要そうな部分を。
「コア」タブを開き、右側のフィルタ部分に「socket」と入力してください。
「mysqli.default_socket」「pdo_mysql.default_socket」の2箇所を「/run/mysqld/mysqld.sock」から、MariaDBのポート設定でメモった「/run/mysqld/mysqld10.sock」に変更してください。
socketを変更するとどうなるのか
知識もないし調べてもいないので挙動からの推測ですが、おそらくデータベースに接続する際には「IPアドレス」と「ソケット」の2つが必要なんだと思います。
「IPアドレス」で「どの端末か」を特定し、「ソケット」で「どのデータベースソフトウェアか」を特定、みたいな?
で。
何故デフォルト値の「/run/mysqld/mysqld.sock」じゃなくて、「/run/mysqld/mysqld10.sock」になっているかというと、Synology NASにはMariaDB 5とMariaDB 10の2つのデータベースを入れることができるんですね。
MariaDB 5のソケットがデフォルト値になっているので、10の方は別の名前にしとかないと、5の方に接続しようとしちゃうからだと思います。
「/run/mysqld/mysqld.sock」ならMariaDB 5へ接続、「/run/mysqld/mysqld10.sock」ならMariaDB 10へ接続、みたいな。
MariaDB 10のデフォルトポートが3307になっていたのもおそらく同様の理由で、5の方の初期値が3306になっていました。 ポートは後から変更可能ですが、ソケットは変更不可のようです。
というわけで。
php.iniのソケット設定をMariaDB 10のソケットに変更してしまうことで、以降は何も考えることなくMariaDB 10の方へアクセスしてくれるようになります。
ソケット変更することのメリット
実はこれ。 ここで設定しなくてもWordPressインストール時の設定でごまかせます。
ところがWordPress側で設定した場合は、wp-config.php内の「DB_HOST」が「localhost:/run/mysqld/mysqld10.sock」のような値になり、この定数を利用してPDOでデータベースにアクセスしようとするとエラー吐きまくりました。
自前でデータベースへアクセスするプログラムを書いていた場合は、このNAS用に接続部分のコードを書き換えないといけないんです(たぶん)。
なのでphp.ini側でソケットの設定をしておいて、WordPress側ではいつも通りアクセスさせてる方がスマートなのかなーと思いました。
あとは複数のWordPressや他のCMSなんかを使用する場合。
php.ini側で設定しておくと、個々のシステムでデータベース接続の際にソケットを意識せずにすみます。
ソケットの設定はWordPressサイドではなくNASサイドの問題なので、そもそもNAS側に持たせておく方がイイですよねたぶん。
パーミッションの変更
対象フォルダのアクセス権限を制御するパーミッションです。
最近のレンタルサーバはこの辺も初心者フレンドリーになってるのか、XSERVERでパーミッションの設定を自分でした記憶がありません。 QNAPでもありません。
でもSynology NASでは必要です。
設定しないとWordPress側から新規ファイルが作れなかったりでエラーが出ます。
今回はSSHで接続してパーミッションを変更しましたが、例の如く詳しくはないので他にもっとスマートな方法があるかもしれません。
以下、SSHでパーミッションを変更するまでの流れです。
SSHの有効化
初回のみ、SSHを有効にする作業が必要になります。
Synology NASにログインしてコントロールパネルを開きます。
右上にある「上級者モード」を選択し、「アプリケーション」グループに「端末とSNMP」が表示されている状態にし、「端末とSNMP」を開きます。
「ターミナル」タブ内の「SSHサービスを有効化する」にチェックを入れて「適用」を押します。
以上です。
Synologyの公式マニュアルを見ると、セキュリティ上、ポート番号は変えておいた方がいいようです。
SSHクライアントで接続
Windows PowerShellというのが使えるそうです。 僕はRLoginというのを使っています。
SSHクライアントソフトから以下の5つを入力してNASに接続します。
- 接続方法→SSH
- IPアドレス→192.168.0.10など
- ポート→デフォルトは22、変更した場合は変更したポートを
- ユーザ名→NASにログインするユーザ名
- パスワード→上記ユーザのパスワード
ルート権限ユーザに変更
フォルダやファイルのアクセス権限を変更するなんていう強権を行使するので、強い権限を持ったユーザに変更する必要があります。
公式マニュアルによると、以下のコマンドを実行。
ssh myadmin@192.168.0.10 -p 22
「myadmin」はルート権限のあるユーザ名、「192.168.0.10」はNASのIPアドレス、「22」はSSHのポート番号です。
その後、上記ユーザのパスワードを入力。
さらに「sudo -i」を実行して、サイドパスワードの入力。
これでルート権限ユーザに変更されます。
SSHクライアントでユーザ指定している場合は「sudo -i」からでいいようです。
パーミッションの変更
sudo chmod -R 777 /volume1/web/site1
のように変更したいディレクトリを指定してパーミッションを変更します。
「volumue1」の部分はストレージマネージャで作成したボリュームの名前が入ります。 デフォルトのままだと「volumue1」。
「web」はWeb Stationが作った共有フォルダ名(たぶん固定)。
「site1」は対象フォルダ名です。
一括変更の注意点
sudo chmod -R 777 /volume1/web
と指定するとwebフォルダ以下全てのフォルダのパーミッションが変更されますが、「phpMyAdmin」をインストール済みの場合は注意が必要です。
パーミッションが緩すぎるとphpMyAdmin側でエラーが出ました。
その場合は一度phpMyAdminをアンインストールし、再インストールすることで適切なパーミッションに設定し直すことができるようです。
DSM上からパーミッションの変更
後から気付いたんですが、DSM上からGUIで変更することもできるようです。
公式マニュアルによると次の手順。
- NASにログイン
- コントロールパネル
- 「ファイル強雨」内の「共有フォルダ」
- 「web」フォルダを選択して「編集」
- 「権限」タブから任意のユーザの権限を変更
実際に試していないので効果は分かりません。
データベースの作成
WordPressのインストールプログラムからはデータベースを作ってくれないので、先に作っておく必要があります。
phpMyAdminから「新規作成」。
「データベース名」は何のサイト用なのか分かるユニークなものにします。 このサイトなら「ore-dev」とか。
文字コードは「utf8_general_ci」。
テーブルは作らなくていいです。 ここから先はWordPressがやってくれます。
WordPressファイルの設置
公式サイトからWordPressのファイルをダウンロードしてきます。
ネットワークドライブ等からNAS上の共有フォルダ「web」にアクセスし、その中に今から作るサイト用のフォルダを作成します。 このサイトなら「ore-dev」とか。
ダウンロードしてきたファイルをそこに展開します。
「web\ore-dev\wp-admin」みたいになる構造か、「web\ore-dev\wp\wp-admin」みたいな構造になるようにします。 ルートがごちゃごちゃするのが嫌いなので僕は後者の方が好みです。
サブフォルダは「wp」じゃない方がセキュリティ上いいみたいな話を見ますが、WordPress上でメディアファイル使ったり、テーマ内のCSS使ってたらどっちみちバレるし、あまり意味ないんじゃないかなーと思ってます。
仮想ホストの作成
Web Stationから仮想ホストを作成します。
詳しくは前回の記事にやり方を書いています。
「ドキュメントルート」の部分は上で作ったフォルダを指定します。
ここで指定するのはサイトのルートになるフォルダなので、WordPressを設置したフォルダに関係なく、上の例で言うと「web\ore-dev」です。
WordPressのインストール
やっと本番です。
上で作成した仮想ホストの名前が「ore-dev.local」だった場合、
http://ore-dev.local/wp-admin/
にアクセスするとWordPressのインストールプログラムが走ります。 サブフォルダ「wp」に設置していた場合は
http://ore-dev.local/wp/wp-admin/
注意が必要な設定箇所
データベースの設定部分はちょっと注意が必要です。
「データベース名」は上で作ったデータベースの名前です。
「ユーザー名」「パスワード」はWordPress用のものではなく、MariaDBで設定したもの。
「データベースのホスト名」がちょっとやっかいで、「127.0.0.1」じゃないとPDOで接続できませんでした改めて試したら「127.0.0.1」でも「localhost」でもアクセスできました。
要はソケットの設定をphp.iniでやっておいて、ここではやらない、というのが大事なんだと思います。
英語のフォーラムで調べてたんですが、「localhostなら接続できた」とか「127.0.0.1ならいけた」とか色々だったんで、もしかすると環境依存の部分があるのかもしれないです。 PDOの接続エラー(SQLSTATE[HY000] [2002] Connection refusedとか)出たらどっちか試してみてください。
「テーブル接頭辞」は変えなくていいと思います。
あとはサイト情報を設定するだけです。
wp-config.phpの設定
手動インストールの一番めんどくさいところなんですが、NASにインストールした場合だけなのかな。
このままだとWordPressがインターネットにアクセスできません。 ファイルがダウンロードできないだけかな。
まぁ要するにWordPress自体とか、プラグインのインストールやアップデートができません。
なので、インストールフォルダにある「wp-config.php」に次の一行を追記してあげてください。
define('FS_METHOD', 'direct');
まとめ
以上です。
僕が詰まったのは、拡張モジュールと、ソケット周りの設定でした。
(他はQNAPと同じ)
ちゃんと知識がある人はたぶん全く詰まらないところだと思うんで、僕みたいに無謀な挑戦してる人のお役に立てれば幸いです。
以上、WordPressからお届けしました!
Synology NASでウェブ開発の目次
- 第1回 Web Station導入編
- 第2回 WordPress導入編(このページ)
- 第3回 Nuxt.js導入編