コンテンツにスキップ

バックアップとリストア手順

本番環境およびステージング環境のデータ(データベース、アセットファイル)のバックアップ、および環境間のデータ転送手順について説明します。

データベース (PostgreSQL)

本プロジェクトでは Fly.io 上の Managed Postgres を使用しています。直接の外部接続は許可されていないため、fly proxy コマンドを使用してローカルマシンから接続します。

前提条件

  • flyctl (Fly CLI) がインストールされ、ログイン済みであること
  • postgresql-client (pg_dump, psql) がローカル環境にインストールされていること

1. データベースアプリ名の確認

まず、Postgresデータベースのアプリ名を特定します。

fly postgres list

出力例:

NAME                            OWNER   STATUS      LATEST DEPLOY
ritsubi-ecommerce-db           personal deployed    2m ago
ritsubi-ecommerce-staging-db   personal deployed    2m ago

※ アプリ名のサフィックスが -db となっているのが一般的です。

2. バックアップ(ダンプ)の取得

本番環境のデータベースをローカルにダンプします。

  1. プロキシ接続の開始 別ターミナルを開き、以下のコマンドでポートフォワードを開始します。
# 例: 本番DB (ポート 5432 をローカルの 15432 にバインドする場合)
fly proxy 15432:5432 -a <db-app-name>
  1. 接続情報の確認 ユーザー名、パスワード、DB名は環境変数 DATABASE_URL から確認します。
fly ssh console -a ritsubi-ecommerce -C "env | grep DATABASE_URL"

形式: postgres://<username>:<password>@<host>:5432/<dbname>

  1. ダンプの実行 元のターミナルで pg_dump を実行します。
# ダンプ実行
pg_dump -h localhost -p 15432 -U <username> -d <dbname> --clean --if-exists --no-owner --no-privileges > production_backup.sql

--clean --if-exists : リストア時に既存オブジェクトを削除します。※ --no-owner --no-privileges : ユーザー権限周りのエラーを防ぐため推奨します。

3. リストア(データの復元・転送)

ローカル環境へのリストア

取得したダンプファイルをローカル開発環境に適用します。

  1. 既存データのクリア
# apps/vendure-server ディレクトリで実行
pnpm run db:reset:clean
# または手動でスキーマを再作成
  1. リストア実行
# ローカルDB(通常ポート5432)へ流し込み
psql -h localhost -p 5432 -U postgres -d vendure < production_backup.sql

ステージング環境への転送

本番データをステージング環境へコピーする場合の手順です。

  1. ステージングDBへのプロキシ接続
fly proxy 15433:5432 -a <staging-db-app-name>
  1. リストア実行 注意: ステージング環境の既存データはすべて上書きされます。
psql -h localhost -p 15433 -U <staging-user> -d <staging-dbname> < production_backup.sql

アセットファイル (画像・PDF等)

アセットファイルの保存先設定 (ASSET_STORAGE_STRATEGY) に依存します。

S3 (MinIO) を使用している場合

S3互換ストレージを使用している場合、データは外部バケットに保存されているため、アプリサーバーの操作は不要です。バケット間のデータコピーには rclone や AWS CLI を使用してください。

# AWS CLI の例 (S3 Sync)
aws s3 sync s3://source-bucket s3://target-bucket

ローカルストレージ (Fly.io Volume) を使用している場合

Fly.io のローカルストレージを使用している場合、fly ssh sftp コマンドでファイルを転送します。

ファイルのダウンロード(バックアップ)

# 本番環境のアセットディレクトリ (/app/data/assets) をローカルにコピー
fly ssh sftp get /app/data/assets ./local_backup/assets -a ritsubi-ecommerce

ファイルのアップロード(リストア)

# ローカルのアセットをステージング環境へアップロード
fly ssh sftp put ./local_backup/assets /app/data/assets -a ritsubi-ecommerce-staging

※ パス /app/data/assetsfly.tomlASSET_STORAGE_LOCAL_UPLOAD_PATH 設定に依存します。


注意事項

  • バージョンの整合性: データベースのスキーマ構造がコードベースと一致している必要があります。本番データを古いバージョンのコードで動いているステージング環境に入れるとエラーになる可能性があります。
  • 機密情報: 本番データには実際の顧客個人情報が含まれます。ローカル環境やステージング環境に取り扱う際は、個人情報保護方針に従い、必要に応じてマスキング処理を行ってください。