さくらのレンタルサーバーでLaravelを使う

   

さくらのレンタルサーバーでLaravelを設置しようとしたところ、かなりハマったので備忘録をかねての投稿です。

まず、やりたかったことは
・さくらのレンタルサーバー(スタンダード)にLaravel5を設置する
・ドメインはマルチドメインにて運用。
・laravel本体はwwwフォルダの外に配置し、www内からlaravelのpublicフォルダへシンボリックリンクを貼る。

さっそく作業開始します。
ドメインはムームードメインで管理しているので、まずはムームー側でさくらのレンタルサーバーのIPをAレコードに追加しました。
そして、さくら側のサーバーコントロールパネルへログインし「ドメイン設定」から新しいドメインを追加。

上記設定が終わったら、ターミナルからSSHでレンタルサーバーに接続します。
laravelのソースは自前のgitサーバーにpushしてあるので、まずはcloneしてレンタルサーバー上に配置することにします。

cd ~/
git clone [リモートGitのURL]

次にシンボリックリンクの作成。

cd ~/www/
mkdir [ドメインのパスに設定したディレクトリ]
ln -s ~/[cloneしたディレクトリ]/public [ドメインのパスに設定したディレクトリ]

あとはDBに接続出来るように、さくらのmySQLの情報を確認しつつ.envの設定も作成しました。

これで、設定したドメインでアクセスすればlaravelが動くかと思ったのですが、Internal Server errorと出てきてしまい動かないようです。
どうやら、public配下の.htaccessを修正する必要があるとのこと。
以下のように修正します。

<IfModule mod_rewrite.c>
    #<IfModule mod_negotiation.c>
    #    Options -MultiViews
    #</IfModule>

    RewriteEngine On
    RewriteBase /

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

まず、さくらでは「Options」が使えないらしいので、こいつをコメントアウト。
あとRewriteEngine Onの行の下に「RewriteBase /」を追加します。

これで行けるだろうと思ってアクセスしてみたところ、こんどは500エラー。
phpのエラーのようなのでlogを確認すると「vendor」フォルダーがないと怒られています。

そんな馬鹿なと思い、確認すると確かに「vendor」フォルダーがない。
もしやと思って.gitignoreファイルを見てみると案の定無視リストに「vendor」が入っていましたとさ・・。

調べてみると、どうやらlaravelではvendorフォルダーをgitに登録するのは非推奨とのことでした。
代わりにgit cloneした後はサーバー上で「composer install」を叩くと自動的にvendor等無視されたファイルをダウンロードしてきてくれるようです。
composerはPhpStormでプロジェクト内に配置されているので、以下の手順にてinstallを実施しました。

chmod +x composer.phar
./composer.phar install

すると、色々インストールされるので、再びブラウザからアクセスしてみると無事laravelが表示されていました。
な、長かった・・・。

ちなみに今回SSLの設定も実施しました。
さくらのコントロールパネルから秘密鍵とCSRの生成が出来るため、生成後にひとまず自己認証局で署名をしました。
ちなみに、コントロールパネルで作成した秘密鍵の情報(都道府県など)が自己認証局の情報と合わないとCSRに署名が出来ませんでした。

最初からVPSとかにしてればこんな苦労もないのでしょうが、節約のためレンタルサーバーでいくつもドメインを相乗りさせているので仕方がないんですよね・・・。

 - 技術系(インフラ), 技術系(サーバーサイド) , ,