Laravel

さくらレンタルサーバーに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の皆様ありがとうございます。

コメントはこちらから

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください