どうもこんにちは。「ねぇ、何かいい方法ないかな?」と相談されたらとりあえず『それならLaravelっすね!』と答えてしまうこうじです。嘘です。

最近KUSANAGIサーバーを使う機会があったのと、仕事でLaravel案件が増えてきたので、爆速KUSANAGIにLaravelをインストールして運用したいと思います。

当ブログも現在KUSANAGIサーバーに移行中です。いつになるか知らんけど^^;

この記事の内容

KUSANAGIとは

KUSANAGI」とはプライム・ストラテジー社が開発・提供する世界最速クラスの仮想マシンイメージです。
名前がかっこいいです。相手の防御力下げそうな力を持ってそうです。

ページキャッシュ利用時には1秒あたりの同時リクエスト数6万超を実現します。管理画面などページキャッシュ非使用時でもWordPressの実行時間3ミリ秒台、1秒あたりの同時リクエスト数1,000超を実現します。

標準のLAMP環境と比べ、ページキャッシュ使用時には数千倍の高速化を実現します。ページキャッシュ非使用時でも10倍~15倍の高速化を実現します。(いずれも4vCPU最大性能時、*1)

KUSANAGI Powered by Prime Strategy

主にWordPressが使われる事が多く、まさに爆速。そして専用のコマンドもあり、セットアップやWordPressのインストールなどもインタラクティブに設定が可能でとても優しい設計になっております。

とはいえWordPress用に作られて独自のイメージというわけではなく、中身は有名なCentOSです。それを徹底的に最適化・チューニングして爆速先生に仕上げたのがKUSANAGI先生というわけです。

KUSANAGIにLaravelをインストール

先程もお話しした通り、実態はCentOSです。なので、WordPressだけではなくLinuxでできる事は大概出来ます。多分。

KUSANAGIは「kusanagi」コマンドを使用し、インタラクティブに環境構築が可能です。WordPressに特化しているのもあり、環境構築でWordPressを指定するだけで簡単に環境が立ち上がります。わぁ便利^^

今回はLaravelを入れるので、kusanagiコマンドを使用してLAMP環境を整えます。

ちなみに、KUSANAGI環境は既に出来上がっているものとします。機会があればどこかで別記事にてご紹介します。

今回はConohaVPSのKUSANAGIイメージを使用しています。

ConohaVPSはよくある月額課金ではなく、時間課金なので、ちょっと試してやめるなどの構築テストのコストがかからないのでとても便利です。今までずっとさくら信者でしたが、今はConoha信者です。
イメージキャラクターは全く関係ありません。嘘です。

実装環境

  • ConohaVPS(KUSANAGIイメージ)
  • KUSANAGI 8.5.0-1
  • サーバーはnginx
[root@012-34-567-89 user]# kusanagi -V
KUSANAGI Version 8.5.0-1

LAMP環境をセットアップ

まずはLAMP環境を構築します。これもkusanagiコマンドで簡単に出来ます。コマンドはルート権限で行いましょう。

[root@012-34-567-89 user]# kusanagi provision --lamp laravel

–lamp」で、一般的なウェブ環境が構築されます。詳しい内容は公式サイトに丁寧に説明されています。

一番後ろの「laravel」はプロファイル名(=ルートフォルダ名)です。自分の好きな名前で大丈夫です。わかりやすい名前をつけましょう。

この後は対話式で全て答えていきます。ここら辺の文章ってPCで見ると日本語だったんですが、iPadでやった時は英語でした。設定なんかな^^;
ちなみに2回ずつ聞かれますので同じのを2回入力します。ミスタイプ防止でしょうね。

Enter hostname(fqdn) for your website. ex) kusanagi.tokyo
# Webサイトで使用するホスト名(FQDN)を入力してください。 例) kusanagi.tokyo

In order to use Let's Encrypt services, you must agree to Let's Encrypt's Term of Services.
If you agree this TOS, put in your e-mail address, otherwise carriage enter key.
TOS of Let's Encrypt : https://letsencrypt.org/repository/
# Let's Encryptを使用される場合、Let's Encrypt の使用規約に同意される必要があります。
# 使用規約に同意される場合、あなたのメールアドレスを入力してください。同意されない場合、Enterキーを二回押してください。
# 使用規約は次のURLより確認できます: https://letsencrypt.org/repository/

