はじめてのKUSANAGI

宮﨑悟

KUSANAGIはプライム・ストラテジー社が開発した超高速なWordPress仮想マシンで、CentOS7を基本OS、NGINXとApache2をWebサーバ、PHP実行環境にHHVM、PHP7、PHP5.6、DBにMariaDB Galera Clusterを使用しています。同性能のインスタンスを使用したCentOS7でWordPressを使用するより10~15倍程度高速で動作します。WordPressの設定をよりセキュアにするためにSSL化やプラグイン・テーマの選定等が挙げられます。また、開発中と公開時でURLを自由に変更できます。

この記事は、KUSANAGI Advent Calenderの3日目のエントリになります。
KUSANAGI速い簡単安全、ということで、今まで色んな所でKUSANAGIの話をしました。

今回KUSANAGI Advent Calenderへのエントリということで、改めてKUSANAGIについて説明しようと思います。

KUSANAGIとは?

KUSANAGIは、プライム・ストラテジー社が開発した超高速WordPress仮想マシンです。
数々のクラウドプロバイダで動作する仮想マシンとして提供していて、高速で安全なWordPressを簡単に構築できます。

KUSANAGIの構造

KUSANAGIはCentOS7をベースOSとし、WebサーバとしてNGINXとApache2、PHP実行環境としてHHVM、PHP7、PHP5.6、DBとしてMariaDB Galera Cluster を標準搭載しています。その他、OpenSSLもCentOS7標準の1.0.1に加え、1.0.2も提供しています。
WebサーバとPHPの接続はFastCGIで行い、TCP 9000番ポートで接続します。

kusanagi%e6%a7%8b%e9%80%a0

KUSANAGIのネットワーク

KUSANAGIでは、いろいろなサービスポートを使用します。
KUSANAGIで提供しているWordPressは、HTTP(80番ポート)およびHTTPS(443番ポート)で外部から接続されます。
また、KUSANAGIの管理を行うには、SSH接続(22番ポート)もしくはクラウドプロバイダが提供するコンソール接続機能が必要になります。
Zabbixで監視を行うには、zabbix-agent(10050番ポート)で接続されます。

kusanagi_network

これら使用するポートは外部から接続可能とし、それ以外の使用しない(使用してはいけない)ポートは外部から接続不可能とするのが望ましいです。
その為には、クラウドプロバイダが提供するポート制限機能や、Firewall機能を使用してください。

速いKUSANAGI

KUSANAGIは同じ性能のインスタンスを使用したCentOS7でWordPressを使用するより、10~15倍程度高速で動作します。
これは、最新のWebサーバ、PHPを使用していることに加え、その設定に関してもチューニング済みのものを展開し、メモリを有効に使うようになっているためです。
詳細については、弊社中村社長の連載のとにかく速いWordPressを参照ください。大体のテクニックが書いてあります。

KUSANAGIの使い方

KUSANAGIを使うには、まずクラウドプロバイダと契約し、KUSANAGIのインスタンス(仮想マシン)を作成する必要があります。
詳しくは、各クラウドプロバイダ別の説明が https://kusanagi.tokyo に掲載されていますので、それをご覧ください。

KUSANAGIでのWordPressの構築前に決めておくこと

まず、以下のことを決めてください。幾つかの項目は後から変更可能です。

  • ホスト名
    外部からアクセスするためのドメイン名付きのホスト名になります。このホスト名は別途DNSの登録し、作成したインスタンスのIPアドレスで登録しておいてください。

    例)  aaa.example.com 
  • プロファイル名
    KUSANAGIで作成したWordPressを管理するための名前になります。
  • kusanagi ユーザのパスワード
    WordPress本体、プラグイン、テーマのインストール・更新時に使用します
  • WordPressタイトル
    WordPressのタイトルを決めましょう。これは後から変更することができます
  • WordPress管理ユーザ名・パスワード・メールアドレス
    WordPressの管理画面用のユーザ名は自由につけられます。同時にパスワードも用意しましょう。
    このパスワードは後から変更できますし、管理用ユーザ自体を後から追加することも可能です。
  • データベース名、DBユーザ名、DBパスワード
    自由に決めてください。一度決めてしまえばユーザが変更することはないので、ランダムに決めてしまってもよいです。

KUSANAGIでのWordPressの構築方法

