Laravel Forgeが便利そうなので、試してみたいと思います。ローカル環境は、Windows11でターミナルはPowerShellです。Laravel HerdのPROに課金をしてみましたので、これを使ってローカル開発環境を作っています。
Laravel Herdでプロジェクトを新規作成
まずは下記を作成しました。
DB設定
上記作成時点では、.envのDB設定はSQLiteでした。今回はPostgreSQLを使いますので、データベースの作成は手動で行う必要があります。
データベース作成
userは postgres
で、パスワードはなしで、ホストは localhost:5432
で接続できます。
接続して、hoge
というデータベースを作成しました。
.envのDB設定をpostgresにして、migrateを実行します。
DB_CONNECTION=pgsql DB_HOST=localhost DB_PORT=5432 DB_DATABASE=hoge DB_USERNAME=postgres DB_PASSWORD=
> php artisan migrate
この状態でユーザ登録をしたら成功しましたが、ダッシュボード表示の際に下記エラーが発生しました。
Unhandled match case '60'
これと同じっぽいです。新しいJetstreamのちょっとした不具合かもですね。
下記のようにしたらエラーが消えました。
resources/views/components/dropdown.blade.php
$width = match ($width) { '48' => 'w-48', '60' => 'w-60', '80' => 'w-80', '100' => 'w-100', default => 'w-48', };
Forgeを使ってデプロイしてみる
早速ですがデプロイしてみましょう。DigitalOceanを使います。Forgeの"Create Server"で、下記のような内容で作成します。
作成できたら、サイトの設定で、下記のようにリポジトリとブランチを設定してインストールボタンを押してみます。
やたら早くインストールが終わりましたが、Public IPにアクセスすると、もう画面が表示されました。 しかし、ログイン画面等は500エラーが出るので、設定が全然足りないようです。 いやー今Foregeのサイトの管理画面を見てますけど、テンションが上がりますね。
サーバの中を確認してみる
DigitalOceanのターミナルで確認したところ、/home/forge/default
内にLaravelアプリが入っていました。.envも自動生成されて基本的にはサーバ環境に合わせて調整してくれています。
ただ、node_modulesはないようですね。あと、 public/build
もないですね。500エラーはログに下記がありましたので、npm installして、npm run buildをすればいけそうです。これらは手動でビルドスクリプトに設定する必要があるのかなと思いました。
Vite manifest not found at: /home/forge/default/public/build/manifest.json
デプロイスクリプトを修正してみる
これがデプロイ時のスクリプトのようで、最後にnpm install && npm run buildを追加してみました。
cd /home/forge/default git pull origin $FORGE_SITE_BRANCH $FORGE_COMPOSER install --no-dev --no-interaction --prefer-dist --optimize-autoloader ( flock -w 10 9 || exit 1 echo 'Restarting FPM...'; sudo -S service $FORGE_PHP_FPM reload ) 9>/tmp/fpmlock if [ -f artisan ]; then $FORGE_PHP artisan migrate --force fi npm install npm run build
デプロイの処理が非常にシンプルだから、というのが大きいのかなとは思いますが、デプロイが超早いですね。。 これでエラーがでなくなりました。
メール送信機能を設定する
私はBackformというヘッドレスフォームサービスを作るときは、Amazon SESを使いました。大量送信の可能性を考慮すると、Amazon SESがかなり安いと思ったからです。 しかし大半の業務システムなどは、大量送信はあまり考える必要はありませんので、何でもよいと思います。 お客様ではAWSは全然使ってないよ!という方も多いですので、そういう場合は、Mailgun等の方が設定しやすいかもしれません。
それにしても、ちょっとしたメール送信の場合、上記どれもがややめんどうなのですが、何か良い方法はないのですかね?? 例えばドメインさえも登録不要な場合って、APIキーだけで送信出来たりしないのですかね??
Larael11のドキュメントに、Postmarkというのがあって、これはドメインの登録・認証とかが不要だそうです。これはよさそうかもと思いました。
Postmarkのtokenを取得する
Postmarkでアカウントを登録し、ログインします
サーバを選択する
"API Tokens"をクリックする
Tokenをクリップボードにコピーする
以上で、一応メール送信ができるようになります。 実際には、Postmarkでアカウントの承認を終わらせないと、FROMアドレスと同じドメイン宛にしか送信できないという制約があるようです。 今回はテストなので、このまま進めます。
Postmarkを使えるようにする
composerでライブラリを追加します。
composer require symfony/postmark-mailer symfony/http-client
.envに下記を設定します。
POSTMARK_TOKEN
は上記でクリップボードにコピーしたトークンです。
FROM_ADDRESSは、実際のメールアドレスに変更します。
上記のとおり、Postmarkのアカウント承認がまだの場合は、FROMとTOで同じドメインである必要がありますので、送りたいメールアドレスに合わせてFROMのアドレスも設定する必要があります。
MAIL_MAILER=postmark MAIL_FROM_ADDRESS="hello@example.com" POSTMARK_TOKEN=11111111-1111-1111-1111-111111111111
メールを送信してみる
送信成功しました!しかし、まあ迷惑メールフォルダに入りますし、警告は出るしで、あくまでテスト用ですね。(当然ですが、Postmarkでアカウント承認をして、ドメインの認証をすれば、回避できるはずです。)
でもこれは超楽でよいですね。今度ドメインの認証もやってみます。