conohaVPSでkusanagi wordpressを使う手順

conoha VPSでKusanagiを使ったwordpressサイトを作る手順をまとめます。

# ドメインとサーバーの選択

ブログを立てようと思った場合、以下のように選択肢が生じます。

1. 独自ドメインを使うかどうか
2. ブログサービスを使うかWordPressを使うか
3. WordPressを使う場合、サーバーをどうするか

今回は勉強の為に色々やりたいのでテーマの自由度の高いWordPressを独自ドメインで使う事にして、サーバーもついでに色々出来るVPSにする事にしました。

ちなみにVPSを使うとWordPressが爆速になると噂のKusanagiが使えますのでそれも嬉しいです。ただし、Kusanagiを使おうとするとcentOS必須になってしまうようで使い慣れたUbuntuは選択できませんでした。











# 試行環境

conoha VPS 1GB centOS + かんたんkusanagi
お名前ドットコム
teraterm



# 1. ドメインを取得する

今回はお名前ドットコムでドメインを取得しましたが、どうもお名前ドットコムは他より管理費が高いようなので、他の管理会社の方が良いかもしれません。
https://www.onamae.com/


# 2. VPSを立てる

今回はconoha VPSを使っていますがどこのVPSでも同じように使える筈です。Kusanagiが使用可能なVPS/IaaSは以下に一覧が出てますのでここから選びましょう。
https://kusanagi.tokyo/cloud/

VPSは仮想マシンのスペックごとに価格が違います。512MBでも使えますがスケール変更機能が使えないので、今回はスケール変更が可能な1GBを選択しました。かんたんKUSANAGIイメージを使うとKUSANAGIが使えますのでこれにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277233/f60d5711-971d-0a4a-18cf-76e47d6aa92f.png)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277233/9c2b68a9-c8cf-26d8-1846-b7d10e6f0342.png" width=75%>

なお、ここでサーバーのrootパスワードを入力しますが、このパスワードが短いと容易に侵入されてしまいますので充分に長く、類推困難なパスワードに設定しましょう。特に鍵認証に切り替えずにパスワード認証のまま使う人は自動生成で長いパスワードを作って入れるのをおススメします。

Kusanagiイメージを選択するとサーバーを立てた時点でWordPressが動いてる状態になります。ApacheをインストールしたりMongoDBをインストールして設定したりといった手間が全く要らなくなっていて、レンタルサーバーでWordPressを使うような手軽さで使う事ができます。

KUSANAGI管理をクリックして新たに作る予定のサイトURLを入力すると、サーバー側でWordPressが待機した状態になります。後で設定に使うサーバーのIPアドレス(conohaの場合は118.27.**.**のような値の筈) をメモして次に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277233/c79abcbc-0c9d-bbe6-9bdb-15d60f20351d.png)










































# 3. DNSレコードを設定

取得したドメインへのアクセスを上記で待機状態になっているサーバーに繋ぐ為、DNSを設定していきます。

お名前ドットコムの場合はドメイン設定 → DNS設定/転送設定 → DNSレコード設定を利用する、と入っていきます。同様のサービスには似たような項目の設定メニューがある筈です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277233/23b4e228-3f47-8bbd-3f08-1d22fc6b2b35.png" width=50%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277233/3bcdf955-19eb-941d-df84-0144a3eb6cf9.png" width=50%>


下のようなドメインとIPを設定したい場合は下の画像のように設定します。

ドメイン: hoge.fuga.com
IP: 118.27.123.123
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277233/22ae2881-b585-f9e6-ba65-ffbb9f3b4aaa.png" width=80%>
設定が反映されるまで30分ぐらい掛かると思いますが、反映後にドメインにアクセスするとWordPressの初期メニューが表示されます。以下のようなメニューが表示されたらOKです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277233/a7394d52-e7fd-bfdd-a4aa-7be4f993e0c4.png" width=50%>






















# 4. WordPressテーマを設定する

初回ログイン時はIDとパスワードを要求されますのでこれを入力します。WordPressの設定画面は「ブログのURL/wp-admin/」で固定ですので、IDとパスワードがあれば誰でも侵入できてしまいます。rootパスワードと同様、自動生成ツールが作るような長くて類推困難なパスワードを設定しましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277233/a7394d52-e7fd-bfdd-a4aa-7be4f993e0c4.png" width=50%>

この時点でデフォルトのテーマでブログが公開されていますので、後はテーマを選んだり記事を書いたりするだけです。
















# 5. SSL化する

https接続できるように変更しておきます。KUSANAGI managerの基本設定 → サイト設定のSSL化をONにするだけでhttps接続に切り替わります。証明書用意したりopenSSLをインストールしたりする必要がないというのはありがたいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277233/790856c2-f153-c7d9-69b9-3bc6c299d155.png)



















# 6. sudoerで鍵認証するようにする

とりあえず普通に使うだけなら上記までで大丈夫ですが、rootがパスワードログイン可能なのはセキュリティ的に嫌なので、rootログイン無効にして鍵認証のみに変更しました。

