【Laravel】共用サーバーでデプロイする
こんにちは、フリーランスエンジニアの太田雅昭です。
Laravel + 共用サーバー
LaravelはPHPのため、共用サーバーで使えます。しかし下記のような問題があります。
- composer実行ファイルが無い、あるいは古い
- phpが古い
- ルートがpublic_html固定
ひとつひとつ見ていきます。
composerを新しく入れる
大抵の共用サーバーでは、composerが無いかあるいは古いバージョンのままになっています。共用サーバーでの権限による制限回避のため、ユーザーディレクトリ内で解決する必要があります。
cd ~
mkdir bin
このようにユーザーディレクトリに専用のbinディレクトリを作成し、そこに実行ファイルをおく形となります。手順は以下です。
- composerの公式サイトに従ってインストール
- 生成されたcomposer.pharをbin/composerにリネーム (mv composer.phar ~/bin/composer)
- bin/composerを実行可能にする (chmod +x ~/bin/composer)
- $HOME/binにPATHを通す
phpを新しく入れる
phpが古かったりもします。最近のレンタルサーバーでは、提供されているコントロールパネル上でwebで使用するphpを指定したりもできますが、cliの指定は大抵できません。cliで使用するphpを指定するには、そのバージョンのphpパスと~/bin/phpでシンボリックリンクを貼ります。
ln -s [使うphpのパス] ~/bin/php
ドキュメントルートを解決する
共用サーバーによってはドキュメントルートがpublic_html固定となっており、laravelのpublicディレクトリを指定できなかったりします。解決は下記の方法があります。
- 選択肢1: public_html以下にlaravelディレクトリを作成し、.htaccessでリライトする
- 選択肢2: public_htmlの他で専用のディレクトリを作成し、.htaccessでリライトする
選択肢1だと以下のようになります。
public_html
- .htaccess
- laravel
- public
- .env
- ...
public_html/.htaccessは下記のようにして、laravel/publicに流すようにします。
RewriteEngine On
RewriteRule ^(.*)$ laravel/public/$1 [L]
これで、laravelのrouteで指定しているパスは正常にルーティングされるようになります。またURLから/laravel/.envにアクセスしても404が出るため安全です。
Cronを設定する
Cronでは.bashrcのような初期化が効かないため、phpはフルパスで指定する必要があります。
[path to php] artisan xxx