Synoloy NASでDockerを用いたWordpressサイトの構築 | masao-Tec-blog

Synoloy NASでDockerを用いたWordPressサイトの構築

Docker

Synology NASでのWordPress Webサイトの構築方法として、Synologyのパッケージを用いる方法および、WordPress.orgからダウンロードしたWordPressを用いて構築する方法を紹介してきましたが、第3の方法として、Synology DSMで提供されている、DockerパッケージをインストールしてDockerコンテナとしてWordPress Webサイトを構築する方法について紹介します。

前提 本記事でのDSM(OS)バージョンは、Synology DSM 7.1 を用いています。

スポンサーリンク

1.Dockerについて

Synology NAS の一部のモデル(Plusシリーズ以上)では、Dockerというコンテナ型の仮想化実行基盤のパッケージを使用することが出来ます。同じくPlusシリーズ以上で使用可能であるVirtual Machine Managerという仮想化のパッケージもありますが、両者の違いは、Virtual Machine ManagerはDSM(Synology NASのOS)上にハイパーバイザーという仮想化基盤階層を介して仮想化対象のOSを丸ごとゲストOSとして構築するのに対し、コンテナ型仮想化はDSM上にDocker Engineという仮想化基盤階層を介して、仮想化対象の部分はOSであるDSMを共有し、ミドルウエアおよびアプリケーション階層部分のみ仮想化します。ハイパーバイザー型よりコンテナ型のほうが、ゲストOS階層部分がないことより軽量に動作するメリットがあります。

また、Dockerでは、Docker HUBという、コンテナイメージを配布する公開ライブラリより、各種アプリケーションがミドルウェアと組み合わされて設定済となっているコンテナイメージが様々なデベロッパーより公開されており、これらのイメージをダウンロードすることにより簡単に各種アプリケーションの実行環境を構築することが出来ます。

SynologyのDockerパッケージでは、これらのコンテナイメージのダウンロード、ダウンロードしたイメージからコンテナを生成し、アプリケーションの実行・管理をGUIで出来る機能が提供されています。

スポンサーリンク

2.Dockerパッケージのインストール

DSMコンソールにログインし、[パッケージセンター]より[Docker] をインストールします。

初期設定は特になく、インストールが終わったら完了です。

初期起動時のみ以下のようなダイアログが表示され、ヘルプ表示が促されます。

Dockerパッケージのインストールと同時に、NASの共有フォルダ領域に[Docker]というフォルダが新規に作成されます。この領域はコンテナの「データ永続化」領域として使用されます。

Dockerコンテナはその仕組み上、コンテナが生成・実行されたあと、コンテナを停止・破棄すると内部で生成されたデータも破棄と同時に消滅します。例えば、WordPressのWebサイトを実行するコンテナを生成したとして、Webサイトのテーマやプラグインをインストールし、記事を作成しても、コンテナを停止・破棄するとすべて消滅してしまいます。これでは困るので、データとして残しておきたい領域を「データ永続化」領域としてディスク上の領域を割り当てた状態でコンテナを生成することで、当該領域にデータを保存し、コンテナを停止・破棄したあとに再生成したときも「データ永続化」領域を割りつけることにより継続的にデータを使用できるようにします。

3.Dockerを用いたWordPressサイトの構築

Dockerを用いてWordPressのWebサイトを構築する手順を紹介します。

WordPressのWebサイトをDockerコンテナで構築する場合、「MySQLコンテナ」と「WordPressコンテナ」の2種類のコンテナを生成し、両者を接続する必要があります。

3-1.コンテナイメージのダウンロード

Dockerの[レジストリ]よりイメージのダウンロードを行います。

検索テキストボックス(キーワードを挿入)に「mysql」と入力すると、DockerHUBよりダウンロード可能なMySQLコンテナイメージの一覧が表示されます。

今回はMySQLの公式コンテナイメージを使用することとします。

[mysql]を選択して[ダウンロード]をクリックします。

ダイアログボックスが表示され、[タグの選択](ここではMySQLのバージョンを選択する)が表示されるので、バージョン5系の最新バージョンである5.7を選択します。(8系も選択可能ですが、今回は最新より安定性重視で枯れたバージョンの最新バージョンとしました)

選択]をクリックした後、しばらくすると[イメージ]にmysqlのコンテナイメージがダウンロードされます。

同様の手順で[WordPress]コンテナイメージをダウンロードします。

こちらもWordPressの公式イメージをダウンロードします。

なお、こちらはバージョンとしては最新を示す[latest]を指定しておきます。