まずuserを作ってsudoerにします。centOSではwheelグループにSUDO権限がありますので作ったuserをwheelグループに登録しました。

```terminal:terminal
adduser hoge
passwd hoge
sudo usermod -aG wheel hoge
```

権限を確認しておきます。

```terminal:terminal
$ id hoge
uid=1002(hoge) gid=1002(hoge) groups=1002(hoge),10(wheel)
```
出来てるようです。

# 7. 鍵認証に変更してパスワードログインを無効にする

鍵認証を設定していきます。今回はターミナルソフトとしてteratermを使っていますのでteratermに鍵を作ってもらってアップロードします。

鍵認証を設定したい相手サーバーにsudoユーザーでログインして、メニューバーの設定から「SSH鍵生成」を選択します。鍵生成メニューが開きますのでデフォルトのままRSA 2048ビットで生成します。鍵だけでパスフレーズなしにも出来ますが一応パスフレーズも設定しておきます。

生成した鍵ファイルをメニューの下にある公開鍵の保存ボタン、秘密鍵の保存ボタンを押して保存先を指定することで鍵を保存できます。ほんとはProgram Files(x86)/teratermに置きたいんですが、teratermから直接置くことができないので、一旦デスクトップやマイドキュメントに保存します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/277233/e9c95c79-65ca-5c41-596b-a383ffd5741c.png" width = 50%>
保存した鍵ファイル2つをc:\Program Files(x86)\teratermに移動します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277233/8afb88c0-2ebf-be3e-4582-226843080756.png)
保存した鍵のうち、公開鍵の方（標準だとid_rsa.pub）をteratermにドラッグ＆ドロップすればログインしているサーバーにアップロードできます。選択肢が出てきますがSSH接続であるSCPを選びましょう。
<img src="https://qiita-image-store.s3.amazonaws.com/0/277233/f6994e73-723b-e91d-50fe-28fdfbb4d5bf.png" width = 50%>
鍵がちゃんとあるか確認してみます。

```terminal:terminal
$ ls
id_rsa.pub
```

ありました。このファイルの内容を~/.ssh/authorized_keysに置けば鍵認証できるようになります。まず、~/.ssh/ディレクトリがあるか確認してみましょう。

```terminal:terminal
$ ls -d ~/.ssh
/home/hoge/.ssh
```
ディレクトリがあったようです。ない場合は以下でディレクトリを作ります。

```terminal:terminal
$ mkdir ~/.ssh
$ sudo chmod 700 .ssh
```
続いて、id_rsa.pubの内容をauthorized_keysにコピーします。

```terminal:terminal
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ sudo chmod 644 ~/.ssh/authorized_keys
```
これで鍵認証できるようになった筈ですから、teratermを一旦exitしてから再度起動します。下のように、RSA鍵を使うにチェックを入れて、秘密鍵のパスを指定します。パスフレーズは鍵を作ったときに入力した文字列です。OKをクリックすればSSH接続でログインできる筈。
<img src="https://qiita-image-store.s3.amazonaws.com/0/277233/5a4a077c-fb71-d8ac-fcfc-f9ee75f74b33.png" width=50%>

ssh接続権限についての設定ファイルは/etc/ssh/sshd_configになります。これを書き換えてパスワード認証を無効にします。

```terminal:terminal
sudo vim /etc/ssh/sshd_config
```

```terminal:/etc/ssh/sshd_config変更前
PasswordAuthentication yes
```

```terminall:/etc/ssh/sshd_config変更後
PasswordAuthentication no
```
sshdを再起動するまで反映されませんが、同じファイルをまだ変更しますのでこのまま続けていきます。


































































# 8. sshポート番号を変更する
上記と同様に/etc/ssh/sshd_configを書き換えます。

sshdのポート番号がデフォルトで22番になってますので10行目ぐらいに以下のような記載があります。これを予約されてない49152～65535番のどこかに変更します。下では50100番に変更しています。

```terminal:terminal
sudo vim /etc/ssh/sshd_config
```
sshdのポート番号がデフォルトで22番になってますので10行目ぐらいに以下のような記載があります。これを予約されてない49152～65535番のどこかに変更します。下では50100番に変更しています。

```terminal:/etc/ssh/sshd_config変更前
#Port 22
```

```terminal:/etc/ssh/sshd_config変更後
Port 50100
```





# 9. rootログインを無効にする
上記と同様に/etc/ssh/sshd_configを書き換えます。

```terminal:/etc/ssh/sshd_config変更前
PermitRootLogin yes
```

```terminal:/etc/ssh/sshd_config変更後
PermitRootLogin no
```

以下でsshdの設定ファイルの変更を反映します。

```terminal:terminal
systemctl restart sshd
```







# 10. Firewallを設定する

最後に不要なポートを閉じておきます。centOSはfirewalldが標準機能で付いてますのでこれを使います。何故だかfirewallを無効にしたまま設定をする方法が分からなかったのでVPSのコンソールからやりました。

```terminal:console
systemctl start firewalld.service
firewall-cmd --list-all
```

```terminal:結果
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: 
  ports: 
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```

上だとportsの右に何も書かれていないのでポートが１つも開いていないのが分かります。このままだとfirewalldが有効にしたときにhttps接続もssh接続もできなくなります。上のsystemctl start firewalld.serviceで既に有効にしていますので、今現在接続ができなくなってる筈です。

続いて開けるポートを設定していきます。以下では上から順にhttp, https, 新たに設定したssh用のポート, KUSANAGI managerポートをそれぞれ開放しています。

```terminal:console
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=443/tcp --permanent
sudo firewall-cmd --add-port=50100/tcp --permanent
sudo firewall-cmd --add-port=60000/tcp --permanent
sudo firewall-cmd --reload
```

これでポートが３つ開いた筈です。確認しておきましょう。

```terminal:console
sudo firewall-cmd --list-all
```

```terminal:結果
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports: 80/tcp 443/tcp 50100/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```

ちゃんと出来てますね。これでssh接続できるか確認したら完了です。ちなみに閉じている筈のポートでのアクセスを試みるとアクセスが拒否される筈ですので、22番ポートや適当な使ってないポートが閉じているのを確認しておきましょう。






# 11. 子テーマを作る

wordpressブログを使う人は公開されている外観テーマを使う人が多いと思いますが google analytics のタグを貼り付けたりするためにはテーマを一部書き換える必要が生じます。その際にインストールしたテーマを直接書き換えてしまうと、テーマをアップデートした際に上書きされて変更箇所が消えてしまったりしますので子テーマを作ってそちらを書き換えると書き換えてない部分だけアップデートできるようになりますので安心です。

ここではwordpressが公開しているtwentyseventeenの子テーマを作ってみます。適当なフォルダに以下の3ファイルを作成します。どれも内容はテキストファイルですが、DOMが付いたテキストファイルで作ると実行時にエラーが出てしまいますのでWindowのメモ帳だと上手くいきません。Atomなど適当なエディタで作成してください。

- single.php
- function.php
- style.css

上記の内、single.phpはベースにしたいテーマ(今回はtwentyseventeen)のsingle.phpをまるごとコピペして作成します。

残りの2ファイルは以下のように記入します。twentyseventeen以外のテーマを使う場合はtwentyseventeenとある部分を対象テーマのインストールしてあるフォルダ名に書き換えます。

```php:function.php
<?php
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
}
```

```php:style.css
/*
Theme Name:twentyseventeen-child
Template:twentyseventeen
Version:2.2
*/
```
この3つのファイルが入ったフォルダをzip圧縮してwordpressダッシュボードからアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277233/4ccbc474-a6b0-bc51-7166-178be9180d55.png)

エラーが出なければOKですが、上手くいかない場合はベースにしたテーマのフォルダ名が違うんじゃないかと思います。ブログのURLがhoge.comの場合は以下フォルダ内にインストール済みのテーマフォルダがありますので確認しましょう。

```terminal:terminal
$ ls /home/kusanagi/hoge.com/DocumentRoot/wp-content/themes/
index.php  twentyseventeen  twentyseventeen-child
```


# 12. テーマを書き換える

もしwordpressダッシュボードのテーマエディタで書き換えたい場合は一時的に権限を付与する必要があります。今回はkusanagiからwordpressを作成しているのでownerはkusanagiになっていますが、ダッシュボードから書き換えるにはNginx経由になるのでゲストからの書き込み権限を与えなければなりません。ゲストから書き換え可能なのは脆弱性に繋がりますので、書き換え作業の間だけ権限を緩めて終了したら権限を元に戻します。

ブログのURLがhoge.comの場合は以下フォルダ内にインストール済みのテーマフォルダがあります。今回はアップロードしたフォルダがtwentyseventeen-childというフォルダ名にしてあったので同じフォルダ名でアップロードされてます。

```terminal:terminal
$ ls /home/kusanagi/hoge.com/DocumentRoot/wp-content/themes/
index.php  twentyseventeen  twentyseventeen-child
```
今回はheader.phpを書き換えたいんですが子テーマの方にはないので親テーマの方からコピーした上で権限を変更します。

```terminal:terminal
cp /home/kusanagi/hoge.com/DocumentRoot/wp-content/themes/twentyseventeen/header.php /home/kusanagi/hoge.com/DocumentRoot/wp-content/themes/twentyseventeen-child/header.php
sudo chmod 606 /home/kusanagi/hoge.com/DocumentRoot/wp-content/themes/twentyseventeen-child/header.php
```
権限を書き換えるとテーマエディタの下の方に更新ボタンが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277233/647e3353-d455-74c2-afe7-7072d7f1aa8b.png)
書き換えたら元に戻しておきます。

```terminal:terminal
sudo chmod 600 /home/kusanagi/hoge.com/DocumentRoot/wp-content/themes/twentyseventeen-child/header.php
```