この記事は最後に更新してから1年以上経過しています。

KUSANAGIでマルチサイト(サブドメイン)を試した

説明

本サイトはサブディレクトリタイプのマルチサイト機能を採用して構築しているが、これまでサブドメインタイプは利用した経験はない。マルチサイト機能のサブドメインタイプは以前から1度は試してみたいと思っており、今回実際にサイトを構築してみた。

サーバー環境と準備

はじめに使用したサーバー環境を簡単に紹介する。

  • サーバー:さくらVPS(メモリー2GB、ストレージSSD 50GB)
  • OS:KUSANAGI(CentOS7 x86_64)
  • DNS:お名前.com

セットアップ状況は、プロファイル名を'html'としてWordPressをプロビジョニングし、Webサーバーは「nginx」を選択。ドメインを指定してSSL証明書を適用した。また今回使用するサブドメインについては、ワイルドカードを使用せず、ユニークなものを事前にAレコードを登録しておく(TTL値を短めにして反映待ちを軽減)。

WordPress関連の変更

WordPressでマルチサイトを有効にする手順は次の通り。

  1. wp-config.phpを修正(以下を追加)
    define( 'WP_ALLOW_MULTISITE', true );
  2. ログインして管理画面にアクセス
  3. 「プラグイン」メニューをクリックしてすべてのプラグインを停止
  4. 「ツール」-「サイトネットワークの設置」メニューをクリックして「サブドメイン」を選択
  5. サブミット後のページに表示されている内容をwp-config.phpに追加
    define('MULTISITE', true);
    define('SUBDOMAIN_INSTALL', true);
    define('DOMAIN_CURRENT_SITE', 'ドメイン名');
    define('PATH_CURRENT_SITE', '/');
    define('SITE_ID_CURRENT_SITE', 1);
    define('BLOG_ID_CURRENT_SITE', 1);
    
  6. 管理画面からログアウト
  7. nginx設定ファイルのserver_nameについてドメイン名の前に.を追加(パス名の赤字部分はプロファイル名)
    # vi /etc/nginx/conf.d/html_ssl.conf
    
    server_name .ドメイン名;
    # vi /etc/nginx/conf.d/html_http.conf
    server_name .ドメイン名;
  8. nginxを再起動
    # kusanagi nginx
  9. ログインして管理画面にアクセス
  10. ツールバーの「参加サイト」-「サイトネットワーク管理」-「サイト」をクリック
  11. 「新規追加」ボタンをクリックし、各項目を入力して「サイトを追加」ボタンをクリック
  12. 「ダッシュボードを表示」をクリック(最新ブラウザの多くは警告が表示される)
    アドレスバーに「保護されていない通信」と表示

標準の手順でWordPressをプロビジョニングした場合、SSL証明書にはサブドメインは含まれない。この警告表示をなくすには、サブドメインを含んだSSL証明書を設定する必要がある。

SSL証明書の再発行

KUSANAGIではWordPressをプロビジョニングしている中でSSL証明書を発行している。プロビジョニングの各ステップは相応するコマンドが用意されており、次のコマンドでSSL証明書を発行できる。

# kusanagi ssl --email メールアドレス

このコマンドのスクリプトをトレースすると、/usr/lib/kusanagi/lib/ssl.shにたどり着く。このファイルを編集して青字の行を追加する(113行目)。

# vi /usr/lib/kusanagi/lib/ssl.sh
if [ "renew" = "$OPT" ] ; then OPTION="--renew-by-default" else OPTION="-m $MAILADDR --agree-tos" fi OPTION="-d サブドメイン.$FQDN $OPTION"

KUSANAGIのSSL証明書(Let's Encrypt)は有効期間90日であり、発行から60日経過しないと再発行できない(有効期間が更新されない)。今回追加したサブドメインに対応したSSL証明書を確実に発行するため、ここでは現在適用されているSSL証明書を失効させ、その後で先ほどのコマンドを実行する。

# /usr/local/certbot/certbot-auto revoke --cert-name ドメイン名
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you like to delete the cert(s) you just revoked, along with all earlier
and later versions of the cert?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es (recommended)/(N)o: y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Deleted all files relating to certificate ドメイン名.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully revoked the certificate that was located
at /etc/letsencrypt/live/ドメイン名/fullchain.pem

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# kusanagi ssl --email メールアドレス

このような手順により、サブドメインを含んだSSL証明書が発行できる。確認のため、ブラウザをサブドメインの管理画面にログインしてみる。

アドレスバーがカギマークに変わっている

【追記】サブドメインのマルチサイトでは「サイトアドレス」の初期値が「http://」で保存されているので、管理画面にアクセスしたら、「参加サイト」-「サイトネットワーク管理」-「サイト」にアクセス。サイトの「編集」メニューをクリックして、「https://」に書き換えること。

ワイルドカードの適用

なおLet's EncryptのSSL証明書には個別のサブドメインのほかにワイルドカードを指定できる。ワイルドカードを指定する場合は、今回変更したssl.shをさらに修正し、DNSサーバーにTXTレコードを更新するといった対応が必要になるため、今回は見送った。


最終更新 : 2019年08月06日 17:45

お勧め

add_shortcode(2018年5月27日 更新)

void add_shortcode( string $tag, mixed $func )
ショートコード(独自タグ)を追加する。ショートコードは、投稿記事内でテキスト内容がない[tag]や、テキストを内包する[tag]テキスト[/tag]の書式で使用できる独自タグのこと。標準の状態では、 the_content関数によって表示する直前のフィルター処理内でパラメータ$funcで指定した関数・メソッドが実行される。

get_user_setting(2022年1月31日 更新)

mixed get_user_setting( string $name [ , string $default = false ] )
ユーザーインターフェイス設定を取得する。

have_posts(2018年5月27日 更新)

bool have_posts( )
次の投稿データが存在するかを調べる。

in_category(2018年5月27日 更新)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

add_feed(2024年6月24日 更新)

string add_feed( string $feedname, callable $callback )
フィードを追加する。