Synology NAS : Multi Domain ~ 1つのNASの上に複数ドメイン名でサイトを構築する [2025/06/15]

36CF6F92-9A83-4A27-B301-25A96A970340

はじめに

WordPressは,PHP + MySQL (mariaDB)ベースの動的なCMSです.DSMに内蔵されたWeb Station (ApacheまたはNginx) + PHPがそれぞれ処理します.


*CMS : content management system

今回,一つのNASの上に2つ(以上)のサイトを構築する方法を解説します.

以前にAI君にその方法を問うてみると「できる」と断言されました.その詳細な方法について色々と聞いてみると「それらしい答え」を出してきました.

これまでは,ネット検索では思いついた時に都度で調査していましたが,求めているサイト/方法は見つけられませんでした.あきられて新しいIP Addressを取得(費用が必要)することも真剣に考えていところです.

しかし,1カ月前,AI君は「できる」と断言しました.その後,1カ月くらい放置して自分の頭の中で熟成させていたこの案件ですが,この土日を使い,更にその詳細についてAI君と共に検討した結果,1台のSynology NASの上に2つのサイトを構築することができました.2つめのサイトの内容はこれから作っていこうと思ています.

作業概要は,

(1) DSM->File Stationで既存wordpressフォルダー複製

(2)phpMyAdminによる既存のData Baseの移行

(3) Web Stationによるportal(仮想ドメイン?)の設定,

(4) DMSでのText Editorによるwp-config.phpの修正,

等です.

当初の検討では,Conatainer Managerを使用したwordpressのコンテナ化によるマルチドメインを検討しましたが,結局は,Web StationのVirtual Host(仮想ホスト)を使用することで一つのNASの上に複数のサイト構築が可能でした.

以下に詳細を解説します.なお,Synology NASの解説は,日本語版では冗長なのでそれを避けて英語版の表記としています.


目次


構築方法

作業する前にバックアップを取ってから進めてるのが良いです.

作業前のバックアップ

hyper backupで現時点での/web以下(既存のwordpressファイルが格納されているfoler)をバックアップします.その他,以下の設定で実行しておきます.

  1. 設定
    • Folder : web
    • Application : MariaDB 10
    • Web Station
  2. Backj up nowボタンを押す

参考 : [Synology] NAS (DS918+/DS920+)の バックアップを考える …


DDNSの取得

以下の方法により構築する2つ目のDomain Nameを用意する.

  • Synology NASの場合,2台以上のNASを持っているのであれば,External Access->DDNSからSynologyからDomain NameをNASの1台に付き1つの名前を頂ける.
  • myDNS.jp様のサイトから複数個のDomain Nameを頂ける.

Let’s Encription証明書

証明書については,Synology NASを複数持っているので,それぞれについてSynologyからDomain Nameを取得している.この名前を


Access Control Profileの設定

Longin-> Porral->Advanedを開き以下の設定をつ以下する.

Image

Web Stationでの設定

web stationでは,以下の項目を設定することができる.今回は,(3)→(2)→(1)の順で設定を進める.

  1. Web Portal
  2. Web Service
  3. Script Language Settings
  4. Error Page Settings

Script Language Settingsでprofileを作成:

例えば,synologyのpackage centerでphpMyAdminをinstallしていると,Package-Based Profile項目にphpMyAdminがリストされている.

今回の作業では,ユーザーによるプロファイル設定となるので,Customized Profile項目に作ったプロファイルがリストされることになる.

作業

  1. Creatボタンを押す
  2. Configre general settings画面が現れる
  3. 以下項目に入力する(後で修正は可能)
    • Profile name : <profile for 2nd site>
    • Description : <同上など,適当に>
    • PHP version : <インストールしているphpのバージョンがリストされるので,一つを選ぶ,ex: php8.2>
      • Enabe PHP cache : チェックする
      • Enable Xdebug :
      • Enable display_erros to display PHP error message :
    • Customized PHP open_basedir : Default
    • Nextボタンをクリック
  4. Configure extensions画面が現れる
    • 全てを選択(理解できていないので全て選択,重複エラーでは重複項目のチェックを外す)
    • Nextボタンを押す
  5. Configure FPM settings画面が現れる(FastCGI Process Manager)
    • FPM mode : direcrt (PHP-FPMを使用せず,web serverがPHPを直接処理する)
    • Max processes: 102 (default)
    • Start servers : 2 (default)
    • Min spare servers : 2 (default)
    • Max spare servers : 4 (default)
    • Nextボタンを押す
  6. Configure core settings画面が現れる
    • mysqli.default_socket : /run/mysqld/mysqld10.sock (に修正, wp-config.phpの記載に合わせる)
    • pdo_mysql.default_socket : /runmysqld/mysqld10.sock (に修正, wp-config.phpの記載に合わせる)
    • 残りは規定値のまま
    • Nextボタンを押す
  7. Confirm settings画面が現れる
    • Createボタンを押す
  8. 以上

