# v5.0 系から v4.5 系以下へのダウングレード

v5.0 にアップグレードしたシステムを v4.5 系以下にダウングレードする場合は、v4.5 系に切り替えて起動する前に MongoDB スキーマの migrate down を行う必要があります。
以下の手順を実施してください。

TIP

ダウングレードは、オンプレミス または weseek/growi-docker-compose (opens new window) で運用中のシステムで可能です。
それ以外の形態で運用中のシステムに関してはダウングレードはサポートしておりません。ご了承ください。

WARNING

ダウングレードでは、データ破損の可能性はありませんが、page collection のページパスのデータの不整合が発生するなどのリスクがゼロではありません。
管理者による自己責任で操作をお願いします。

# 手順

# 本番用ローカルリポジトリを使って作業するパターン

  1. 本番のサーバーを停止する

    • MongoDB は起動したままにする
  2. v5.0.0 のシステムを利用可能な状態のまま以下の手順を実施する

    1. growi-docker-compose を利用している場合は bash プロセスを起動

      docker-compose run -it --rm app bash
      
    2. packages/app ディレクトリ下で migrate-mongo down コマンドを実行

      • ターミナルの出力に MIGRATED DOWN: 20211227060705-revision-path-to-page-id-schema-migration.js が出現するまで複数回実行する
      • 参考: v5.0.0 から v4.5.15 へのダウングレードでは 3 回の migrate-mongo down 実行が必要です
      # 1回目 (20220311011114-convert-page-delete-config)
      NODE_ENV=production node -r dotenv-flow/config node_modules/.bin/migrate-mongo down
      # 2回目 (20220131001218-convert-redirect-to-pages-to-page-redirect-documents)
      NODE_ENV=production node -r dotenv-flow/config node_modules/.bin/migrate-mongo down
      # 3回目 (20211227060705-revision-path-to-page-id-schema-migration)
      NODE_ENV=production node -r dotenv-flow/config node_modules/.bin/migrate-mongo down
      
  3. v4.5 系のシステムを利用可能な状態に切り替えてクライアントビルド、サーバー起動

# 作業用リポジトリを clone するパターン

  1. 本番のサーバーを停止する

    • MongoDB は起動したままにする
  2. 運用中の MongoDB にアクセスできる環境でリポジトリを clone

    git clone https://github.com/weseek/growi -b v5.0.0 --depth 1
    # 依存ライブラリの取得
    yarn lerna bootstrap
    cd packages/app
    
  3. .env.local の作成

    MIGRATIONS_DIR=src/migrations/
    # 環境に合わせて変更してください
    MONGO_URI="mongodb://${mongodbhost}:27017/growi"
    
  4. migrate-mongo down コマンドを実行

    • ターミナルの出力に MIGRATED DOWN: 20211227060705-revision-path-to-page-id-schema-migration.js が出現するまで複数回実行する
    • 参考: v5.0.0 から v4.5.15 へのダウングレードでは 3 回の migrate-mongo down 実行が必要です
    # 1回目 (20220311011114-convert-page-delete-config)
    yarn ts-node node_modules/.bin/migrate-mongo down
    # 2回目 (20220131001218-convert-redirect-to-pages-to-page-redirect-documents)
    yarn ts-node node_modules/.bin/migrate-mongo down
    # 3回目 (20211227060705-revision-path-to-page-id-schema-migration)
    yarn ts-node node_modules/.bin/migrate-mongo down
    
  5. 作業用リポジトリの削除

  6. 本番環境で v4.5 系のタグをチェックアウト

  7. クライアントビルド、サーバー起動

# 出力例

node ➜ /workspace/growi/packages/app (master) $ yarn ts-node node_modules/.bin/migrate-mongo down
yarn run v1.22.17
$ ts-node -r tsconfig-paths/register -r dotenv-flow/config --transpile-only node_modules/.bin/migrate-mongo down
{"name":"growi:migrate:convert-page-delete-config","hostname":"xxxxxxxxxxxx","pid":1111,"level":30,"msg":"Migration down has successfully applied","time":"2022-03-31T05:54:22.448Z","v":0}
MIGRATED DOWN: 20220311011114-convert-page-delete-config.js
Done in 1.71s.
node ➜ /workspace/growi/packages/app (master) $ yarn ts-node node_modules/.bin/migrate-mongo down
yarn run v1.22.17
$ ts-node -r tsconfig-paths/register -r dotenv-flow/config --transpile-only node_modules/.bin/migrate-mongo down
{"name":"growi:migrate:convert-redirect-to-pages-to-page-redirect-documents","hostname":"xxxxxxxxxxxx","pid":1111,"level":30,"msg":"Migration down has successfully applied","time":"2022-03-31T05:54:27.944Z","v":0}
MIGRATED DOWN: 20220131001218-convert-redirect-to-pages-to-page-redirect-documents.js
Done in 1.42s.
node ➜ /workspace/growi/packages/app (master) $ yarn ts-node node_modules/.bin/migrate-mongo down
yarn run v1.22.17
$ ts-node -r tsconfig-paths/register -r dotenv-flow/config --transpile-only node_modules/.bin/migrate-mongo down
{"name":"growi:migrate:revision-path-to-page-id-schema-migration","hostname":"xxxxxxxxxxxx","pid":1111,"level":30,"msg":"Migration down has successfully applied","time":"2022-03-31T05:54:31.169Z","v":0}
MIGRATED DOWN: 20211227060705-revision-path-to-page-id-schema-migration.js
Done in 1.99s.

# トラブルシュート

# ERROR: An env var MIGRATIONS_DIR must be set. Error: An env var MIGRATIONS_DIR must be set.

一時的に環境変数を設定する .env.local を作成し、MIGRATIONS_DIR を設定してください。

本番用ローカルリポジトリを使って作業するパターンでは Node.js プロセスで実行可能な MIGRATIONS_DIR=dist/migrations/ を指定します。

作業用リポジトリを clone するパターンでは ts-node プロセスで実行可能な MIGRATIONS_DIR=src/migrations/ を指定します。