さくらのVPSでKUSANAGI

さくらのVPSでKUSANAGI - SSLサーバー証明書の設定までやってくれる!

説明

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

お勧めコンテンツ

wp_json_encode(2014年12月23日 登録)

mixed wp_json_encode( mixed $data [ , int $options = 0 [ , int $depth = 512 ] ] )
データをJSON形式にエンコードする。

noindex(2010年4月21日 登録)

void noindex( )
noindexメタタグ(<meta name='robots' content='noindex,nofollow' />)を表示する。

get_category_by_slug(2010年1月4日 登録)

mixed get_category_by_slug( string $slug )
カテゴリーのスラッグからカテゴリー情報を取得する。

get_post_field(2016年5月23日 登録)

string get_post_field( string $field [ , mixed $post = null [ , string $context = 'display' ] ] )
投稿情報の要素を取得する。

is_tax(2011年8月31日 登録)

bool is_tax( [ mixed $taxonomy = '' [ , mixed $term = '' ] ] )
カテゴリーおよび投稿タグ以外のタクソノミーアーカイブページか調べる。

最終更新日時 : 2017-05-15 18:16