Web Service の作成:

Web Serviceでは,以下の項目が表示される.

  1. Default Service
  2. Native script language website
  3. Third-party Package website

今回の作業では,Native script language websiteを作成する.

Web Serviceは,site Aとsite Bで共用は可能だが,今回は,専用にそれぞれ作成した.

作業

  1. Createボタンを押す
  2. Select a service type画面が現れる
    • static websiteとContainerized script language websiteは選択しない.
    • Native script language websiteをチェック(選択)する
    • Service : リスト他されphpの中から「script language settings」にて作成した時に設定したphp version である「php 8.2」を選択する
    • 右隣のプルダウンメニューには,「script language settings」で作成したprofileがリストされてるので,それを選択する.
    • Nextボタンを押す
  3. Configure geral setting画面が現れる
    • Name : <site B用であることが分かるような名前にする>
    • Descriptiion : <適当に>
    • Document root : /web/<site B>
    • HTTP back-end server : Apache HTTP Sever 2.4
    • 残りの項目は規定値(default)
    • Nextボタンを押す
  4. Confirm settings画面が現れる
    • Createボタンを押す
    • Virtual hostを作るには,http groupのread permissionが必要であり自動で作成するとのメッセージが出るので,「OK」ボタンを押す
    • Native script laguage website項目に,Service typeはPHP,Nameには作成した名前でリストされる.
    • 完了
  5. 以上

Web Portalの作成 :

web Portalでは,以下の項目が表示される.

  1. Customized Portal
  2. Default Portal

今回の作業では,Customized Portalを以下の手順で作成する.

作業:

  1. Createボタンを押す
  2. Select a portal type画面が現れる
  3. Web service portalをマウスクリックする.
  4. Set up a web service portal画面が現れる
    • Service : <作成したweb serviceがリストされるので,それを選択する>
    • Status : Normal (選択したweb serviceが正常な場合にNormalと表示されている)
    • Portal type : <Name-based
    • Hostname : <domain name>, ex:????.myDNS.jp
    • Port : 80/443 (でもOKだと思う), 今回はHTTPS: 443とした
    • HTTPS settigs : HSTSをチェック
    • Access control profile : <Access Control Profileの作成で作成したプロファイル名をリストから選択する.
      指定しない場合はネットからフルアクセスされる
    • Error page profile : Default error page profile (defaultのまま)
    • Enambe access log : 今回はチェックなし
    • Applyボタンを押す
    • Customized portal項目に作ったPortalがリストされる
    • 完了
  5. 以上

今回の作業でレギュラーなこと

今回の作業では,既存のwebサイト(harikiri.diskstation.me)は,Default serverで管理されていた(そのはずな)ので,harikiri.diskstation.me用に上記の作業でWeb Portalを作成した.その際,/web/<site A用のfolfer>のフォルダ構造と,harikiri.diskstation.me/<site A>というurl構造が不整合となりブラウザでの表示が出来なくなった(エラー500, 404).

修正作業は,以降に述べているように「.htaccess」,「wp-config.php」, です.


File Stationでの作業

(1) DSM->File Stationで既存のwordpressフォルダーの複製

  1. /web/<site A>にwordpressがインストールされている前提とする(既存).
  2. /web/<site B>をcreate folderで作成する.
  3. <site A> foldeにあるfolder/fileの全てを<site B>に複製する.
    注意) 既存を消したりしないように!

(2) .htaccessの修正

以下のコードでにおいて “/” が,/<site A/Bのfolder name>のになっているとブラウザ表示できないので,以下のコードに置き換える.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

(3) wp-config.phpの修正

define( 'DB_NAME', 'wordpress_db' );
define( 'DB_USER', 'wordpress_user' );
define( 'DB_PASSWORD', '********' );
define( 'DB_HOST', 'localhost:/run/mysqld/mysqld10.sock' );  // MariaDBパッケージならlocalhostでOK(未確認)

define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', '');

/volume1/web/<site A filder name>/wp-config.php に以下の2行を require_once より前 に追加してください:

define( 'WP_HOME', 'https://harikiri.diskstation.me' );
define( 'WP_SITEURL', 'https://harikiri.diskstation.me' );

(4) robots.txtの修正

robots.txtについてもサイトに合わせて修正してください.


Access Control Profileの作成

access control profileは,web stationの設定で使用する.

例えば,

  1. サイトの内容を編集している間,ネットからのアクセスを許可しない設定のprofileを作り,web station->web portal->”作成したportalのAccess control profile”に指定するとprofileに従ってアクセス制限される.
  2. サイトの投稿が整いサイトを公開したい場合,公開用のprofileを前述と同様のところに指定してやる.