Enter the name of your database.
# データベース名を入力してください

Enter user name for database '上で作成したデータベース名'.
# データベース「上で作成したデータベース名」のユーザー名を入力してください。

Enter password for database user '上で作成したデータベースユーザー名'. USE [a-zA-Z0-9.!#%+_-] 8 characters minimum.
# データベースユーザ '上で作成したデータベースユーザー名' のパスワードを入力してください。[a-zA-Z0-9.!#%+_-]の文字列が使用できます。最小は8文字以上です。

作成に成功すると以下の文章が流れて、再び入力可能な状態になります。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Requesting a certificate for hyp.jp
Performing the following challenges:
http-01 challenge for hyp.jp
Using the webroot path /home/kusanagi/test_html/DocumentRoot for all unmatched domains.
Waiting for verification...
Challenge failed for domain hyp.jp
http-01 challenge for hyp.jp
Cleaning up challenges
Some challenges have failed.

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: hyp.jp
   Type:   unauthorized
   Detail: Invalid response from
   https://hyp.jp/.well-known/acme-challenge/8zODUuWjPFvgNbK2X5EJiQnSNJqre4HrGtiXW7ivIFY
   [133.130.107.9]: "<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"

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.
Cannot get Let\'s Encrypt SSL Certificate files.
test_html のプロビジョニングは完了しました。hyp.jp にアクセスし、lampをインストールしてください!
完了しました。
[root@012-34-567-89 user]#

使用するドメインが使用可能でない場合は

その場合、Let’s Encryptの認証の部分でエラーになります。
エラーになると、その部分は設定されないけど、SSLを使用する設定はされますので実際にURLにアクセスすると不明な証明書となって正しく見る事ができません。

まぁ使用可能ではない時点で見れませんがね^^;
その場合は、ドメインが疎通可能な状態になってから、もう一度プロファイルを削除して再度作り直した方がわかりやすいです。

プロファイルの削除も簡単で以下のコマンドで可能です。

[root@012-34-567-89 user]# kusanagi remove -y 削除するプロファイル名

削除するプロファイル名は作成時に作ったフォルダ名です。今回でいうと「laravel」になります。

-y」は環境構築の際の設定ファイルなども全て削除します。
つけない場合は、各データファイルを消すか残すかを対話式で決める事ができます。

[root@012-34-567-89 user]# kusanagi remove -y laravel
Remove laravel config files ? [y/n] y
Remove /home/kusanagi/laravel ? [y/n] y
Remove laravel database ? [y/n] y
Done.

Laravelをインストール

これで基本的なサーバー環境が整いました。この後はLaravelをインストールしていきます。

LaravelをインストールするにはComposerを使用しますが、KUSANAGI先生は元から備わっていますので、そこら辺も抜かりないですね。

インストールするパスへ移動

先程作成したフォルダに移動します。ディレクトリの場所はKUSANAGIユーザーホームに作られますのでそこに移動します。

そういうこともあり、KUSANAGIユーザーでやると色々と楽ちんです。

# 先程作成したプロファイル(laravel)に移動する。
[kusanagi@012-34-567-89 ~]$ cd /home/kusanagi/laravel
[kusanagi@012-34-567-89 laravel]$

DocumentRootを削除

これは別にしてもしなくても構いませんが、Laravelの場合は「project_name/public」ディレクトリがルートになり、紛らわしい為、削除します。

# 一覧を確認。
[kusanagi@012-34-567-89 laravel]$ ll
# drwxrwxr-x 13 kusanagi kusanagi 4096  2月 19 18:46 DocumentRoot
# drwxr-xr-x  4 kusanagi kusanagi 4096  2月 19 18:11 log

# DocumentRootを削除。
[kusanagi@012-34-567-89 laravel]$ rmdir DocumentRoot

# 一覧を確認。
[kusanagi@012-34-567-89 laravel]$ ll
# drwxr-xr-x  4 kusanagi kusanagi 4096  2月 19 18:11 log

Composerでインストール

ここら辺もコマンド一発。なんて便利な世の中になったんでしょうね。
よく知り合いからは黒い画面に白文字を凄いことしてそうでカッコいいと言われる事がありますが、実際やってるのはドキュメントからのコピペですよね^^;

# インストール。「project_name」はなんでもいいです。わかりやすいので。
[kusanagi@012-34-567-89 laravel]$ composer create-project laravel/laravel project_name

# バージョンを指定してインストールする場合は後ろにバージョンも指定可能。
# composer create-project laravel/laravel project_name "5.1.*"

#
# ズラズラとインストール情報が続きます。。。
#

# 一覧を確認。上記で決めたプロジェクト名のディレクトリがあればOK。
[kusanagi@012-34-567-89 laravel]$ ll
# drwxrwxr-x 13 kusanagi kusanagi 4096  2月 19 18:46 project_name
# drwxr-xr-x  4 kusanagi kusanagi 4096  2月 19 18:11 log

サーバー設定を変更

Laravelのルートパスはプロジェクト内の「public」フォルダになる為、ドメインの参照先をそこに変更します。これで、実際にブラウザから表示可能になります。
サーバー設定はルート権限で行います。

[プロファイル名]_http.conf

SSLのみだったら必要ないのかもしれませんが、気持ち悪いのでちゃんと設定します。

# サーバーの設定ファイルを変更。
# laravel_http.confの「laravel」はプロファイル名が入ります。
[kusanagi@012-34-567-89 laravel]$ sudo vim /etc/nginx/conf.d/laravel_http.conf

# 設定ファイル内で以下の場所が上の方にありますので、各設定を変更。
# ...
# ...
# ...
     # HTTPSしか利用しない場合はコメントアウトを外す。
     # rewrite ^(.*)$ https://example.com$uri permanent; # SSL ONLY
     rewrite ^(.*)$ https://example.com$uri permanent; # SSL ONLY
# ...
# ...
# ...
     # HTTPSしか利用しない場合はコメントアウトを外す。
     # root  /home/kusanagi/laravel/DocumentRoot;
     root  /home/kusanagi/laravel/project_name/pubic;
# ...
# ...
# ...

[プロファイル名]_ssl.conf

HTTPS接続時の設定もちゃんと変更します。

# サーバーの設定ファイルを変更。
# laravel_ssl.confの「laravel」はプロファイル名が入ります。
[kusanagi@012-34-567-89 laravel]$ sudo vim /etc/nginx/conf.d/laravel_ssl.conf

# 設定ファイル内で以下の場所がありますので、各設定を変更。
# なお、先程編集したconfファイルと微妙に場所が違いますが、どこかにありますので探しましょう。
# ...
# ...
# ...
     # HTTPSしか利用しない場合はコメントアウトを外す。
     # rewrite ^(.*)$ https://example.com$uri permanent; # SSL ONLY
     rewrite ^(.*)$ https://example.com$uri permanent; # SSL ONLY
# ...
# ...
# ...
     # HTTPSしか利用しない場合はコメントアウトを外す。
     # root  /home/kusanagi/laravel/DocumentRoot;
     root  /home/kusanagi/laravel/project_name/pubic;
# ...
# ...
# ...

設定完了!

これでブラウザから表示されるようになりました!
後は、ゴリゴリやりたい事をやっていくだけです^^

まとめ

普通であれば、レンタルサーバーで全然いいんですが、こういうちょっと突っ込んだ事やる時は、やっぱりVPSが一番ですね。気軽^^

普通にレンタルサーバーもあり

細かい事しないならレンタルサーバーのConoha Wingもあります。こちらもKUSANAGIなのでWordPressだけならこっちの方が楽かもしらんね。

Laravelの実際の簡単な使い方なども備忘録がてらその内更新したいと思います。
現場からは以上です。

速度検証

実際にどんくらい早いの?とかそこら辺は以下のページで検証してくれています。感謝感謝!

KUSANAGI for Laravel 【 Laravel爆速実行環境 】