0
0

【備忘録】fly.ioでLaravelデプロイメント:シンボリックリンクが機能しない問題の解決&マウント方法

Posted at

fly.ioでLaravelデプロイメント:シンボリックリンクが機能しない問題の解決

laravelのWEBアプリケーションで画像のアップロード機能などを搭載している場合、一般的にはstorageフォルダ下に保存すると思います。
ローカル環境であれば、アップロードされた画像などを参照する際には以下のようなシンボリックを設定を行うことが多いですが、fly.ioだと結構詰まるポイントがたくさんあったので共有したいと思います。

php artisan storage:link

fly.ioとは

一部無料でアプリケーションをデプロイできる。
すげー

シンボリックを設定する

fly launchを行うとルートディレクトリ下にDockerfileが生成されると思います。
そこにRUN php artisan storage:linkを追加して記述してください。
これで、シンボリックが設定されます。
fly ssh consoleでssh接続をしコマンドを打つ方法もありますが、VMがアイドル状態になると自動的に停止され、何か新しいリクエストが送られるとVMが自動的に再起動されるためシンボリック情報を逐一設定するはめになるので、コンテナが作られるのと同時にシンボリックを設定してもらうよう記述しています。

# なんか色々書いてある

RUN php artisan storage:link

EXPOSE 8080

マウントする

シンボリックを設定したからといって、一喜一憂してはいけません。
先ほどの理由で、VMが再起動の行われるとアップロードされた画像が消されてしまいます。
そのため、時間が経った後に自分の作ったwebサイトを閲覧すると画像が正しく読み込まれません。
(404エラーが返ります。)

手順1:regionの確認

以下のコマンドを入力して、machine processの数とregionを確認してください。
日本であればregionはnrtで設定されてることが多いと思います、また、machine processの数も2個がデフォルトっぽいです。

コマンド

fly status

出力例:下の例だとregionはams


Machines
PROCESS ID              VERSION REGION  STATE   ROLE    CHECKS  LAST UPDATED         
app     5683945bd46448  1       ams     started                 2023-10-03T09:54:04Z
app     e82d922f010908  1       ams     started                 2023-10-03T09:54:25Z

手順2:volumeの追加

先ほど確認したregionとマシンプロセスの数を元に以下のコマンドを入力してください。

fly volumes create storage_vol --region region名 --count マシンプロセスの数

手順3:fly.tomlの編集

下の文を追加してください。

fly.toml
[mounts]
  source="storage_vol"
  destination="/var/www/html/storage"

手順4:設定ファイルの追加

シェルスクリプトを作成します。
ファイルを作成した後、以下の記述を書き込んでください。
先頭の1をファイル名に追加しないと、cache.shが先に実行されてしまってうまくいかないっぽいので気をつけてください。

touch .fly/scripts/1_storage_init.sh
.fly/config/1_storage_init.sh
FOLDER=/var/www/html/storage/app
if [ ! -d "$FOLDER" ]; then
    echo "$FOLDER is not a directory, copying storage_ content to storage"
    cp -r /var/www/html/storage_/. /var/www/html/storage
    echo "deleting storage_..."
    rm -rf /var/www/html/storage_
fi

手順5:デプロイ

ここまできたらデプロイしてください。うまくいけばちゃんと機能するはずです。

fly deploy

よくあるエラー

手順2にてregionなどの設定を適切に行わないと、watch your deployment at アプリケーションのURLの画面でデプロイが終わりません。作成したボリュームはダッシュボード上でも参照できるのできちんと確認しましょう。

おわりに

参考にした記事を置いておきます。
まだ記事を書くことに慣れていませんので、誤字やまちがった情報などがあれば教えていただければ幸いです。

マウント方法【公式ドキュメント】:https://fly.io/docs/laravel/the-basics/laravel-volume-storage/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0