access control profileを作る

  1. Login Portal->Advancedを開き,Access Control Profileを開く
  2. Createボタンを押し,2つ目のサイト用にprofileを作成する

MariaDB 10

WordPressはMariaDB 10のデータベース(DB)にページを保存しており,2つ目のサイト構築にもそれ用のDBが必要である.今回は,既存のDB(DB-A)をphpMyAdminからexportしてDB-Aをダウンロードし,新しく作成したDB-Bにimport しこれをSite A用のDBとして修正し可動できることを確認することで,phpMyAdminの使い方の習得を並行して行った.

以下の操作は,慎重に行ってください.特に置換を実施する際,先に検索でヒットするテーブルやレコードを確認しておき,その後に,置換の作業をするようにすれば理解しながら進められます.

siteurlとhomeのurlの修正

  1. phpMyAdminにログイン
  2. site AまたはBで使用しているDBをクリック
  3. wp_optionsテーブルをクリック
  4. option_nameカラムのsiteurlとhomeがあるレコードを探す.
  5. option_valueにあるurlに含まれている<site AまたはBの保存先であるfolder名を削除する

<site A/Bのfolder名の修正>

  1. phpMyAdminにログイン
  2. site AまたはBで使用しているDBをクリック
  3. DBの横にある「+」をクリック
  4. 全てのテーブルが表示される
  5. テーブルをクリックしてレコードを表示させる
  6. 検索をクリック
  7. 表示された検索と置換ボタンをクリック
  8. 検索条件に,/web/<folder名>のfolder名
  9. 置換文字列に,”空白”
  10. 実行

まとめ

  1. 既存のWordPressはSynology PackageではなくWordPressからダウンロードして導入している.
  2. MariaDB 10はSynology Packageから導入している.
  3. phpMyAdminはSynology Packageから導入している.
  4. DBは既存から複製して,同じuser権限とした.同じuserで二つのサイトの管理がシームレスにできる.
  5. ディレクトリ分離による:
    /web以下のフォルダ構造は,/web/<site A用のフォルダ>に既存のwordpressファイルが格納されており,そのファイル群を今回新しく複製して/web/<site B用のフォルダ>に2つめのwordpress ファイルが確認されている.それぞれは,独自にブラウザで表示と管理ができる.
  6. harikir.diskstation.me(当サイト)用にportalを作りenable (又は作成直後)にすると,ブラウザは,コード500のエラー(internal sever error)や404エラー(ファイルがない)を吐いたが,wp-config.phpや.htaccessの修正で解決できた.
  7. wp-config.phpの修正
    • データベースに関する環境変数の修正
    • /web/<site A/B用のフォルダ>と,urlでは<site A/B用のフォルダ名を使用しないという整合性が無い事に対する修正
  8. RT6600ax Routerでの設定でポート転送していても,web stationの設定により問題なく2つのサイト(一つのNAS上の2つのwordpress)に振り分けられる.ホスト名(ドメイン名)は,やり取りされるHTTPリクエストのヘッダーに含まれるドメイン名で振り分けされている(ようだ).
  9. 検討の過程で,reverse proxyによるport設定も試したが,web stationでの設定では必要ない.
  10. 既存のsite(wordpress)のみで稼働させていた時は,default serverが使用されていた(と考えられる).今回の検討では,明示的に管理したかったので,2つのサイトにはそれぞれCustomized Portal (仮想host / server)を構築した.
  11. AI君が言うには,default severは,定義された任意のドメインに一致しないリクエストが来た場合に応答する「最後の受け皿」となる仮想hostとのこと.
  12. web stationにあるこのdefault serverは削除することはできない.

この構成の呼び方:(by 4o)

呼び方対応解説
マルチドメイン(Multi-Domain)✅ 適切異なるドメイン名(FQDN)で異なるWebサイトを運用する構成。
今回のように harikiri.diskstation.meもう一つのurl がそれぞれ独立して動作していれば、これは正しくマルチドメイン構成です。
マルチサイト(WordPress Multisite)❌ 非該当WordPressの1インスタンス内で複数のサイト(サブディレクトリやサブドメイン)を運用する機能。
今回はWordPressインスタンスを2つ別々に構築しているため、マルチサイトではありません。
シングルサイト ×2(独立サイト)✅ 技術的にはこちらも正しい単に2つのWordPressがNAS上に別個に存在している構成なので、2つの独立したWordPressサイトと呼んでも間違いではありません。

ただし、「WordPressのマルチサイト構成」ではないことには注意が必要です。マルチサイトはひとつのWordPressの中で複数のサイトを管理する仕組みで、今回のように個別にWordPressをインストールし、それぞれのドメインで運用している場合は、それぞれが独立した「シングルサイト」です。


あとがき

これから既存サイトの運用の様子を見ながら,2つ目のサイトの構築を進めていく.

編集履歴

2025/06/15, Mrはりきり