🥬

fly.io ことはじめ(laravel + postgres)

2022/08/14に公開

fly.io で laravel + postgres ためにやったこと

flyctl 系のコマンドを抜粋。

$ brew install flyctl
$ flyctl auth login
# laravel root にて(まだデプロイしない)
$ flyctl launch
$ flyctl postgres create
# ドキュメントからオプションが変わってた
$ flyctl postgres attach <postgres-app-name> -a <app-name>
# attach した情報を DSN から抜き出す
$ flyctl secrets set \
  DB_HOST=<postgres host> \
  DB_DATABASE=<db name> \
  DB_USERNAME=<db username> \
  DB_PASSWORD=<db password>

Dockerfile の修正

RUN apt-get update && apt-get install -y \
    git curl zip unzip rsync ca-certificates vim htop cron \
    && apt-get install php-pgsql -y \  # << 追加
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

Docker image ビルド & デプロイ

# Dockerfile のビルドが通ることの確認
$ docker build .
# ここでデプロイ
$ flyctl deploy 
# flyctl ssh console して ssh
$ bash # (お好みで)
# tinker で sql 投げて確認でも OK
$ cd /var/www/html && php artisan migrate

ハマりどころ

  • laravel には package.json があること前提になっている
  • つまり、セットアップに vue や bootstrap 等いれていないとビルドでコケる
  • vite.config.js が参照されるので resource/{js,css}/app.{js,css} を置く
    • Dockerfile を修正するでもいいかもしれない
# 60行目あたり
# Use yarn or npm depending on what type of
# lock file we might find. Defaults to
# NPM if no lock file is found.
# Note: We run "production" for Mix and "build" for Vite
# RUN if [ -f "vite.config.js" ]; then \
#         ASSET_CMD="build"; \
#     else \
#         ASSET_CMD="production"; \
#     fi; \
#     if [ -f "yarn.lock" ]; then \
#         yarn install --frozen-lockfile; \
#         yarn $ASSET_CMD; \
#     elif [ -f "package-lock.json" ]; then \
#         npm ci --no-audit; \
#         npm run $ASSET_CMD; \
#     else \
#         npm install; \
#         npm run $ASSET_CMD; \
#     fi;

この記事を書いた目的

Next.js でアプリケーションを開発していて、バックエンドは laravel(php) で実装していたが、
デプロイ環境を調べていたら fly.io ってのがでてきて、これいいじゃん!

となってデプロイをトライアルしていたら週末を潰してしまったので、
最近の PaaS に詳しくない人向け(自分含む)のために記録を残しておきます。

Discussion