バージョン指定の[latest]はその時点での最新というだけでなく、後々、WordPressコンテナイメージの最新版がリリースされたとき、[latest]を指定しておけば、最新版への更新が可能となります。(逆に、具体的なバージョンを指定してイメージをダウンロードした場合は当該バージョンで固定されますので、用途に応じて使い分けをすることが可能です。)

選択]をクリックした後、しばらくすると[イメージ]にwordpressのコンテナイメージがダウンロードされます。

以上で、WordPressのWebサイトを構築するためのDockerイメージのダウンロードが完了しました。

3-2.MySQLコンテナの生成

Dockerの[イメージ]より、mysqlのイメージを選択して[起動]をクリックすると、コンテナの作成ウィザードが開始されます。

ネットワークの指定はデフォルトのままでよいので、[次へ]をクリックします。

コンテナの[全般設定]ではコンテナ名を入力し、詳細設定をクリックして、環境変数の追加を行います。

[詳細設定]ダイアログで[環境]タブを選択し、以下の環境変数の追加を行います。

  • MYSQL_DATABASE:wordpress
  • MYSQL_USER:wordpress
  • MYSQL_PASSWORD:wordpress
  • MYSQL_ROOT_PASSWORD:root

追加が終わったら[保存]をクリック、元の[全般設定]ダイアログに戻るので[次へ]をクリックします。

ポート設定はデフォルトのままでよいので[次へ]をクリック

ボリューム設定]ダイアログで、MySQLデータベースのデータ永続化領域を設定します。[フォルダの追加]をクリック。

追加]ダイアログが表示されるので、[フォルダの追加]を行って、MySQLデータベースのデータ永続化領域に設定するフォルダを生成します。今回の例では、dockerフォルダの下にhost1/mysqlというフォルダを生成しました。

フォルダ生成後、生成したフォルダを選択状態にして[選択]釦をクリックします。

ボリューム設定」ダイアログで、先ほど選択したフォルダをMySQLコンテナのどこにマッピングするかの指定を行います。マウントパスに[/var/lib/mysql]と入力して[次へ]をクリックします。

ここまでの設定が[要約]ダイアログに表示されるので、内容を確認して[完了]をクリックします。

MySQLのコンテナが指定した名称[host1_db]で生成されました。

3-3.WordPressコンテナの生成

MySQLコンテナと同様な手順で、WordPressコンテナの生成を行っていきます。

詳細設定]ダイアログで[環境]タブを選択し、以下の環境変数の追加を行います。

  • WORDPRESS_DB_NAME:wordpress
  • WORDPRESS_DB_USER:wordpress
  • WORDPRESS_DB_PASSWORD:wordpress
  • WORDPRESS_DB_HOST:host1_db

詳細設定]ダイアログで[リンク]タブを選択し、リンクするコンテナ名にMySQLコンテナの名称(エイリアスも同じ)を入力します。

ポート設定で、ローカルポートにDSMで使用していない任意のポート番号、コンテナのポートは80(HTTP)を入力して[次へ」をクリックします。

MySQLコンテナと同様、永続化データ領域の設定を行いますが、WordPressコンテナでは、PHPにパラメータ設定を行うためのphp.iniを永続化データ設定でファイルをマッピングします。

共有フォルダのdocker/host1/conf以下にphp.iniを以下の内容で作成します。

upload_max_filesize=5120M
post_max_size=5120M
memory_limit=256M
max_execution_time=300
max_input_time=300

設定値はWordPressのバックアップデータをインポートするためのプラグインである「All-in-One Migration」でインポート容量制限を回避するためのものとなります。

詳細は以下の記事を参考にして下さい。

作成は作業用のPC側でメモ帳アプリなどを使って、php.txtという名称で上の内容のファイルを作成し、File Stationでアップロードしてから、ファイル名をphp.iniに名称変更するのが良いと思います。

さらに、WordPressコンテナ内のApache2(Webサーバ)にmod_headersモジュールを追加ロードするためのheaders.loadを同様にファイルとしてマッピングします。

mod_headersモジュールはEWWW Image Optimizerという画像圧縮系のプラグインで必要なのですが、WordPressコンテナでデフォルトで有効になっていませんのでここで有効化させます。)

共有フォルダのdocker/host1/conf以下にheaders.loadを以下の内容で作成します。

LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so

