概要
筆者にとっての必須エディタ、Growi。そのv8.0.0が出たので、以下の要件に基づきアップデートを行いました。
実施日: 2026年7月29日
対象環境: Ubuntu 24.04 (非Docker環境 / systemd運用)
その他要件:
| item | version |
|---|---|
| OS | Ubuntu 24.04 |
| GROWI | 7.5.7 |
| node.js | 24.14.1 |
| npm | 11.13.0 |
| pnpm | 11.1.1 |
必要要件の確認
GROWIの最新リリースにおける変更点(ES7の完全廃止、jemalloc対応、メモリ最適化、ESM移行)に対する自環境の適合状況を確認。
Elasticsearchバージョン確認
ES8/ES9のみに対応しているため、以下を確認。
curl -X GET "http://localhost:9200/" |grep number
→ 9.4.4となっていたので、要件を満たすことは確認しました。
OSメモリ最適化モジュールの確認
ldconfig -p | grep jemalloc
libjemalloc.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libjemalloc.so.2と出たのでモジュールも確認済みです。
ここまでやれば、覚悟を決めてアップデートを行います。
さっくりとしているが面倒な手順
- Growi実行スクリプトの修正を行います。
- 修正結果が反映されたことを確認します。
- 関連サービスの停止を行います。
- (推奨)mongodbをまるごとバックアップしておきます。
- Growiのアップデートを行います。
- アップデートの確認を行います。
Growi実行スクリプトの修正
※筆者は
systemdに登録したサービス起動プログラムがGrowiのルートディレクトリ/home/www-data/growi配下にあるgrowi-start.shを参照して各種環境をキックしています。
※ご自身の環境に合わせ修正を行ってください※
- 修正前ファイル
#!/bin/bash
# nvmのdefaultエイリアスが指すディレクトリを動的に取得してPATHに追加
# これにより、nvm installでバージョンを上げてもこのスクリプトの書き換えが不要になります
DEFAULT_NODE_VER=$(cat "$NVM_DIR/alias/default")
export PATH="$NVM_DIR/versions/node/$DEFAULT_NODE_VER/bin:$PATH"
GROWI_DIR="/home/www-data/growi"
cd $GROWI_DIR
# 環境変数の設定
export NODE_ENV=production
export AUDIT_LOG_ENABLED=true
export FORCE_WIKI_MODE=private
export MONGO_URI=mongodb://localhost:27017/growi
export ELASTICSEARCH_URI=http://localhost:9200/growi
export REDIS_URI=redis://localhost:6379
export PASSWORD_SEED=(設定済みのパスワード)
# npm run app:server を使用する(npmが内部で正しいパスを見つけてくれます)
# execを使うことでsystemdとの親和性を維持します
exec npm run app:server
このファイルを修正していきますが:バックアップを確実に行います。
- ファイルバックアップ
sudo cp -pi /home/www-data/growi/growi-start.sh /path/to/backup/directory/growi-start.sh.$(date +%Y%m%d)
- ファイルバックアップ確認
diff -u /path/to/backup/directory/growi-start.sh.$(date +%Y%m%d) /home/www-data/growi/growi-start.sh
エラー(差分)がなければ両者ともファイルがあり、バックアップが取れています。
バックアップ後、/home/www-data/growi/growi-start.shの編集を行います。(自分の環境に合わせます)
主な変更内容
- JEMALLOC の有効化:
export JEMALLOC_ENABLED=trueを追加 - LD_PRELOAD の明示:
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2を追加 - MongoDB 接続プールの最適化:
MONGO_URIに?maxPoolSize=10パラメータを付与
具体的には以下のような差分が取れていればOKです。
diff -u /path/to/backup/directory/growi-start.sh.$(date +%Y%m%d) /home/www-data/growi/growi-start.sh
# 環境変数の設定
export NODE_ENV=production
+export JEMALLOC_ENABLED=true
+export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
export AUDIT_LOG_ENABLED=true
export FORCE_WIKI_MODE=private
-export MONGO_URI=mongodb://localhost:27017/growi
+export MONGO_URI=mongodb://localhost:27017/growi?maxPoolSize=10
export ELASTICSEARCH_URI=http://localhost:9200/growi
export REDIS_URI=redis://localhost:6379
設定ファイルの修正確認
- Growiサービスの再起動
sudo systemctl restart growi.service
指定した環境変数および jemalloc ライブラリが GROWI プロセス(Node.js)へ正常にロードされていることを確認しました。
- プロセスの環境変数確認:
JEMALLOC_ENABLED=trueおよびLD_PRELOADが正常に適用されていることを確認。 - メモリマップ / ファイルハンドラ確認:
lsofおよび/proc/{PID}/mapsコマンドにより、libjemalloc.so.2が Node.js プロセスに読み込まれていることを確認。
メンテナンスモード有効化
- Growiに管理者権限でログインします。
- 管理トップ>アプリ設定に進み、「メンテナンスモードを開始する」をクリックします。
- トップページに戻り「メンテナンスモード」が表示されていることを確認します。
バックアップ
以下をバックアップします。
- mongodbの格納データ
cat /etc/mongod.conf |grep dbPath
として、ここのディレクトリ一式を控えます。(筆者環境 /home/mongodb)
このディレクトリを任意の方法でバックアップします。
- Growiの添付ファイル一式が納められているディレクトリ(ファイルアップロード先をlocalにしている場合のみ)
/growi/root/directory/apps/app/public
(筆者環境 /home/www-data/growi/apps/app/public)ここも念のためバックアップします。
※ 添付ファイルのアップロード先をAWSやAzureなどにしている場合は不要です
- vpsや仮想ゲストの場合はシステム全体:推奨
スナップショット機能などでシステム全体をバックアップした方が確実で安心です。
ElasticsearchとGrowiの停止
- Elasticsearchサービス停止
sudo systemctl stop elasticsearch.service
- Growiサービス停止
sudo systemctl stop growi.service
- サービス停止確認
systemctl status elasticsearch.service growi.service | grep Active
inactive(dead)を確認します。
作業前バックアップ
- データディレクトリを丸ごとコピー (-aオプションでパーミッションを維持)
sudo cp -a /var/lib/elasticsearch/ /path/to/backup/dir/elastic_bk.$(date +%Y%m%d)
自分の環境に合わせます。
- バックアップ確認
sudo ls -l /path/to/backup/dir/elastic_bk.$(date +%Y%m%d)
バックアップした内容があることを確認します。(※管理者権限でないとこのディレクトリを見ることはできません)
growiディレクトリに移動します
cd /home/www-data/growi && pwd
自分の環境に合わせます。(筆者環境/home/www-data/growi)
リリースタグを確認します。
- リリースタグ取得
sudo git fetch --tags
- リリースタグ確認
sudo git tag -l
スペースで確認していき、上記リリースサイトと同じバージョンがあることを確認します。
チェックアウトとインストールを行います。
- 変更を一時的に退避
sudo git stash
- チェックアウト
sudo git checkout 【バージョン】
リリースタグは再確認しましょう。今回は 2026/07/28にリリースされたv8.0.0を選択しました。
- pnpm install
sudo pnpm i
※これができるのは、筆者のgrowi実行環境がrootだからです。このパーミッション設定は確実に確認しましょう。
- ビルド
NODE_OPTIONS="--max-old-space-size=4096" sudo pnpm run app:build
→ ビルド時のメモリ大量使用を抑えるため上限を抑えています。余談ですが、ここは神に祈る作業です。
ElasticsearchとGrowiの再開
- Elasticsearchサービス開始
sudo systemctl restart elasticsearch.service
- Growiサービス開始
sudo systemctl restart growi.service
- サービス開始確認
systemctl status elasticsearch.service growi.service | grep Active
active(running)を確認します。
メンテナンスモード無効化
- Growiに管理者権限でログインします。
- 管理トップ>アプリ設定に進み、「メンテナンスモードを終了する」をクリックします。
- トップページに戻り「メンテナンスモード」が表示されていないことを確認します。
バージョンアップを確認します。
- 画面下部にあるバージョンがチェックアウトしたバージョン(v8.0.0)であることを確認します。
- 各種機能(ページ閲覧や編集)などが正常に行えるかを確認します。
追加モジュールが動いていることを確認します。
- 一時的に特権ユーザー昇格
※一般権限で見られないため
sudo su -
- モジュール追加確認
pgrep -f "node.*growi" | xargs -I {} lsof -p {} 2>/dev/null | grep jemalloc
- 実行例
MainThrea 479521 root mem REG 253,1 830656 15385 /usr/lib/x86_64-linux-gnu/libjemalloc.so.2
バージョンアップ後の作業
必要に応じてバックアップしたファイル一式やスナップショットを削除します。