本記事は昔に書いたもので、余計な手順を踏んでいる箇所などあるかもしれません。
mixhostにデプロイで当記事へこられた方は、まずこちらをご参考いただいたほうがいいかもしれません。
==============================
Laravelで作ったマッチングサービスを、レンタルサーバーへデプロイしてみました。
Laravelアプリをレンタルサーバーにデプロイするのは2度目なので1回目の時よりはだいぶスムーズに・・・
とはいえすぐ忘れるので、全体の流れと詰まった点をメモとして残しておきます。
なので各肯定の詳しい説明は省いてますのでご容赦くださいm(__)m参考サイトを貼っておりますのでコードはそちらでご確認を〜!
サーバー準備〜ssh接続でLaravelデプロイまで
メインの作業
ローカル でアプリを完成させたら、FTPではなくターミナルを操作してサーバーにアップします。(github経由)
この工程がメインの作業となりますが、基本的にはこちらのサイト様の手順に沿って進めるのみです。
Laravelをさくらインターネットのレンタルサーバにデプロイ・アップロードする方法をまとめてみた
ここまでの詰まりポイント
venderがダウンロードできない
前回ここの部分でエラーになってしまいました。
コンポーザーをインストールしたあとvenderをダウンロードしようとしてもできない。
原因は、phpのバージョンが低いことでした。
レンタルサーバー側のphp設定でバージョンを上げて解決。
migrationエラー
.envファイルに記述しているDBパスワードはパスワードジェネレーターで作成したのですが、含まれている記号がダメだったみたいでmigrationできないエラーが発生。
パスワード変更で解決しました。
一難去ってまた一難。今度はDBのバージョンが低いとのこと・・・
自分の過去のツイートを見てもなんの解決にもならず、改めて調べ直して
condig->database.php の55行目付近にある文字コードを以下のようにして回避しました。
'charset' => 'utf8', 'collation' => 'utf8_unicode_ci',
シンボリックリンク
全体の流れは先ほどリンクしたサイト様の手順で大丈夫なのですが、最後publicをコピーするのではなくシンボリックリンクを貼りました。
シンボリックリンクの箇所のみこちらのサイト様を参考にしました。
シンボリックリンクのやりたいことは分かるんですが、ターミナルに打ち込むコマンドが長くなってもうなんか、ちょっとハマりました。
イメージとしては、
ln -s アプリ本体のフルパス/public 表示させたいディレクトリフルパス
です。(フルパスじゃなくてもいいかも??)
Laravelはpublicが公開ディレクトリなので、本体のpublicをここに表示させますーという指示をしています。
.htaccessファイル
シンボリックで詰まったときにいろんなサイトを見まくってしまって、htaccessもわたわた書き換えてしまったのですが…書き換える必要なかったのかも(わかりません><)
前回デプロイした時のhtaccessファイルを丸コピで問題なかったのでとりあえずコードを貼っておきます。
※Laravelアプリ本体public内のhtaccessファイルのコードです※
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
公開ディレクトリをpublicにする
私はレンタルサーバーはmixhostを使っています。
コンパネのサブドメインから、ドキュメントルートを変更。
見づらいですが、、、やってることは単純に、公開ディレクトリをpublicに書き換えるだけです!
事情によりpublicをルートに設定すると都合が悪い・・・という場合、
プロジェクトルートに.htaccessファイルを設置しリダイレクトする、という方法があります!(私は事情により後からこちらに変更しました..)
LaravelのURLからpublicを消す
常時SSL化でhttpsへリダイレクト
ミドルウェアを使用することで、本番環境でのみhttpsにリダイレクトし、formの挙動に影響を与えないという書き方。
参考サイト様: Laravel5で.htaccessを使用せず常時SSL化対応する方法
ストレージへのパスを貼り直し
ストレージから読み込んでいるファイルがある場合はシンボリックリンクを貼り直す必要があります。
コードはこんな感じ(フルパスはmixhostの場合です)。
ln -s /home/アカウント名/public_html/アプリ名/インストールディレクトリ/storage/app/public /home/アカウント名/public_html/アプリインストールデディレクトリ/public/storage
参考: terateil
長いコードでわかりにくいですが、要は
ln -s アプリ本体のフルパス/public/storage 表示させたいディレクトリフルパス/public/storage
を書いています。
ちなみに、php artisan storage link をしたらなぜかphpのバージョンが足りてないとエラーになりました。。なんで。。
メールサーバー設定変更
開発と本番でメール送信の環境が違うので当たり前ですが、.envをサーバーに合わせて変更せねばなりません。
これは別記事で書きました
まとめ
だたっと羅列してしまいましたが、また何か思い出したら追記・修正します!