【Laravel】最小構成でサーバー移転する5ステップ

こんにちは。フリーランス・コンサルタント&エンジニアの 九保すこひ です。

さてさて、40,000件のプレスリリースを掲載するぷれりり・プレスリリースという個人サイトを運営しています。

ほぼボランティアですが、毎日5〜10件の掲載依頼があるんで「喜ぶ人がいるなら」ということで続けてきました。

ところが、掲載件数が増えたら「アレ」が頻発するようになりました。

504 Gateway Timeout

そうです!
サーバー負荷が大きくて処理が追いつかないんです。

仕方ないので、低スペックVPSから緊急で移転することにしました。

ただ、移転といってもやることは多いですよね。

  • ソースコードの移転
  • 画像
  • データベース
  • crontab
  • ドメイン

ひとつでも不備があるとサイトが正常に動かなくなってしまうわけで、神経を使う作業でした。

そこで❗

今回は以下のような方(と将来の自分)に向けて記事をお届けします。

  • Laravelのシステムをこれから移転したい
  • Laravelの移転はしたことあるけど忘れちゃった
  • Laravelを最小構成で移転したい

ぜひ最後まで読んでくださいね。😊✨

「今年も夏の
青春18きっぷが
発売に!出かけよう♪」

開発環境:Laravel 10.x

【Laravel移転】ソースコードを設置する

Gitは開発者なら誰でも知っていると思いますが、簡単にソースコードの管理ができるスグレモノです。

ソースコードのコピーはGitで簡単にできますが、1点問題があります。

それは、旧サーバーに投稿フォームがあるので「メンテナンス中です」と表示しておかないと新しいデータが追加になってしまうんですね。

とはいえ、他のページは通常通りアクセスさせたいので、Gitを使って対処することにしました。

1:メンテナンス専用のブランチをつくる

ブランチというのはGit内にパラレルワールドをつくるような機能です。

いつでも自由に移動でき、「このブランチではログイン機能だけをつくる」みたいな使い方をします。

以下のコマンドでtransferというメンテナンス表示の専用ブランチをつくってください。

git checkout -b transfer

そして、今回はフォームに「メンテナンス中です」というテキストを表示し、データ送信できなくしました。

※細かく言うとコントローラーでも処理をとめるようにしました。

2:メンテナンス専用ブランチをプッシュする

Gitをプッシュするというのは、GitHubのようなリ「モートサイト」に変更をアップロードすることです。

以下のコマンドを実行してください。

git add .
git commit -m "Added maintenance mode"
git push origin HEAD

ちなみに、HEADは「現在のブランチの」という意味。汎用的に使えて便利ですよ👍

これで変更がGitHubにアップされました。

3:SSHを使ってメンテナンス表示する

SSHとはリモートコントロールでレンタルサーバーを操作する機能です。

ここからはSSHで旧サーバーにログインして作業します。

まず現在Laravelが展開されているフォルダにcdコマンドで移動していきます。例えば以下のようにしてください。

cd /home/html/your_project

移動したら、GitHubにアップした最新ソースコードを「降ろして」きましょう。

git fetch

メンテナンス専用ブランチに移動します。

git checkout transfer
これで最新のtransferブランチになり、フォームがメンテンナンス中になっているはずです(git fetchを省略してもいい場合もあるようです)

【Laravel移転】画像を移動させる

今回のサイトで一番めんどうだったのが画像の移動です。40,000件も登録があるので、その分だけ以下の画像が存在しているからです。

  • アイキャッチ画像
  • サムネイル画像

しかも、スパム化しないようにメールアドレスを画像化してるので、以下も移動が必要でした。

  • メールアドレス画像

※なお、次の項目「データベースを複製する」も一緒に実行するとダウンロード&アップロードの手間が省けます。

【追記:2024/07/01】
Xでshirocakeさんから「rsyncコマンドを使うと楽にいけますよ!」と教えていただきました。そこで「画像を移動させる:rsync編」を追記させていただきました。どうもありがとうございました!😊✨

1:画像を高速で圧縮&ひとまとめにする

移転するときは以下の条件をつけました。

  • できるだけファイル容量を圧縮する
  • できるだけ高速に1ファイル化する
  • 展開したらそのままフォルダ化する

これを実現するために圧縮率と高速動作が期待できるtar.gzを使うことにしました。

また、展開したらフォルダの移動などは不要にしたいのでそれぞれのフォルダを1ファイルにします。

例えば以下のようなコマンドです。

tar cvfz images.tar.gz images/

今回の場合だとtar.gzは3ファイルになります。

2:ローカルにダウンロードする

旧サーバーには3つのtar.gzファイルがあるわけですが、一旦これらをローカル環境に落としてきます。

私の場合はphpstormのリモートホスト機能を使ってダウンロードしましたが、FilezillaのようなSFTP接続ができるファイル転送ソフトを使ってもいいかもしれません。

📝 本家サイト

3:新サーバーへアップする

これも私はphpstromを使いました。
Filezillaでも問題ありませんが、アップロードする場所は気をつけてください。