KUSANAGIのインスタンスを起動したら、rootでログインして作業します。
以下の手順では、OS言語、キーボード設定を英語に、OS時刻はAsia/Tokyoに、DBのパスワードなどはランダム文字列、
ホスト名は aaa.example.com 、プロファイル名を aaa 、kusanagiユーザのパスワードを passw0rd としています。
また、サービスとしてNGINX、HHVMを使用するようにしています。これは、後から変更可能です。

FQDN=aaa.example.com
PROF=aaa
KUSANAGIPASS=passw0rd
TITLE="KUSANAGI test"
ADMIN_USER=kusanagi
ADMIN_PASS=passw0rd
ADMIN_MAIL=satoru@aaa.example.com
DBROOTPASS=$(openssl rand -base64 12 | tr -dc 'a-z-A-Z0-9' | fold -w 12 | head -n 1)
DBNAME=$(openssl rand -base64 12 | tr -dc 'a-z-A-Z0-9' | fold -w 12 | head -n 1)
DBUSER=$(openssl rand -base64 12 | tr -dc 'a-z-A-Z0-9' | fold -w 12 | head -n 1)
DBPASS=$(openssl rand -base64 12 | tr -dc 'a-z-A-Z0-9' | fold -w 12 | head -n 1)
DBPREFIX=$(openssl rand -base64 12 | tr -dc 'a-z-A-Z0-9' | fold -w 8 | head -n 1)"_"

kusanagi init --tz tokyo --lang en --keyboard en --passwd "$KUSANAGIPASS" --nophrase --dbrootpass "$DBROOTPASS" --nginx --hhvm
kusanagi provision --wplang ja --fqdn "$FQDN" --noemail --dbname "$DBNAME" --dbuser "$DBUSER" --dbpass "$DBPASS" $PROF
wp core config --dbname="$DBNAME" --dbuser="$DBUSER"--dbpass="$DBPASS" --dbhost=localhost --dbcharset=utf8mb4 --dbprefix="$DBPREFIX" --extra-php --path=/home/kusanagi/$PROF/DocumentRoot < /usr/lib/kusanagi/resource/wp-config-sample/ja/wp-config-extra.php
wp core install --url=http://$FQDN --title="$TITLE"--admin_user="$ADMIN_USER" --admin_password="$ADMIN_PASS" --admin_email="$ADMIN_MAIL" --path=/home/kusanagi/$PROF/DocumentRoot

これで、WordPressサイトが構築できました。

サブドメイン型マルチサイトの構築

KUSANAGIでは、複数回 kusanagi provisionを実行することで、サブドメイン型のマルチサイトを構築できます。
ただし、別DBおよび別プロファイルとなりますのでご留意ください。
以下のコマンドを実行すると、別DB接続、別プロファイルでWordPressを作成し、別サブドメイン(bbb.example.com)のWordPress環境を作成することができます。

FQDN=bbb.example.com
PROF=bbb
TITLE="KUSANAGI test bbb"
ADMIN_USER=kusanagi
ADMIN_PASS=passw0rd
ADMIN_MAIL=satoru@bbb.example.com
DBNAME=$(openssl rand -base64 12 | tr -dc 'a-z-A-Z0-9' | fold -w 12 | head -n 1)
DBUSER=$(openssl rand -base64 12 | tr -dc 'a-z-A-Z0-9' | fold -w 12 | head -n 1)
DBPASS=$(openssl rand -base64 12 | tr -dc 'a-z-A-Z0-9' | fold -w 12 | head -n 1)
DBPREFIX=$(openssl rand -base64 12 | tr -dc 'a-z-A-Z0-9' | fold -w 8 | head -n 1)"_"

kusanagi provision --wplang ja --fqdn "$FQDN" --noemail --dbname "$DBNAME" --dbuser "$DBUSER" --dbpass "$DBPASS" $PROF
wp core config --dbname="$DBNAME" --dbuser="$DBUSER"--dbpass="$DBPASS" --dbhost=localhost --dbcharset=utf8mb4 --dbprefix="$DBPREFIX" --extra-php --path=/home/kusanagi/$PROF/DocumentRoot < /usr/lib/kusanagi/resource/wp-config-sample/ja/wp-config-extra.php
wp core install --url=http://$FQDN --title="$TITLE"--admin_user="$ADMIN_USER" --admin_password="$ADMIN_PASS" --admin_email="$ADMIN_MAIL" --path=/home/kusanagi/$PROF/DocumentRoot

よりよいWordPressのために

