PHP8.3でLaravelを動かそうと思い、Vercelを選定しました。
今回はその手順をお届けします。
もちろんAPIルートも対応してます。
経緯
もともと、Drupalアプリを ec2 に乗せていました。
無料利用枠が終了して想像よりコストがかかって大慌て...。
aws無料利用枠のありがたさをしみじみと感じました。
1年間もあったのにコストかからない方法を覚えることはできませんでした...。
コストを抑えて、Symfonyベースで動かせるアプリケーションをデプロイしたい、というのが今回作業に至った経緯です。
なぜ Vercel?
個人的に気に入ってる機能はこちら。
- 自動デプロイ: GitHub連携し、コードをプッシュするだけで自動的にビルドとデプロイが実行可能。
- ホスティング: ドメイン管理、環境変数のGUI設定、アナリティクスが使いやすい。
- サーバーレス機能: サーバーレス関数をサポート。バックエンドの機能を簡単に追加可能。
Vercelの記事以前書いてます。よければ。
VercelでPHP動くの?
動かせる、ってAIが教えてくれたので今回いろいろ調査してみました。
海外のエンジニアでちょこちょこやってる人がいるみたい。
いろんな方のGithubリポジトリを見て、設定を精査しましたので今回ご紹介させていただきます。
とりあえずコード見せろよ。という方はこちら
設定方法
今回、Vercelのリポジトリセットアップについての紹介は省かせていただきます。
正直なところ、あまり説明しなくても誰でも簡単使えるよう洗練されたサービスです。
(僕もはじめて使ったときそんな手順調べてない。)
それでも調べないと不安だよ。って方はこちら。
#001. Laravelインストール
composer create-project laravel/laravel
#002. Vercel接続設定
composer require revolution/laravel-vercel-installer --dev
php artisan vercel:install
#003. PHPランタイム設定
vercel.jsonを修正。
{
"version": 2,
"framework": null,
"functions": {
"api/index.php": {
"runtime": "vercel-php@0.7.3"
}
},
"routes": [
{
"src": "/(.*)",
"dest": "/api/index.php"
}
],
"env": {
"APP_NAME": "Laravel Vercel",
"APP_DEBUG": "false",
"APP_URL": "https://xxxx.vercel.app",
"APP_CONFIG_CACHE": "/tmp/config.php",
"APP_EVENTS_CACHE": "/tmp/events.php",
"APP_PACKAGES_CACHE": "/tmp/packages.php",
"APP_ROUTES_CACHE": "/tmp/routes.php",
"APP_SERVICES_CACHE": "/tmp/services.php",
"CACHE_DRIVER": "array",
"CACHE_STORE": "array",
"LOG_CHANNEL": "stderr",
"SESSION_DRIVER": "cookie",
"VIEW_COMPILED_PATH": "/tmp"
}
}
※ vercel-php
のバージョンは、利用したいPHPバージョンに依存します。
今回はバージョンだとPHP8.3に対応させています。
#005. /dist
ディレクトリを作成
デプロイ時の出力ファイル置き場ですかね。ビルドファイル置き場ですかね。
ここの理解浅くて申し訳ありません。分かる方コメントください。
ルート直下にdist/.gitkeep
を作成します。
#006. artisan
コマンドでAPI設定
php artisan install:api
以下、2点変更差分が入ればOK.
-
routes/api.php
が作成される -
bootstrap/app.php
にapi
ルートが設定される
#007. APIの Prefix 設定
bootstrap/app.php
に一行追加します。
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
+ apiPrefix: 'data',
)
->withMiddleware(function (Middleware $middleware) {
//
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
今回は、Prefix に data
を利用します。
URLイメージ: /data/user
, /data/product/{id}
, /data/log
Vercelで設定
こちらの設定は要点のみ。
- Githubでソースコードを管理している方はリポジトリインポートをしてください。
- 環境変数の設定を行います。
APP_KEY の設定は必須です。
ビルドが完了したらアクセスして確認するのみ。
参考
文中でもしれっと紹介しましたがリポジトリ用意してます。
よければ参考にしてください。
他にもPoCする際に私が参考にしたリポジトリ / 記事を記載しておきます。
まとめ
今回は、VercelでLaravelアプリを動かす方法について紹介しました。
想像以上に簡単ですのでぜひ。