バックアップとリストア手順¶
本番環境およびステージング環境のデータ(データベース、アセットファイル)のバックアップ、および環境間のデータ転送手順について説明します。
データベース (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. バックアップ(ダンプ)の取得¶
本番環境のデータベースをローカルにダンプします。
- プロキシ接続の開始 別ターミナルを開き、以下のコマンドでポートフォワードを開始します。
# 例: 本番DB (ポート 5432 をローカルの 15432 にバインドする場合)
fly proxy 15432:5432 -a <db-app-name>
- 接続情報の確認 ユーザー名、パスワード、DB名は環境変数
DATABASE_URLから確認します。
fly ssh console -a ritsubi-ecommerce -C "env | grep DATABASE_URL"
形式: postgres://<username>:<password>@<host>:5432/<dbname>
- ダンプの実行 元のターミナルで
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. リストア(データの復元・転送)¶
ローカル環境へのリストア¶
取得したダンプファイルをローカル開発環境に適用します。
- 既存データのクリア
# apps/vendure-server ディレクトリで実行
pnpm run db:reset:clean
# または手動でスキーマを再作成
- リストア実行
# ローカルDB(通常ポート5432)へ流し込み
psql -h localhost -p 5432 -U postgres -d vendure < production_backup.sql
ステージング環境への転送¶
本番データをステージング環境へコピーする場合の手順です。
- ステージングDBへのプロキシ接続
fly proxy 15433:5432 -a <staging-db-app-name>
- リストア実行 注意: ステージング環境の既存データはすべて上書きされます。
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/assets は fly.toml の ASSET_STORAGE_LOCAL_UPLOAD_PATH
設定に依存します。
注意事項¶
- バージョンの整合性: データベースのスキーマ構造がコードベースと一致している必要があります。本番データを古いバージョンのコードで動いているステージング環境に入れるとエラーになる可能性があります。
- 機密情報: 本番データには実際の顧客個人情報が含まれます。ローカル環境やステージング環境に取り扱う際は、個人情報保護方針に従い、必要に応じてマスキング処理を行ってください。