WordPressの設定をよりセキュアにするために以下のことをすると良いです。

  • wp-config.php の移動
    wp-config.php はWordPressの設定ファイルで、DBの接続情報(パスワードなど)が含まれています。
    wp-config.php は DocumentRoot 以下に自動作成されますが、ここに配置していると外部からアクセス可能になります。
    そこで、wp-config.phpを 親ディレクトリ(DocumentRoot と同じディレクトリ) に移動することで、WordPressは問題なく動作し、かつ外部からアクセス不可になります。
  • SSL化(後述)
  • WordPress、プラグイン、テーマの定期的なアップデート
    WordPressでは管理画面からWordPress本体、プラグイン、テーマの自動アップデートを有効にできます。
    しかし、KUSANAGIではユーザの認識外のファイル配置を防ぐという観点から、プラグイン・テーマなどの自動的なファイル配置を抑制しています。
    そのため、手動にて定期的に管理画面にログインし、WordPress本体、プラグイン、テーマの更新をチェックし更新する必要があります。
  • 安全なプラグイン・テーマの選定
    WordPressには幾つものプラグインやテーマが提供されていて、WordPressの管理画面から選択することができます。このプラグインの動作やセキュリティ品質については千差万別で、中には最新版の動作しないものセキュリティ的に問題があるものも含まれています。
    プライム・ストラテジーが提供するKUSANAGI Readyプロジェクトでは、最新版のWordPressおよびKUSANAGIでの動作チェックおよびセキュリティチェックを行ったプラグイン・テーマを選定し、紹介しています。今はまだそれほど数が多くありませんが、今後拡充する予定です。
    安全なプラグイン・テーマの選定の判断基準の一つとして参考にしてください。
  • SSL化

    KUSANAGIでWordPressサイトを構築すると、自動的にHTTPSでもアクセスできます。この時のSSL証明書は自己証明SSL証明書となります。
    自己証明SSL証明書を使用した場合、ChromeなどのWebブラウザで表示するときにメッセージが表示され、SSL証明書の例外設定をしない限り表示されません。
    そこで、KUSANAGIでは無償のSSL証明書発行サービスのLet's Encryptを使用して、ドメイン認証SSL証明書を簡単に取得・設定できます。

    下記を実行すると、指定したプロファイルに対してLet's EncryptのSSL証明書を取得・設定します。
    ここで指定するメールアドレスは、到達可能なメールアドレスであればなんでも構いません。FQDNで指定したホストとは異なるドメインのメールアドレスでも全く問題ありません。

    kusanagi ssl --email satoru@aaa.example.com aaa

    Let's Encrypt で取得したSSL証明書は期限が90日と短いものになっています。KUSANAGIのではLet's EncryptでSSL証明書を取得すると、定期的にSSL証明書を更新するスクリプトを実行するように設定します。そのため特に何か定期的な作業を行う必要はありません。

    またHTTPS接続を優先的に行うため、HTTPに接続されても自動的にHTTPSで接続されるようにするとよりセキュアです。
    以下のコマンドを実行すると、HTTPからHTTPSへのredirect 設定やHSTSの設定を有効にします。

    kusanagi ssl --hsts weak --https redirect aaa

    URLの変更

    KUSANAGIでは、provisionで設定したURLを後から変更可能です。
    例えば、開発中は一般公開しない(DNSの登録を行わない)ホスト名にしておいて、公開時に正式なホスト名に変更する、というようなことが可能です。
    以下のコマンドを実行すると、指定したホスト名に変更します。この時、WordPressに登録されたデータのすべてに対して置き換え処理を行うため、表示ホスト名だけでなく、投稿データ内のリンクなども自動的に変更されます。

    kusanagi setting --fqdn bbb.example.com aaa

    プロファイルの削除

    間違って作成したプロファイルや、作成済みのプロファイルの構築をやり直したいときなど、作成したプロファイルや設定を削除したいことがあります。
    kusanagi では以下のコマンドを実行することで、kusanagi profile で作成したDocumentRoot以下のデータ、データベース、nginxやhttpd の設定を一括削除できます。

    kusanagi remove -y aaa

    最後に

    簡単なKUSANAGIの説明と、KUSANAGIでのWordPressの使用方法を説明しました。
    KUSANAGIの使用方法については、KUSANAGIのサイト のドキュメントをご参照ください。

    このようにKUSANAGIを使用するのはとても簡単です。是非ともお試しください。

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解