九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
さてさて、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
のオプションについては以下のページがわかりやすかったです。
【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を再現する
サーバー移転で忘れがちなのがcrontab
(cron
)を移行することです。
cron
はタイマー実行する機能で、通常のレンタルサーバーなら追加料金なしで使えるようになっています。
※なおsystemd
の方がいろいろできてベターですが、通常のレンタルサーバーで使えるところはあまりないかもしれません。
設定はについては、各レンタルサーバーによって違います。
【Laravel移転】ドメイン接続を変更する
旧サーバーへ向かうようになっていたドメイン設定を変更します。
これもドメインを提供しているサイトやレンタルサーバーによって違うので、個別でのチェックが必要です。
なお、ドメイン設定が完了しても旧サーバーのメンテナンスはそのまま放置しておいて問題ありません。
なぜなら、新しいドメイン情報は少しずつ新しいサーバーに伝播していくからです。新サーバへのアクセスが少しずつ増えていくイメージですね。
これで最小構成の移転は完了です!
【Laravel移転】を検討している企業様へのご提案
もしLaravel
のシステムにアクセスが増え、スピードが落ちたりエラーが出る場合、サーバー移転での解決が期待できます。
もしそういった困りごとがあるようでしたら、いつでもお気軽にご相談ください。お待ちしております。😊✨
おわりに
今回はいつもと違ってLaravel
の移転をテーマにしてみました。
アクセス増加による移転は嬉しい反面、手間がかかります。
最初から高スペックな環境にするべきですが、個人サイトだと出費があるのでバランスが難しいところですね。
また、今回はVPS
から通常のレンタルサーバーへ移転しましたが、正直なところ何も不満はありませんでした。
昔はVPS
でしかできないことでも、今はレンタルサーバーで使えることが多いからです(今回は形態素解析のmecab
もインストールしました)。
composer
もバージョン2で使えるようですし、自分でインストールもできます。そう考えるとLaravel
ならレンタルサーバーで問題ないかもしれませんね。
Fast API
などPython
やGo
とかを使う場合はVPS
一択でしょうが、ビジネスにはスピードが重要と考えると、VPS
を作るの時間もカットできるに越したことはありません。
私が経営者ならLaravel + Vue
を使って「誰が入ってもすぐ開発に参加できる環境」を採用します。
みなさんの意見はどうでしょうか。
ぜひいろいろ考えてみてくださいね。
ではでは〜❗
「おかげで504は出なくなり
アクセス上げ上げ
のようです!」