2020/02/13 2020/02/14
さくらレンタルサーバーにLaravelをデプロイするのにPHPのバージョンをマルチドメイン毎に切り替えた話
Laravelで開発してるよ!
ウェブカツ卒業後、しばらくゆっくりしてから
お仕事探そうかなーなんて考えていたのに
卒業した途端にフルリモート開発案件を受けてしまった
・・いや、まさかこんなことになるとは。
何となくで応募したらとんとん拍子に話が決まって
ちょっとビビりつつも、まぁ引き受けたんだからやるよね!って感じで
開発を進めてました。
んで
年始に無事デプロイできるところまでこぎ着けたのですが
案の定というか、デプロイで禿げ上がるほど苦労しましたので
未来に現れるかも知れないうっかりさんのために、顛末を記録しておきます。
(何がうっかりかって?読み進めると分かるよ!!)
今回の環境
- PHP7.3
- Laravel 5.8
- さくらレンタルサーバー
サーバーの名前とかは以下で。
サーバー名: jibundayo.sakura.ne.jp
ドメイン名: testdayo.domain
デプロイ前日に予習はばっちり!
ちゃんとコピー用紙にディレクトリ構造もやり方もメモったし
これを見ながらやれば大丈夫!
・・の予定だったのですが
composer・・できないぞ・・・?
まずは予習しておいたとおり、sshでさくらのサーバーへログイン。
ssh jibundayo@jibundayo.sakura.ne.jp
早速「おい海外からだろお前、入れないぞ」の洗礼にあう。
うん、それはあるかなと思ってた(´・ω・`)
ということで、VPNかませてリトライし、無事ログイン。
SSH接続は、さくらサーバーの海外IPブロックフィルタを切っても
対応出来ないんですよね・・orz
で、git clone を使ってファイルを持ってくる。
今回は「/home/jibundayo/」下にそのまんま
Laravelフォルダ「testdayo」を持って来ました。
git clone https://github.com/jibundayo/testdayo.git
既に別のwebサービスが動いているサーバだったので
gitもcomposerも入っていて楽ちんですな(*´ω`*)
さてcomposerをインストール・・
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.
エラーが出たがな・・
まぁ一発でうまいこと行かないのは想定内、どれどれ
「お前さんPHP7.0.1で動くパッケージ入れようとしてるじゃろ
こっちはPHP5.4なんじゃ、どうやっても入らんっちゅーに」
Ω ΩΩ< な、なんだってー!!
確かめてみたら、確かにPHP5.4。
このサーバで動いているwebサービスがPHP5.4じゃないと動かないっぽい。
そりゃしゃあないね、んじゃLaravel入れるドメインのPHPだけ
7.3に切り替えちゃおうか・・
・・・
・・・・・
ん?
切り替えるの、どこからやるのん?(;´Д`)
そう、さくらのレンタルサーバーは
管理画面からあっさり
ドメイン毎にPHPを切り替える機能なぞ
付いていないのだ!!!
マジですか・・(´;ω;`)
普段ヘテムルやエックスサーバーばっかりだから
同じ調子でいけると思ってたがな・・
ちゃんと開発前に確認しておけですな!過去の自分よ!!
いやもう、今更言っても仕方ない、何とかやり方を探さねば!!
ここから半日
「どうやったらさくらサーバーで
ドメイン毎にPHPのバージョンを変えられるのか」
血眼になってググりまくり、試行錯誤する羽目になったのでした・・
PHPのバージョンを変える方法
あちこち見たけど、うちはこの方法でいけたってことで。
まずはLaravelプロジェクトのpublicフォルダへ移動。
cd /home/jibundayo/testdayo/public
ここに使いたいPHPはここにあるよ!というのを書いたファイルを作ります。
今回はPHP7.3ですのでphp73.cgiという名前にしました。
vi php73.cgi
このファイルに、以下のように記載します。
PHPのバージョンはそれぞれの環境に合わせて下さい。
(vimの使い方は調べてね)
#!/bin/sh
exec /usr/local/php/7.3/bin/php-cgi
編集が終わったら保存します。
んで、パーミッションを705に変更。
chmod 705 php73.cgi
次に、publicフォルダ内に「.htaccess」が既にいると思うので
こやつの一番上の行に、以下の2行を記載します。
Action myphp-script /php73.cgi
AddHandler myphp-script .php .html
これ、同じフォルダ内に php73.cgi と.htaccess を置いてあるので
/php73.cgi でいいんですが、別のフォルダに置いてあるときは
書き方が変わるので注意です。
これで、このLaravelプロジェクトのpublicフォルダ以下は
PHP7.3で動くようになりました。
composer installリトライ!・・まだいかんのかい!!
で、気を取り直してcomposer installを・・
「いや、やからPHP7.0.1以上がいるって言うてるやんけ!!」
まだ怒られるんですが(´;ω;`)
今回は悩んだ挙げ句、FTPを使ってアップロードするという
暴挙に出てしまいました・・が
実はこの書き方でインストール出来ることを後で知ります。
/usr/local/php/7.3/bin/php composer.phar install
ちゃんとPHPのバージョン指定せないかんのね・・
もうちょっと早く見つけたかったよ!
シンボリックリンクを貼ろう!
さくらのサーバーで、先にこのドメインの対象フォルダを
/home/jibundayo/www/testdayo
に設定しておきます。
で、Laravelのプロジェクトファイルはと言うと
/home/jibundayo/testdayo //ここにいる!
ここに置いてあります。
というのも、www以下に置くのはセキュリティ上あまりよろしくないらしい。
なので、シンボリックリンクというのを貼って
testdayo.domainにアクセス→/home/jibundayo/www/testdayo/を見に行く→おおリンクがあるぞ、/home/jibundayo/testdayo/public を見に行くんだな!
となるようにします。
Macで言うところのエイリアス
windowsで言うところのショートカットですな。
ln -s /home/jibundayo/testdayo/public /home/jibundayo/www/testdayo
この1行を打ち込むだけでOKです。
.htaccessを書き換える
「さっき書き換えたやん!」と突っ込むなかれ。
あれは「PHP7.3が使える様になった」だけに過ぎぬ。
Laravelをさくらサーバーで動かすときには、.htaccessの
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
こやつらを削除ないしコメントアウトする必要があります。
index.phpは書き換えなくてOK
今回の方法だと、index.phpの
モジュール読み込み先を変更する必要はありません。
触らずそっとしておいて問題なし。
.envを書き直す
これは本番用に合わせて書き直して下さい。
APP_NAME=testdayo
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=http://testdayo.domain
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=(作成したデータベースの名前)
DB_USERNAME=(作成したデータベースユーザの名前、データベース名と一緒)
DB_PASSWORD=(作成したデータベースのパスワード)
さあ呪文を唱えよう!
ここまで来たらもう一息。
Laravelで使ういつもの呪文を唱えましょう・・なのですが
今回PHPのバージョンを指定して唱えないといけないので、それだけ注意。
//プロジェクトフォルダへ移動
cd /home/jibundayo/testdayo
// APP KEYを作る
/usr/local/php/7.3/bin/php artisan key:generate
// マイグレーションと一緒にシーディングもやっちゃう
/usr/local/php/7.3/bin/php artisan migrate:fresh --seed
//画像置き場(storage)にシンボリックリンクを貼る
/usr/local/php/7.3/bin/php artisan storage:link
今回の反省
開発始める前に本番環境の確認大事!絶対!!
・・まぁ、一つ勉強になったってことで・・(;´Д`)
もうこれでさくらサーバーへのデプロイは怖くない!多分!!w
参考文献
いつもながらQiita様にはお世話になっております・・
authorの皆様ありがとうございます。