アーカイブを
立ち上げるために。
システムとデータを分けて保存し、別の環境で再現する。
現在利用できる復元方法と、新しいサイトを公開するまでの手順です。
現在は各サイトの旧環境を個別に再現した段階です。新規サイトを自動生成する共通テンプレートやExtension登録機構は、今後の実装対象です。以下では、実装済みの復元と、公開時に必要な設定を区別しています。
最初に揃えるもの
- データセット:DBの内容と画像、または動画・KML。
- 対応するアプリ一式:実コード・設定テンプレート・Compose構成。
- 対応するイメージ一式:PHP、Web、DB等の実行環境。
- 各ファイルのSHA256と復元ツール:同じアプリ版に対応するものを使います。
実行環境はPython 3.12以上、Docker Engine+Compose、OpenSSL。保存したイメージはlinux/amd64です。ARM環境ではエミュレーションを使用します。現在の本番差分は元のGitHubに未反映のため、GitHubの原型だけでは同じ状態を復元できません。
空の環境に復元する
各ファイルとその .sha256 を同じフォルダーに置き、復元ツールのフォルダーで実行します。下記のパスを手元のファイル名へ置換してください。復元先には存在しない新しいディレクトリを指定します。
python3 tools/restore.py \
--release /path/to/RELEASE_ID.application.tar.gz \
--dataset /path/to/TIMESTAMP-oyubari.dataset.tar.gz \
--images /path/to/RELEASE_ID.images.tar \
--target /path/to/new-restore-directory \
--port 19443独立したDB・画像ボリュームを作成し、DB全行と画像内容を照合します。既存の復元先や破損した一式は上書き前に拒否します。プレビューはそのマシンの https://localhost:19443/ に限定されます。
curl --noproxy '*' \
--cacert /path/to/new-restore-directory/preview-ca.crt \
https://localhost:19443/新しいサイトとして公開する
- 原本を保全:復元に使った一式を別の場所にも保存します。既存サイトのDBや画像ボリュームを共有しません。
- サイトを設定:名称、公開URL、メタデータ、管理方針を決めます。現段階ではサイト別コード・設定の確認が必要です。JASSのAPI画像URLは環境変数で切り替えられます。
- 専用の実行環境を用意:Composeのプロジェクト名、ネットワーク、永続ボリュームを分けます。プレビュー用設定をそのまま本番公開設定として使わないでください。
- 読み書きを検証:一覧、詳細、検索、日本語URL、画像、コメント、登録・更新・アップロードを独立環境で試験します。データ件数・ハッシュと外部連携も確認します。
- 公開URLを接続:DNSを設定し、リバースプロキシへホストを追加。Let’s EncryptのHTTPSと永続化した証明書保存先を使用します。DBは外部公開しません。
- 保存と監視を登録:対応アプリ版を保存し、新しいデータセットをバックアップ対象と一覧の採取対象へ追加。手動バックアップと復元試験が成功してから定期実行します。
既存本番から切り替える場合は、旧側の書き込みを停止して最終同期・比較を行い、その後にDNSを切り替えます。旧本番と開発環境は自動同期していません。
バックアップを取得・持ち出す
移行先では毎日03:30 JSTにデータセットを取得します。MyISAMの整合性確保のため、サイト単位でWeb/PHPを一時停止し、取得後に再開します。コードや設定が保存済みアプリ版と異なる場合はバックアップを中止します。
以下は、現在のサーバーへSSH接続して実行する管理者向け手順です。
python3 ~/archive-platform/tools/scheduled_backup.py --check
python3 ~/archive-platform/tools/scheduled_backup.py完成した一式はホストの ~/archive-backups/ に保存されます。データセットは datasets/、アプリ・イメージは releases/。Web公開はしていません。
手元の端末から、必要なサイトと対応リリースを取得します。RELEASE_ID はデータセットに対応する値へ置換します。
mkdir -p archive-backup-copy
chmod 700 archive-backup-copy
scp -i ~/.ssh/identity_rsa \
'hiroki_u@archive-dev.balog.jp:archive-backups/datasets/*-oyubari.dataset.tar.gz*' \
archive-backup-copy/
scp -i ~/.ssh/identity_rsa \
'hiroki_u@archive-dev.balog.jp:archive-backups/releases/RELEASE_ID.*' \
archive-backup-copy/復元ツールも一緒に保存します。別拠点への自動転送と世代削除は未設定です。日次14・週次8・月次12世代を目安に、別拠点コピーと復元確認を条件とした保持方式を今後整備します。
共通コアとExtensionへ
今後は共通コアに検索・閲覧・データ保存の基本機能を集約し、メタデータの違い、グラフAPI、形態素解析、SPARQL、地理・動画表示をExtensionまたは設定で切り替える方針です。機能をOFFにしても資料を削除せず、データセットには対応するスキーマとアプリ版を記録します。
PHP更新、DB更新、InnoDB化、共通化は別工程で検証し、いつでも保全済みの旧環境に戻れる履歴を残します。