概要
筆者にとっての必須エディタ、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
設定ファイルの修正確認
sudo systemctl restart growi.service
指定した環境変数および jemalloc ライブラリが GROWI プロセス(Node.js)へ正常にロードされていることを確認しました。
プロセスの環境変数確認: JEMALLOC_ENABLED=true および LD_PRELOAD が正常に適用されていることを確認。
メモリマップ / ファイルハンドラ確認: lsof および /proc/{PID}/maps コマンドにより、libjemalloc.so.2 が Node.js プロセスに読み込まれていることを確認。
メンテナンスモード有効化
Growiに管理者権限でログインします。
管理トップ>アプリ設定に進み、「メンテナンスモードを開始する」をクリックします。
トップページに戻り「メンテナンスモード」が表示されていることを確認します。
バックアップ
以下をバックアップします。
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などにしている場合は不要です
スナップショット機能などでシステム全体をバックアップした方が確実で安心です。
ElasticsearchとGrowiの停止
sudo systemctl stop elasticsearch.service
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を選択しました。
sudo pnpm i
※これができるのは、筆者のgrowi実行環境がrootだからです。このパーミッション設定は確実に確認しましょう。
NODE_OPTIONS="--max-old-space-size=4096" sudo pnpm run app:build
→ ビルド時のメモリ大量使用を抑えるため上限を抑えています。余談ですが、ここは神に祈る作業です。
ElasticsearchとGrowiの再開
sudo systemctl restart elasticsearch.service
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
バージョンアップ後の作業
必要に応じてバックアップしたファイル一式やスナップショットを削除します。