[ボリューム設定」ダイアログで、以下のマッピングを行います。

  • /docker/host1/conf/php.ini:/usr/local/etc/php/conf.d/php.ini(ファイルをマッピング)
  • /docker/host1/wp:/var/www/html(フォルダをマッピング)
  • /docker/host1/conf/headers.load:/etc/apache2/mods-enabled/headers.load(ファイルをマッピング、読み取り専用)

WordPressコンテナが指定した名称[host1_wp]で生成されました。

3-4.ドメイン名の設定とリバースプロキシの設定

コンテナで生成されたWordPressホストにアクセスするためのドメイン名の取得と、HTTPS化のためのSSL証明書の取得を行います。

本番用のドメイン名であれば以下の記事を参考にしてドメイン名とSSL証明書の取得を行います。

テスト用環境などであれば以下の記事を参考にしてドメイン名と、SSL証明書の取得を行います。

また、必要に応じて[内向きDNSの設定]も行います。

WordPressコンテナへのWebアクセスは、「3-3.WordPressコンテナの生成」で設定したローカルポート経由でアクセスできます(本記事の例であれば、ローカルポート49170→コンテナポートの80(HTTP)へのアクセス)が、Synology NASのリバースプロキシを設定して、ドメイン名でアクセスしたHTTPS通信をローカルポートの49170に中継するようにします。(最終的に、https://ドメイン名→49170(HTTP)→コンテナポートの80(HTTP)と連携する)

リバースプロキシの設定は、DSMの[コントロールパネル]>[ログインポータル]>[詳細設定]>[リバースプロキシ]から行います。

リバースプロキシダイアログで[作成]をクリックすると[リバースプロキシ規則]ダイアログが表示されますので、このダイアログで必要事項を入力します。

プロキシ名を反転]は日本語ががおかしいですがリバースプロキシのことを示しています。名称を入れます。

プロトコルにはHTTP、ホスト名には取得済のドメイン名を入れ、ポートは443(HTTPS)、HSTSを有効にするにチェックを入れます。

送り先のプロトコルはHTTP、ホスト名はlocalhostとし、ポートは「3-3.WordPressコンテナの生成」で設定したローカルポートを入力します。

すべて入力したら[保存]をクリックしてリバースプロキシ設定を完了させます。

次に上記で設定したリバースプロキシ規則にSSL証明書を設定します。

コントロールパネル]>[セキュリティ]>[証明書]>[設定]をクリックし、設定ダイアログを表示します。

先ほど設定したリバースプロキシ規則がサービスとして表示されていますので、証明書プルダウンからドメイン名に適合したSSL証明書を選択します。

[OK]をクリックして設定を完了させます。

以上の設定で、ブラウザにドメイン名を入力することにより、WordPressのWebサイト画面にアクセスすることが出来ます。

4.Dockerコンテナの更新

コンテナイメージとして[latest]を選択していた場合、コンテナイメージをダウンロードした時点での最新バージョンがダウンロードされますが、イメージから生成されたコンテナが自動で最新バージョンに更新されることはないので、以下の手順でコンテナを更新する必要があります。

  1. コンテナイメージのダウンロード:Dockerの[レジストリ]より最新のイメージをダウンロードします。
  2. コンテナの停止:Dockerの[コンテナ]より該当するコンテナを停止させます。[操作]>[停止
  3. コンテナのリセット:Dockerの[コンテナ]より該当するコンテナをリセットします。コンテナをリセットすると、コンテナがいったん破棄され、1.でダウンロードした最新のイメージで再作成されます。(永続化領域はマッピングされていた箇所がそのまま使用されます。)
  4. コンテナの実行:リセット完了したコンテナを実行します。[操作]>[開始]暫くすると最新イメージで再生成されたコンテナが起動します。

コンテナの更新手順についての説明は以上となります。

5.コンテナの削除

不要となったコンテナは以下の手順で削除します。

  1. コンテナの停止:Dockerの[コンテナ]より該当するコンテナを停止させます。[操作]>[停止
  2. コンテナの削除:Dockerの[コンテナ]より停止したコンテナを削除します。[操作]>[削除
  3. コンテナイメージの削除:不要であればコンテナイメージの削除を行います。[イメージ]>[削除
  4. 永続化領域の削除:コンテナで使用していた永続化データ領域を削除します。[File Station]アプリでdockerフォルダ以下に作成したフォルダやファイルを削除します。
  5. リバースプロキシ規則の削除:WordPressコンテナのようにリバースプロキシ設定を行っていた場合は削除したコンテナに該当するリバースプロキシ規則を削除します。

コンテナの削除手順についての説明は以上となります。

6.まとめ

Synology DS220+にてDockerパッケージのインストールと、使用方法の例としてWordPressのWebサイトを構築する手順を紹介しました。

Dockerで作成したWordPressのWebサイトはインストール・セットアップも非常に簡単ですし、性能的にもDSMネイティブで作成したWebサイトと遜色ないものであり、本番環境への適用も十分可能であると思いました。

以上、最後まで記事を読んでいただき、ありがとうございました。