Herokuで動かしているStrapiをRaspberry Piに移行するプロジェクト。
前回 → 【Strapi on Raspberry Pi】Raspberry Pi セットアップ (4)
HerokuのDB データダウンロード
Heroku Postgresのデータを取得する。Herokuにはちゃんとバックアップ用のコマンドが用意されているので、CLIで実施する。
# Herokuでバックアップを作成
HEROKU_APP={Herokuアプリ名}
heroku pg:backups:capture --app "${HEROKU_APP}"
# バックアップをダウンロード
BACKUP_URL=$(heroku pg:backups:url --app "${HEROKU_APP}")
curl -o "${DUMP_FILE}" "${BACKUP_URL}"
# ラズパイにコピー
scp "${DUMP_FILE}" "${PI_USER}@${PI_HOST}:~/${DUMP_FILE}"
Docker側のDBにインポート
まずDBコンテナだけ先に起動する。
DBコンテナの設定だけ記載したdocker-compose.yamlファイルを用意し
services:
db:
image: postgres:15
platform: linux/arm64
container_name: ******
restart: unless-stopped
env_file:
- ../env/db.env
ports:
- 5432:5432
volumes:
- pg-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
volumes:
pg-data:
DBコンテナを起動。
docker compose -f compose.db.yml up -d
バックアップファイルをコンテナのDBにインポートする。
# DBの起動を確認
docker exec "${CONTAINER_NAME}" psql -U "${DB_USER}" -d postgres -c "
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '${DB_NAME}' AND pid <> pg_backend_pid();
DROP DATABASE IF EXISTS ${DB_NAME};
CREATE DATABASE ${DB_NAME} OWNER ${DB_USER};
"
# 一応既存データをクリア
docker exec "${CONTAINER_NAME}" psql -U "${DB_USER}" -d postgres -c "
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '${DB_NAME}' AND pid <> pg_backend_pid();
DROP DATABASE IF EXISTS ${DB_NAME};
CREATE DATABASE ${DB_NAME} OWNER ${DB_USER};
"
# バックアップファイルからデータをインポート
docker exec -i "${CONTAINER_NAME}" pg_restore \
-U "${DB_USER}" \
-d "${DB_NAME}" \
--no-acl \
--no-owner \
--verbose \
< "${DUMP_FILE}"
テーブル一覧を出力。
$ docker exec -it noura-release-note-strapi-db psql -U strapi -d strapi -c '\dt'
List of relations
Schema | Name | Type | Owner
--------+------------------------------------------------+-------+--------
public | admin_permissions | table | strapi
public | admin_permissions_role_lnk | table | strapi
public | admin_roles | table | strapi
public | admin_users | table | strapi
public | admin_users_roles_lnk | table | strapi
public | articles | table | strapi
...
問題なくインポートできていることを確認。