さくらの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時間もかかっていないにもかかわらずここまでサイト構築できるのは驚きの一言。できあがったサイトのパフォーマンスが気になるところである。


最終更新 : 2018年05月27日 10:43

お勧め

wp_login_url(2018年5月27日 更新)

string wp_login_url( [ string $redirect = '' [ , bool $force_reauth = false ] ] )
ログインURLを取得する。

path_join(2014年7月9日 更新)

string path_join( string $base, string $path )
パス名を連結する。

wp_update_user(2014年5月20日 更新)

mixed wp_update_user( mixed $userdata )
ユーザ情報を更新する。

the_excerpt_rss(2014年11月16日 更新)

void the_excerpt_rss( )
RSSフィード用の抜粋記事を出力する。

is_preview(2018年7月4日 更新)

bool is_preview()
要求がプレビューか調べる。