さてやっとkusanagiの設定です。これまでに、さくらのVPSを契約し、kusanagi on CentOS Stream 8 のテンプレートイメージを導入、Linuxの初期設定を実施しました。これまでの記事は以下に。
前にも書きましたがこのブログをおいているサーバがもっさりとしていて、Webのレスポンスも非常に遅い感じだったので、ちょっといろいろと考えていたのですが、そもそもなんで「クラウド」サービスで動かしているんだっけと思い始めてしまいました。ひい[…]
さて、前回、前置きとしてさくらのクラウドからさくらのVPSへの引っ越しをもくろんだというお話しをしました。実際に手続きを始めるに当たってさくらのVPSの契約手順について紹介します。基本的にはさくらインターネット社が提供している情報に沿って[…]
さて、前回まででさくらのVPSの登録がおわり、kusanagi入りのCentOS Stream 8にログインすることが出来ました。そこまでの経緯は以下の通りです。 [sitecard subtitle=関連記事 url=https:/[…]
基本的な設定はPrime Strategy社のページを参考にして進めます。なお、さくらのVPSの契約はこのリンクから可能です。
kusanagiの初期設定の手順
まずは、kusanagi9を使ってwordpressが動くようにします。wordpressが動いたら、そこにさくらのクラウドで動いているwordpressのデータを載せて引き継ぎを行います。この動作が確認できたらDNS的に www.hiiragiya.net を新しいサーバに向けることで、皆さんがアクセスするwordpressのサイトを切り替えます。今回はサーバを並行して動かせるので安心して作業が出来ます。
CentOS Stream 8のアップデート
さて、先ほどのPrime Strategy社のページを見ながら初期設定を進めてきます。まずは、kusanagiというよりも、CentOS Stream 8のバージョンアップを行います。なおユーザは前回作成したworkuserを使います。まぁ基本的にroot権限で行う作業ばかりなので、ほぼsudoを使うことになります。
$ sudo dnf update -y
dnfはCentOS8から導入されているパッケージ管理システムです。CentOS7まではyumが使われていたわけですが、ベースがpython2だったということで、今時のpython3ベースに実装し直されたのがdnf。基本的なコマンドはyumと変わらないので、yumと打っていたところをdnfと打てば良いです。dnfって何の略だろうと思って調べたのですが、dandified yum(ダンディ: イカした yum)という意味だそうです(Wikipediaより)。まじか…。ちょっとセンスなさすぎだろう、と思ったりしますが、dnfが採用されたのが2015年の話なので今更の突っ込み感…。てかyumのyもない(笑)残っているのはダンディの方だけですね。
CentOS Stream 8は決められたマイナーバージョンがなく、どんどんアップデートされていくOSなので、順次アップデートしていくことが求められます。今回インストールしたOSイメージもどのタイミングかで作られているものなので、すでに古くなっているはずです。これをアップデートしたのが先ほどのコマンドです。さて、ターミナルが日本語対応であれば
完了しました!
と元気に言っていただけるはずです。ここでエラーがでることはないはず…。導入されたパッケージ群を使うためシステム全体を再起動します。指定したパッケージ(たとえばapacheとかnginxとか)のアップデートだけであれば、そのパッケージに含まれているサービスだけsystemctlとかで再起動すればいいのですが、今回は大幅にいろいろとパッケージを入れ替えている(はず)なのでまとめて再起動します。
$ sudo reboot
サーバ自体が再起動するのでsshのセッションが切れます。再度ログインして継続して作業を行いましょう。
kusanagiの初期設定
さてここからkusanagiの設定を始めます。kusanagiの設定といえど、wordpressの構築に必要なパッケージがまとめて追加されますので、wordpressを使ったブログサイトを作るのであればここで紹介する一連の作業だけで終了します。/opt/kusanagi/bin/kusanagi コマンドを利用してすべてを実施します。一括して終わるので楽ですが、細かいところでトラブルが発生すると自分で設定を理解していないので対応は難しいだろうなとは感じます。ともあれ進めていきましょう。
これも、先ほどのページに書いてあるとおりです。ただ、わかりにくいのは先ほどのページでは順番にオプションが説明されていますが、これ全部つけて一行で実行しなければいけません。具体的にひいらぎやが実行したコマンドは以下の通りです。
$ sudo kusanagi init --tz Asia/Tokyo --lang ja --keyboard en --passwd 'kusanagiユーザのパスワード' --dbrootpass 'mariadbのrootパスワード' --phrase 'kusanagiユーザのsshキーのパスワード' --nginx121 --php74 --mariadb10.5 --ruby26
各オプションは先ほど掲載したページに載っているので確認をして下さい。ひいらぎやはとりあえずすべてを最新にしようと思いnginxやphp、mariadbのバージョンは選択できる最新のものにしました…。が!この時点(2021年11月)に選択できたPHPの最新バージョンはphp80です。kusanagiコマンドに –php80 として渡すとPHP8.0がインストールされます。ただし、kusanagiコマンドで指定可能にもかかわらず、そのままではwordpressが正しく動きません。いろいろと試したあげく–php74に下げることで問題をクリアしました。
最後にこんな感じの表示がされて完了です。
init completed. といわれていますね。
ダメだとすると細かいチェックをしないといけないので、ダメだったらどうしようという感じではありますね…。
続いてkusanagiのプロビジョニングに続きます。
kusanagiのプロビジョニング
英語の単語としてのprovisionにはいろいろな意味がありますが、ここでは「配置」ということのようです。これもkusanagi9のプロビジョニングのページを参考にすすめます。
先ほどの初期化(init)と同じようにkusanagiコマンドを使って実施しますが、これも同様にすべてのオプションをまとめて渡して実施します。
ひいらぎやが実行したコマンドは以下です。
$ sudo kusanagi provision --wp --wplang ja --fqdn www.hiiragiya.net --noemail --dbname kusanagi_db --dbuser kusanagi_db --dbpass 'wordpress用dbユーザのパスワード' hiiragiya-net
–fqdnではFQDN(Full Qualified Domain Name)を指定します。最終的にwordpressを動作させるサーバ名と思って下さい。今時は皆様独自ドメインで動かすことが多いと思うので、www.ドメイン名となることが多いでしょうか。ひいらぎやも同じでwww.hiiragiya.netを指定しています。
–noemailとしていますが、HTTPSで暗号化されたサイトを構築するのであればkusanagiを通してLet’s Encryptというサービスを使って無料で証明書を取得することが出来ます。–noemailではなくて–email メールアドレスと指定すると証明書を作ってくれます。素直に–emailに指定すると以下のような悲しい結果になりました。
kusanagi provision: error: provision failed
です。その前に
Failed to get Let’s Encrypt SSL certificate files.
とあるのでLet’s Encrypt関係とわかります。
Let’s Encryptは証明書を作成する際に実際にそのサイトが存在するのかを確認するのですが、そのために、外から見えるWebサーバの特定の場所にファイルを置いて、Let’s Encryptのサーバからそのファイルが取れるかどうかを試します。ひいらぎやの場合は、ここで指定したFQDNはwww.hiiragiya.netな訳ですがこれは今の時点では別のサーバです。ということで、この確認ができずLet’s Encryptによる証明書の発行に失敗するというさみしい結果になったので、後で別で設定することにしました。
また、複数のホスト名に対応した証明書の発行もLet’s Encryptは対応していますが、kusanagiコマンドを通すとこれも出来ないようですので、こういう要望があるときも別途作業をする必要があります。
Let’s Encryptの証明書発行が失敗したときには以下のようなログが先ほどのスクショのすぐ前にでていました。
Certbot failed to authenticate some domains (authenticator: webroot). The Certificate Authority reported these problems:
Domain: hiiragiya.net
Type: unauthorized
Detail: Invalid response from http://hiiragiya.net/.well-known/acme-challenge/多分ランダムなファイル名 [今のhiiragiya.netというホスト名のIPアドレス]: "<html>\r\n<head><title>404 Not Found</title></head>\r\n<body>\r\n<center><h1>404 Not Found</h1></center>\r\n<hr><center>nginx</center>\r\n"
Domain: www.hiiragiya.net
Type: unauthorized
Detail: Invalid response from http://www.hiiragiya.net/.well-known/acme-challenge/多分ランダムなファイル名 [今のwww.hiiragiya.netというホスト名のIPアドレス]: "<html>\r\n<head><title>404 Not Found</title></head>\r\n<body>\r\n<center><h1>404 Not Found</h1></center>\r\n<hr><center>nginx</center>\r\n"
Hint: The Certificate Authority failed to download the temporary challenge files created by Certbot. Ensure that the listed domains serve their content from the provided --webroot-path/-w and that files created there can be downloaded from the internet.
http://hiiragiya.net/ と http://www.hiiragiya.net/ の両方を見てくれているようですが、両方とも旧サーバを見ているのでそこに以下のファイルはありません。
.well-known/acme-challenge/多分ランダムなファイル名
このファイルはWebのドキュメントルートに自動的に作られますので、作成について我々が特に気にする必要はありません。Hintには指定しているドキュメントルートが間違っているんじゃね?といってくれていますが、このケースではそもそもサーバが違います…。
さて、–email指定時には、そもそもタイムアウトが発生する可能性があります。これは要するにサーバが反応しない状態なのですが、これじつはひいらぎやも引っかかりました。実はさくらVPSの申込時のこの画面…。
パケットフィルター設定という項目があり、接続可能ポートがSSH(TCP 22)のみの表示があります。申込時には編集が不可だったのでそのまま飛ばしてしまったのですが、このままですと、SSH接続以外の外部接続はさくらインターネット側でブロックされている状態です。
接続可能ポートの設定を行うためには
さくらのVPSコントロールパネルの左側メニューの「サーバー」をクリックして、サーバー一覧を表示させ、その中から該当ホスト名をクリックします。その後に表示されるノードの個別設定画面の中の「ネットワークインターフェース」のすぐ右にある「接続先を設定する」を選び、「グローバルネットワーク」のタブをクリックし、さらに、「パケットフィルターを設定」というボタンをクリックします。その画面が以下です。
ここから接続可能ポートを追加します。HTTP/HTTPSはTCPの80番と443番ポートを使いますのでこれを開ければ良いです。よくあるケースですので、フィルターの種類を選択というメニューからWebを選んで追加するだけで良いです。これで上記の画面のように80と443があきます。ホストネームが中途半端にylangになっていますが、まぁこれはさくらのVPS画面上の管理だけなのであまり関係ないです。
さて、この作業はどちらにせよ必要なので設定しておいて下さい。provisionが終わるとwordpressの設定に移りますが、Webにつながらないと進められませんので…。
さてコマンドを実行して以下のような画面がでれば正常終了です。
先ほどと違って
provision completed.
といわれています。しかし赤文字はエラーと見間違えるのでほんとやめてほしい…。
これで、wordpressのインストールまでおわりました。この後は普通のwordpressの設定になるので、どこからかの移動ではなくてここで一からブログを書くのだという人は、割り当てられているIPアドレスにDNS的な名前をつけて手許のブラウザからアクセスすれば良いはずです。よくある紹介サイトでは/etc/hostsでの対応が進められていたりしますが、この後の設定は次の記事で紹介します。