さくらのVPSでKUSANAGI

説明

請け負っていた業務が一段落したので、「さくらのVPS」で「KUSANAGI」を試してみました。推奨環境はメモリ4GBとなっているが、今回は実験的な利用なので、SSD 2GBプランでトライしました。

まずはドキュメントで作業の流れを確認

「さくらのVPS(以下、VPS)」のコントロールパネルでOSをインストールする前にKUSANAGIのセットアップの前に「KUSANAGIに関するドキュメント」を一読し、大まかな作業の流れを把握する。

  1. KUSANAGIの初期設定
    1. ロケージョン選択
    2. 言語選択
    3. キーボードレイアウト選択
    4. kusanagiユーザーのパスワード設定
    5. kusanagiユーザーの秘密鍵パスフレーズ設定
    6. MangoDB(MySQL)のROOTユーザーのパスワード設定
    7. Webサーバー選択
    8. PHP環境(application server)選択
  2. KUSANAGIのプロビジョニング
    1. WordPressの言語選択
    2. ホスト名の設定
    3. メールアドレスの設定(Let's Encrypt用)
    4. WordPress用データベースの名前を設定
    5. WordPress用データベースのユーザー名を設定
    6. WordPress用データベースのパスワードを設定
  3. WordPressのインストール

上記の1と2は、それぞれが1つのコマンドとなっており、それぞれのコマンド内で各種設定を行う仕組みとなっている。ホスト名については後から設定できると思われるが、すでに取得・決定済みであれば、VPSのコントロールパネルでIPアドレスを確認したところでTTL値小さくしてDNSレコードを設定し反映を早めておくと、一連の作業をスムーズに行える。

KUSANAGIの初期設定前に

VPSのコントロールパネルにアクセスして「各種設定」-「OSインストール」を選択して「標準OSインストール」を選択。「インストールOS」で「KUSANAGI (CentOS7 x86_64)」を選択してOSのインストールを開始する。

OSのインストールが終わるとステータス表示が「稼働中」に変わるので、ターミナルソフトを使ってrootアカウントでログインする。はじめにSSHのポート番号を22番から別の番号に変更する。

# vi /etc/ssh/sshd_config

「#Port 22」の「#」を取って「22」を適当な番号に変更して保存する。

# vi /usr/lib/firewalld/services/ssh.xml

「<port protocol="tcp" port="22"/>」の「22」を上記のポート番号に変更して保存する。

# firewall-cmd --reload
# systemctl restart sshd.service

今使っているターミナルはそのままにして、新たに先ほどのポート番号に変更したターミナルソフトを使ってrootアカウントでログインする。

# yum update

公式ドキュメントでは「remi-php56」を有効にしてアップデートしているが、今回はPHP7環境を採用しているので「remi」は有効にせず標準のアップデートを行った。

# reboot

KUSANAGIの初期設定

サーバーが再起動したら、ターミナルソフトを使ってrootアカウントでログインする。KUSANAGIのさまざまな設定は、「kusanagi」コマンドで行うようになっており、初期設定は次のパラメータを指定する。

# kusanagi init

画面の指示にしたがって好みの内容を選択していくだけでよい。途中で入力する各パスワードおよびパスフレーズは忘れずにメモする。

ちなみに「Webサーバー選択」および「PHP環境(application server)選択」については、初期設定した後に切替できるようになっている。

rootアカウントのログイン禁止

ポート番号を変えているとはいえ、いつまでもrootアカウントでログインできる状態にしておくわけにはいかないので、「KUSANAGIのプロビジョニング」の前にrootアカウントでログインできないようにする。

# vi /etc/group

「wheel」グループに'kusanagi'を追加して保存する。

# vi /etc/login.defs

ファイルの末尾に「SU_WHEEL_ONLY yes」を追加して保存する。

# vi /etc/pam.d/su

「#auth required pam_wheel.so use_uid」の「#」を削除して保存する。

# vi /etc/ssh/sshd_config

「PasswordAuthentication yes」を「no」に変更して保存する(行頭に「#」がある場合は削除する)。

# systemctl restart sshd.service

作業しているターミナルソフトは開いたままにして、KUSANAGIの初期設定で生成されたkusanagiユーザーの秘密鍵ファイル「/root/kusanagi.pem」をパソコン側にダウンロードする。ターミナルソフトでkusanagiユーザーをパスワードでログイン試行してログインできないことを確認。続いてターミナルソフトの認証方式をパスワードから鍵交換に変更してログイン試行する。ログインできたら、rootアカウントに切り替えできることを確認する。

$ su -

rootアカウントに切り替えできたら、rootアカウントでログインできないよう次の設定を行う。

# vi /etc/ssh/sshd_config

「PermitRootLogin yes」を「no」に変更して保存する(行頭に「#」がある場合は削除する)。

# systemctl restart sshd.service

念のためrootアカウントでログインできないことを確認する。

KUSANAGIのプロビジョニング

KUSANAGIのプロビジョニングは、標準でWordPressをディレクトリ・ファイルの配置までを行う。Let's Encryptによるサイト証明書の発行・設定を行う場合は、以下のコマンドを実行する前に、ブラウザのアドレスバーに「http://指定したドメイン名/」を入力してアクセスできることを確認しておくとよい。

NGINXの初期ページ

無事アクセスできたら次のコマンドを実行する。

# kusanagi provision html

ここでも画面の指示にしたがって好みの内容を入力していくだけでよい。ここで入力したデータベース名、データベースのユーザー名、データベースのパスワードは次節で使用するのでメモしておく。データベース用のパスワード入力まで終わると関連するファイルのダウンロードが始まり、適宜配置されていく。コマンドのパラメータとして指定した「html」はプロファイル名となり、それがディレクトリ名にも適用される。Webドキュメント関連ファイルは「/home/kusanagi/html/」以下に配置される。

WordPressのインストール

ここからはブラウザでの作業となる。ブラウザのアドレスバーに「http://指定したドメイン名/」を入力すると、WordPressのおなじみのインストールページが表示される。前節で入力したデータベース関連情報と管理者アカウント情報を入力してインストールを進める。インストールが終わったら、WordPressにログインしてダッシュボードページを表示する。

KUSANAGIの「セキュリティ」ウィジェット

4つの「警告」が表示されている。wp-config.phpファイルの3つとwp-contentディレクトリの属性変更を順に行う。

上記の警告内容を修正した後の「セキュリティ」ウィジェット

後はKUSANAGIとは関係ないが、ログインページを標準のままにしておくのはリスクがあるので、弊社のプラグイン「Login rebuilder」をインストールしてログインページを変更する。

サイトを診断

ここまでの状態で、「http」と「https」でのアクセスが可能になっている。SSLアクセス時の状態をQualys SSL LABSサイト(SSL Server Test)にて診断してみた。

SSL Server Testの結果は「A」

診断結果は「A」ということで、まずまずといったところ。実質的な作業時間は1時間もかかっていないにもかかわらずここまでサイト構築できるのは驚きの一言。できあがったサイトのパフォーマンスが気になるところである。


最終更新 : 2017年05月15日 18:16

お勧め

is_embed(2015年12月23日 更新)

bool is_embed( )
要求されているページが埋め込み投稿ページか調べる。

get_custom_header_markup(2017年4月7日 更新)

string get_custom_header_markup()
カスタムヘッダーのHTMLパーツを取得する。

wp_set_password(2013年5月5日 更新)

void wp_set_password( string $password, int $user_id )
ログインパスワードを設定する。

get_category(2011年5月25日 更新)

mixed get_category( mixed $category [ , string $output = OBJECT [ , string $filter = 'raw' ] ] )
IDを指定してカテゴリー情報を取得する。

get_body_class(2012年6月23日 更新)

array get_body_class( [ string $class = '' ] )
bodyタグのclass属性値を取得する。