例えば、public/images/に設置したい場合はpublic直下にアップロードします。

そして、以下のコマンドで展開してください。

tar xvzf images.tar.gz

これでpublic/images/が作成され、フォルダの移動は一切不要にできます。

【Laravel移転】画像を移動させる:rsync編

shirocakeさんにXで教わった方法です!😊

もしSSHで接続ができるなら、rsyncコマンドを使うとファイルのサーバー移転が楽にできます。

rsync -avz -e "ssh -p (ポート番号)(コピー元) (コピー先)

つまり、例で言うとこうなります。

rsync -avz -e "ssh -p 2222" /your/from/folder user@example.com:/your/to/folder

-eオプションを使ってSSH接続しているので、-iを使って秘密鍵をセットしたりもできるわけですね。

shirocakeさん、貴重な情報ありがとうございました!😊✨

rsyncのオプションについては以下のページがわかりやすかったです。

📝 rsyncの重要コマンド

【Laravel移転】データベースを複製する

MySQLを使っていたので、簡単にデータをエクスポートできるmysqldumpというコマンドを使います。

1:mysqldumpでデータベースをデータをファイル化する

例えば以下の条件をみてみましょう。

ユーザー名 root
ホスト名 127.0.0.1
データベース名 your_project
ファイル名 your_project_20240609_1.sql

この場合、コマンドは以下のようになります。

mysqldump -u root -h 127.0.0.1 -p your_project > your_project_20240609_1.sql

データベースにアクセスするためのパスワードを聞かれるので入力します。

※慣れていない人は戸惑いますが、パスワード入力は何も表示されていないようで実はちゃんと入力できています。コピペもできますよ!

2:ローカルへダウンロードする

画像のときと同じようにローカルへダウンロードします。

3:新サーバーへアップロード

こちらも画像のときと同じように新サーバーへアップロードします。

4:新サーバーのMySQLにデータベースをつくる

これからデータを入れるデータベースをつくります。
なお、この作業はサーバーによって違いますが、PhpMyAdminが使える場合はそこから作成してください。

5:ファイルからデータを新しいデータベースへ入れる

コマンドでデータを入れましょう。
条件は次のとおりです。

ユーザー名 root
ホスト名 127.0.0.1
データベース名 your_project
ファイル名 your_project_20240609_1.sql

コマンドは以下になります。

mysql -u root -h 127.0.0.1 -p < prerele_20240609_1.sql

パスワードを聞かれるので入力するとインポートが完了します。

【Laravel移転】crontabを再現する

サーバー移転で忘れがちなのがcrontabcron)を移行することです。

cronはタイマー実行する機能で、通常のレンタルサーバーなら追加料金なしで使えるようになっています。

※なおsystemdの方がいろいろできてベターですが、通常のレンタルサーバーで使えるところはあまりないかもしれません。

設定はについては、各レンタルサーバーによって違います。

【Laravel移転】ドメイン接続を変更する

旧サーバーへ向かうようになっていたドメイン設定を変更します。

これもドメインを提供しているサイトやレンタルサーバーによって違うので、個別でのチェックが必要です。

なお、ドメイン設定が完了しても旧サーバーのメンテナンスはそのまま放置しておいて問題ありません。

なぜなら、新しいドメイン情報は少しずつ新しいサーバーに伝播していくからです。新サーバへのアクセスが少しずつ増えていくイメージですね。

これで最小構成の移転は完了です!

【Laravel移転】を検討している企業様へのご提案

もしLaravelのシステムにアクセスが増え、スピードが落ちたりエラーが出る場合、サーバー移転での解決が期待できます。

もしそういった困りごとがあるようでしたら、いつでもお気軽にご相談ください。お待ちしております。😊✨

おわりに

今回はいつもと違ってLaravelの移転をテーマにしてみました。

アクセス増加による移転は嬉しい反面、手間がかかります。
最初から高スペックな環境にするべきですが、個人サイトだと出費があるのでバランスが難しいところですね。

また、今回はVPSから通常のレンタルサーバーへ移転しましたが、正直なところ何も不満はありませんでした。

昔はVPSでしかできないことでも、今はレンタルサーバーで使えることが多いからです(今回は形態素解析のmecabもインストールしました)。

composerもバージョン2で使えるようですし、自分でインストールもできます。そう考えるとLaravelならレンタルサーバーで問題ないかもしれませんね。

Fast APIなどPythonGoとかを使う場合はVPS一択でしょうが、ビジネスにはスピードが重要と考えると、VPSを作るの時間もカットできるに越したことはありません。

私が経営者ならLaravel + Vueを使って「誰が入ってもすぐ開発に参加できる環境」を採用します。

みなさんの意見はどうでしょうか。
ぜひいろいろ考えてみてくださいね。

ではでは〜❗

「おかげで504は出なくなり
アクセス上げ上げ
のようです!」

このエントリーをはてなブックマークに追加       follow us in feedly  
開発のご依頼お待ちしております
開発のご依頼はこちらから: お問い合わせ
どうぞよろしくお願いいたします! by 九保すこひ