KUSANAGI内のApacheでLet's Encryptのエラーを解決する

**（2016年11月4日追記）このエントリーはKUSANAGI 8.0.0内で発生している事象について記載していますが、一部の内容に関しては8.0.1-1で解決されています。**

**（2016年11月10日追記）このエントリーはKUSANAGI 8.0.0内で発生している事象について記載していますが、一部の内容に関しては8.0.1-2で解決されています。**

個人ブログやらコミュニティサーバーなどを1台に集約すべく、契約して放置していたさくらのVPSにKUSANAGI（8.0.0）をOSインストールで導入しました。

KUSANAGI=早いWordPressサーバーというイメージが大きいですが、phpを用いて構築されているCMSを使っている場合において**チューン済みの環境が簡単に構築**されます。

最近では、Drupalやconcrete5なども出ているため、上手く設定をすればa-blog cmsなどのCMSでも応用できるかもしれないですね :)

今回は、さくらのVPS下に構築していた時に、Let's Encryptを実行した時に発生したエラー2種類とその対策方法を記述します。

1. ~~取得はできてもサーバーが立ち上がらない~~
2. ~~取得でエラーが出る~~
3. KUSANAGI 8.0.1-2でエラーが出る場合**（2016年11月10日追記）**

前者はサイトにアクセスができないので分かりやすいですが、生成時に発生するエラーなので、慣れていなければ難しいかもしれません。

※ 以下、[profile_name]はプロビジョニングした時に設定している名前、[domain]はFQDN（ドメイン）を指します。

## 取得はできてもサーバーが立ち上がらない

**（2016/11/04追記）KUSANAGI 8.0.1-1で修正済み。**

このエラーが発生するときは、サブドメインで構築する時に発生すると思います。

``systemctl status httpd``を実行した時に、以下のようなエラーが出てくると思います。

```
11月 03 09:40:41 kusanagi71 apachectl[510]: AH00526: Syntax error on line 16 of /etc/httpd/conf.d/[profile_name]_ssl.conf:
11月 03 09:40:41 kusanagi71 apachectl[510]: SSLCertificateFile: file '/etc/letsencrypt/live/[domain]/fullchain.pem;' does not exist or is empty
```

一見すると、Let's Encryptの取得がうまく行っていないように見えますが、``ls -la /etc/letsencrypt/live/[domain]/``を実行すると問題なく一覧が出てきます。

シンボリックリンクでファイルを参照できるようになっているため、証明書の取得自体は問題なくできています。

この問題を解決するために、設定ファイルを``vi``コマンドを用いて開き、``SSLCertificateFile``と``SSLCertificateKeyFile``の内容を変更します。

【編集前】

```/etc/httpd/conf.d/[profile_name]_ssl.conf
SSLCertificateFile /etc/letsencrypt/live/[domain]/fullchain.pem;
SSLCertificateKeyFile /etc/letsencrypt/live/[domain]/privkey.pem;
```

行末の``;``までカーソルを持っていき、deleteキーか編集モードで``;``を削除して、保存して閉じます。

恐らく、設定を変えると以下のようになっていると思います。

【編集後】

```/etc/httpd/conf.d/[profile_name]_ssl.conf
SSLCertificateFile /etc/letsencrypt/live/[domain]/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/[domain]/privkey.pem
```

設定後、``systemctl reload httpd``を実行すれば、HTTPSでアクセスできるようになっています。

## 取得でエラーが出る

**（2016年11月10日追記） KUSANAGI 8.0.1-2で修正済み、次の項目を確認してください**

このエラーが発生するときはサブドメインを付けていない時（example.comなど）で発生している場合です。

構築途中に、Not Foundなどが表示される場合が該当します。

これは、生成されたサーバーの設定ファイルに、**バグ**といっても過言ではない…ぐらいの問題が発生しているためです。

問題を解決するためには、一度プロビジョニングした後に ``/etc/httpd/conf.d/[profile_name]_http.conf``と``/etc/httpd/conf.d/[profile_name]_ssl.conf``を開きます。

viコマンドで開くと、以下のように記述されています。

```
	ServerName [domain]
	ServerName www.[domain]
```

nginxであれば、``ServerName``（※1）でも問題なく動いてしまうのですが、Apacheではエラーが出るので2行目を``ServerAlias``に変更します。

変更した結果は以下のとおりです。

```
	ServerName [domain]
	ServerAlias www.[domain]
```

また、先に記述した``/etc/httpd/conf.d/[profile_name]_ssl.conf``ファイルの``SSLCertificateFile``と``SSLCertificateKeyFile``部分は同様に最後の``;``を削除します。

そして、以下のコマンドを実行します。

```
kusanagi ssl --email [your_mail_address] [profile_name]
```

最後にApacheを再起動してブラウザで確認できれば完了です。

※1 nginxでは``server_name``で複数指定することが可能。ソフトウェアによる違いです。

## KUSANAGI 8.0.1-2でエラーが出る場合（2016年11月10日追記）

@s-miyaza@github さんが更新されているのですが、設定ファイル面で問題は0になりました。
しかし、SSL証明書のエラーが出ている場合、アクセスしたら別のサイトになった場合は以下のコマンドで一度Apacheを再読込した上で対応します。

```
systemctl reload httpd
kusanagi ssl --email [your mail address] [profile name]
systemctl reload httpd
```

SSL証明書が不要な方は２行目のコマンドを入力しなくてもサイトにアクセスすることが可能です。

（追記ここまで）

## 面倒くさがりな方へ

素直にレンタルサーバーを使ったほうがいいと思います。

サーバーの設定やLinuxの知識・Vi（Vim）…というのは、これからKUSANAGIを使うにしても必要な知識だと思います。

特に、LinuxとVi（Vim）の知識は最低でも必要ですし、その点が自由度の高いというところに該当します。

「そこが面倒じゃないよ！、複数サイト運営するのに、その部分を変更するのが面倒なんだって!!!」という場合であれば、素直にnginxを使えば良いと思います。

今回はさくらのVPSで発生しましたが、ConoHaやIDCFクラウドなどの環境でも発生する可能性はあるため、参考にしていただければ幸いです。（了）

## 追記（2016年11月4日）

KUSANAGIの最新版ではないのか、repoが…という質問がありましたが、そこら辺に関しては[KUSANAGIの初期設定 – KUSANAGI](https://kusanagi.tokyo/document/kusanagi-init/)を見つつ実行済みです。

ViとVimを変えているのは仕様です。サーバー管理はViで事足りるかもしれませんが、結局Vimを使うようになると思いますし（ぇ。

また、KUSANAGIの中の人（@s-miyaza@github さん）が次期バージョンで直っているとのコメントがありましたので、次期バージョンのアップデートまで手動で対応すれば良いと思います。

（夜追記）

バージョンアップ（8.0.1-1）があり、1.に関してはバグフィックスで直っているためバージョンアップの対応をお願いします。2.に関しては直っていないため、手動で直す必要があるみたいです。

## 追記（2016年11月10日）

最新版で発生した事象を新たに記載しました。別の…でもよかったのですが、同系統のバグなので記述しました。