概要
- 少し前に念願の Synology NAS を購入しました。
- この NAS は多機能で、いろいろなソフトウェアがパッケージとして組み込まれており気軽に導入できます。
- WordPress と関連する必要なソフトウェアも標準で用意されており、この NAS 上に WordPress 環境を構築できます。
- 今回は独自ドメインを利用して、レンタルサーバー費用無しで NAS 上に WordPress 環境を構築したいと思います。
Synology NAS の好きなところ
- 多くのパッケージが用意されており、NAS の機能以外にも無料で手軽に色々なことができる、これは凄い嬉しいです。
- 例えば Synology NAS に内包されている Moments というアプリケーションで Google Photo と同じように写真・動画の管理が可能です。
- PC, スマホ, タブレット等マルチデバイスに対応しています。
- 家族間で写真・動画の共有が可能です。
- YouTube Music から Synology の Audio Station というアプリケーションに音楽を移行して、月額費用を無くしつつ出先で音楽を聴くことができます。
- iTunes Server というアプリケーションもあり、こちらで iTunes の曲を管理することも可能です。
- メーラー、メモ帳、コード管理 (GitLab) 等他にも多くのアプリケーションがあります。
Synology NAS で自分のサイトを運用するメリット
- 何と言ってもサーバー費用が (電気代以外は) 掛からないこと、これに尽きるのではないでしょうか。
- 独自ドメインの場合はもちろんドメイン代金は掛かります。
- Synology のドメインを無料で利用することも可能です。
- 自分で構築したサイトのため、愛着が沸きます。
- モチベーション維持に繋がります:)
- Synology NAS 内でパッケージとして管理できるため、メンテナンスコストがほぼ無い。
- たまにバージョンアップのために1クリックするくらいでしょうか。。?
環境
構築した環境は以下の通りです。
- Synology NAS DS918+
- 仮想ホスト (Web Station)
- Nginx
- PHP7.3
- MariaDB10
作業手順
以下に Synology NAS 上に WordPress を構築し、独自ドメインでアクセスするまでの手順を記述します (2021/06 検証)。
NAS private IP の固定
自宅のルーター管理画面へログインし、再起動した際などに NAS の IP が DHCP で動的に振られないように固定 IP を指定します。
出来れば DHCP アドレス範囲外が望ましいです。
Control Panel > Network > Network Interface で DHCP の自動割り当て設定を手動に変更し、固定 IP にします。
ルーター側で、ポートフォワーディングの設定を行います。
ポートフォワードで外からの(特定ポートへの)アクセスを許可するということは、世界中からのアクセスを許可するということです。つまりは許可した瞬間から攻撃者の標的になる可能性があるので念のためにもセキュリティは強固にしておくべきです。私はルーター自体にセキュリティ製品が組み込まれているものを使用し、攻撃があった場合にメール通知されるようにしています。
DNS の設定
MyDNS.jp にてアカウントを作成し、メニューの "Domain Info
" をクリックします。
"Domain" にドメイン名、"Hostname" にワイルドカード (*) を入力し、MyDNS.JP にドメインを登録します。
続いて NAS > Control Panel > External Access > DDNS > Customize にて次の情報を入力します。
- サービスプロバイダ:
MyDNS.jp
- Query URL:
http://www.mydns.jp/directip.html?MID=USERNAME&PWD=PASSWORD&IPV4ADDR=MYIP
Add ボタンをクリックして MyDNS.JP のサービスプロバイダーを登録します。
ステータスが Normal となり、 ping <Hostname>
で応答が返ることを確認します。ブラウザからアクセスすると、HTTP プロトコルでアクセスできるはずです。
SSL 通信設定
SSL 通信となるよう設定します。 Control Panel > Security > Certificate にて Add ボタンをクリックします。
"Add a new certificate" を選択します。
私は "Let's Encrypt" を選択しました。
blog.xxx.com のようにサブドメインを利用する場合は、 "Domain name" は xxx.com、 "Subject Alternative Name" は blog.xxx.com にして下さい。
ドメイン名とEmailを入力して "Apply" をクリックします。
エラー無く Certificate が作成されたことを確認します。
WordPress のインストール
こちらは "Synology wordpress インストール" 等で調べるとやり方が幾つか出てくるため、そちらを参考になさってください。
仮想ホスト設定
デフォルトだと WordPress をインストールしただけでは "http://192.168.xx.xx/wordpress/" のように LAN -> DSM -> WordPress へのアクセスとなり外から見えません。
仮想ホストを作成し、独自ドメインでアクセスされた場合は File Station の web/wordpress 配下へフォワードするように設定します。
"Web Station > Virtual Host" にて Create ボタンをクリックし、以下のように仮想ホストを作成します。
続いて、 "Control Panel > Security > Certificate" の先ほど作成した証明書を編集します。
Services に仮想ホストで作成したホストが新しく追加されているため、証明書を設定します。
WordPress > メニュー > 設定 > 一般
のサイトアドレスを独自ドメインに変更します。
入力フォームがグレーアウトされている場合は File Station > web > wordpress > wp-config.php
をダウンロードして以下の記述をコメントアウト、または削除してアップロードし直してください。
define('WP_SITEURL', $pageURL.$alias); define('WP_HOME', $pageURL.$alias); ↓ #define('WP_SITEURL', $pageURL.$alias); #define('WP_HOME', $pageURL.$alias);</code></pre>
トラブルシューティング
DB に接続出来ず Fatal Error が発生する
恐らく WordPress のバグかと思われますが、WordPress のパッケージを入れて初期設定を行い、サイトを見に行った (だけで) 際に次のエラーに遭遇しました。
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /volume1/web/wordpress/wp-includes/wp-db.php:1667 Stack trace: #0 /volume1/web/wordpress/wp-includes/wp-db.php(632): wpdb->db_connect() #1 /volume1/web/wordpress/wp-includes/load.php(482): wpdb->__construct('xxx', 'xxx*…', 'xxx', 'localhost') #2 /volume1/web/wordpress/wp-settings.php(124): require_wp_db() #3 /volume1/web/wordpress/wp-config.php(110): require_once('/volume1/web/wo…') #4 /volume1/web/wordpress/wp-load.php(37): require_once('/volume1/web/wo…') #5 /volume1/web/wordpress/wp-blog-header.php(13): require_once('/volume1/web/wo…') #6 /volume1/web/wordpress/index.php(17): require('/volume1/web/wo…') #7 {main} thrown in /volume1/web/wordpress/wp-includes/wp-db.php on line 1667
There has been a critical error on your website.
環境は上述の通りですが、PHP7.0-7.4 全てで発生しました。
mysql_connect()
で DB へ接続した際に Fatal Error が発生しており、これは wp-config.php にて以下の行を変更し、暫定対応として直しました。
<pre class="wp-block-code"><code>define( 'DB_HOST', 'localhost' ); ↓ define( 'DB_HOST', 'localhost:/run/mysqld/mysqld10.sock' );</code></pre>
記事を新規作成・更新できない、記事が404になる
パーマリンクを設定してある状態で記事を新規作成・更新しようとすると 更新に失敗しました。 返答が正しい json レスポンスではありません。
とエラーが出力され、サイト上の記事を表示すると記事が存在しない 404 ステータスが返ってくる事象に見舞われました。
暫定対応としてパーマリンク設定を初期に戻し復旧しました。独自ドメインへ設定を移行する過程でどこかに旧設定が残っているのかもしれません。
余談
独自ドメインを取得して Synology で WordPress を入れてサイトを公開するまで、ちょっと躓きつつも5時間くらいで終わりました。