何度か書いているGrowiのインストール(Docker不使用)。
手順を色々見直して2025年7月版としました。
概要
Growi v7.2.8のインストールメモです。
MongoDBの関係もあり、インストールするCPUを選びます。
環境
の基本的な設定が済んだという状況です。
前提
- 名前解決できるドメインが用意されている。
- そのドメインに応じた証明書が用意されている。
さっくりとはならない手順
- 必要なパッケージをインストールします。
- nvmをインストールします。
- nvm経由でnode,npm,pnpmをインストールします。
- Redis-serverをインストールします。
- Javaをインストールします。
- ElasticSearch 8をインストールします。
- ElasticSearchの設定変更を行います。
- ElasticSearchのプラグインをインストールします。
- ElasticSearchの設定変更を反映します。
- MongoDBをインストールします。
- MongoDBのデータ格納先を変更します。(オプション)
- MongoDBの設定変更を反映します。(オプション)
- Growiのインストールを行います。
- pnpmを用いてインストールします。
- アプリのビルドを行います。
- 自動起動のスクリプトを作成します。
- Apacheのリバースプロキシの設定を行います。
- ブラウザで初期インストールを行います。
手順
筆者の好みでaptitude
を用いています。適宜、apt
に読み替えてください。
必要なパッケージのインストールを行います。
sudo aptitude install build-essential git git-lfs apt-transport-https
v7.1系で`git-lfs
を入れないとgit-clone
でビルドが行えなかったので、その名残です。
nvmインストール
※growiをroot権限で実行するため
sudo su -
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
一度セッションを切り、再度sudoを行いました。
nvm --version
0.39.7
と表示されることを確認。
(まだrootです)
npm@11.4.0
と互換性があるNode.jsをインストールします。
nvm install v20.19.2
nvm use v20.19.2
nvm alias default v20.19.2
node -v
v20.19.2
を確認
npm -v
10.7.0
を確認
npm install -g npm@11.4.0
npm -v
11.4.0
を確認
npm install -g pnpm
pnpm -v
10.11.0
を確認
exit
redis-serverをインストールします。
sudo aptitude install redis-server
systemctl status redis-server
active(running)を確認します。
sudo systemctl enable redis-server
Javaをインストールします。
sudo aptitude install openjdk-17-jdk
Elasticsearchをインストールします。
sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
sudo echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo aptitude update
sudo aptitude install elasticsearch
※この後、デフォルトパスワードが表示されますが、控えておく程度にしましょう。
JVM設定変更
sudo mkdir /etc/elasticsearch/old
※任意のバックアップディレクトリを指定します。
sudo cp -pi /etc/elasticsearch/jvm.options /etc/elasticsearch/old/jvm.options.$(date +%Y%m%d)
echo -e "-Xms256m\n-Xmx256m" | sudo tee -a /etc/elasticsearch/jvm.options
sudo diff -u /etc/elasticsearch/old/jvm.options.$(date +%Y%m%d) /etc/elasticsearch/jvm.options
+-Xms256m
+-Xmx256m
ElasticSearchの設定変更
※この作業も管理者権限で実行します。
sudo su -
cp -pi /etc/elasticsearch/elasticsearch.yml /path/to/backup/elasticsearch.yml.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
sed -i -e 's/xpack.security.enabled: true/xpack.security.enabled: false/' \
-e '/xpack.security.http.ssl:/{n; s/ enabled: true/ enabled: false/}' \
-e '/xpack.security.transport.ssl:/{n; s/ enabled: true/ enabled: false/}' /etc/elasticsearch/elasticsearch.yml
diff -u /path/to/backup/elasticsearch.yml.$(date +%Y%m%d) /etc/elasticsearch/elasticsearch.yml
# Enable security features
-xpack.security.enabled: true
+xpack.security.enabled: false
xpack.security.enrollment.enabled: true
# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
- enabled: true
+ enabled: false
keystore.path: certs/http.p12
# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
- enabled: true
+ enabled: false
exit
ElasticSearchのプラグインを追加
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
自動起動設定反映
sudo systemctl start elasticsearch
systemctl status elasticsearch
active(running)を確認します。
sudo systemctl enable elasticsearch
MongoDBインストール
レポジトリ追加
sudo aptitude install gnupg
curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg \
--dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
MongoDBインストール
sudo aptitude update
sudo aptitude install mongodb-org
保存先変更(オプション)
MongoDBの格納先を、冗長化構成されているパーティションにするため対応しました。
本設定の要注意点
MongoDBは、その性質上、頻繁にファイルの書き換えを行います。そのため、ブロックストレージのような「データ削除ポリシー」が明記されているネットワークストレージに、保存パーティションを指定してはいけません。(筆者はそれで痛い目に遭いました)
本設定が必要な場合は、同じサーバ上の、SSDで行いましょう。
sudo mkdir /home/mongodb
保存先を変えたいところにします
sudo chown -R mongodb:mongodb /home/mongodb
ls -ld /home/mongodb
sudo cp -pi /etc/mongod.conf /path/to/backup/mongod.conf.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
sudo diff -u /etc/mongod.conf /path/to/backup/mongod.conf.$(date +%Y%m%d)
バックアップが保存されたか、差分がないことで確認します。
sudo sed -i 's/dbPath: \/var\/lib\/mongodb/dbPath: \/home\/mongodb/' /etc/mongod.conf
sudo diff -u /path/to/backup/mongod.conf.$(date +%Y%m%d) /etc/mongodb.conf
- dbPath: /var/lib/mongodb
+ dbPath: /home/mongodb
自動起動有効
sudo systemctl start mongod
systemctl status mongod
active (running)を確認します
sudo systemctl enable mongod
Growiインストール
sudo git clone https://github.com/weseek/growi /home/www-data/growi
※任意のディレクトリを指定します。
cd /home/www-data/growi && pwd
先ほどcloneしたディレクトリです。
sudo git checkout -b v7.2.8 refs/tags/v7.2.8
2025/06/30時点での最新リリースです
sudo pnpm install
CPUのスペックによっては相当な時間がかかります。
sudo npm run app:build
必要であればlfs pull
sudo git lfs pull
→ v6.1で必要なコマンドでした。v7でビルドできない場合に試してください。
やはり時間がかかります。
自動起動スクリプトの作成
cat <<- __EOF__ | sudo tee -a /etc/systemd/system/growi.service
[Unit]
Description = growi
After=network-online.target mongod.service
After=network.target elasticsearch.service
ConditionPathExists=【/home/www-data/growi】
[Service]
ExecStart=【/home/www-data/growi/】growi-start.sh
Restart=no
Type=simple
[Install]
WantedBy=multi-user.target
__EOF__
※【】内を、git cloneしたディレクトリにします。
- Growiインストールディレクトリに作成
- 教義・信仰に沿ったエディタで作成します。
- ファイル名:
growi-start.sh
- growiを配置したディレクトリ内に作成します。
#!/bin/bash
# NVM environmentをロード (NVM_DIRを直接指定)
export NVM_DIR="/root/.nvm" # $HOMEの代わりに直接パスを指定
if [ -s "$NVM_DIR/nvm.sh" ]; then
\. "$NVM_DIR/nvm.sh" # nvmをロード
# 次の行でスクリプト実行時のnodeとnpmのバージョンをログに出力
echo "NVM for GROWI startup script loaded. Using Node version: $(node -v), npm version: $(npm -v)" > /tmp/growi_nvm_load.log
else
# NVMが見つからない場合もログに出力
echo "NVM_DIR ($NVM_DIR) not found or nvm.sh not found for GROWI startup script." > /tmp/growi_nvm_load.log
fi
cd 【/home/www-data/growi】
NODE_ENV=production \
AUDIT_LOG_ENABLED=true \
FORCE_WIKI_MODE=private \
MONGO_URI=mongodb://localhost:27017/growi \
ELASTICSEARCH_URI=http://localhost:9200/growi \
REDIS_URI=redis://localhost:6379 \
PASSWORD_SEED=[任意の文字列] \
npm run app:server
[任意の文字列]
は推測されないような英数字+記号を指定します。
sudo chmod +x /home/www-data/growi/growi-start.sh
sudo systemctl daemon-reload
sudo systemctl start growi.service
systemctl status growi.service
active(running)を確認
sudo systemctl enable growi.service
Apacheによるリバースプロキシの設定
sudo a2enmod proxy_http proxy_wstunnel rewrite header
sudo systemctl restart apache2.service
sudo mkdir /var/log/growi/
sudo chown -R www-data:www-data /var/log/growi
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/growi.conf
<VirtualHost _default_:80>
ServerName 【hoge.example.com】
# ドメイン名を指定します
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTPアクセスを強制的にHTTPSにリダイレクトします
</VirtualHost>
<VirtualHost _default_:443>
ServerName 【hoge.example.com】
# ドメイン名を指定します
CustomLog /var/log/growi/growi_access.log combined
ErrorLog /var/log/growi/growi_error.log
#SSL設定
SSLEngine on
Protocols h2 http/1.1
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
#TLS1.3に対応していないクライアントがアクセスする場合は以下を用います
#SSLProtocol -ALL +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
SSLCertificateFile 【/etc/certs/hoge.example.com.crt】
# SSL証明書を指定します
SSLCertificateKeyFile 【/etc/private/hoge.example.com.key】
# 秘密鍵を指定します
# Header に Host: example.com を追加するため
ProxyPreserveHost On
# HTTPS利用時: Header に x-forwarded-proto: https を追加するため
RequestHeader set x-forwarded-proto 'https'
# Apache では static assets で 304 が返らないことがあるので ETag を無効化する
<ifModule mod_headers.c>
Header unset ETag
</ifModule>
FileETag None
<FilesMatch "\.(js|css|png|jpg|gif|svg|woff2?)$">
Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>
# リバースプロキシー設定
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://localhost:3000/$1 [P,L]
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
#セキュリティヘッダー付与
Header always set Strict-Transport-Security "max-age=63072000"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
</VirtualHost>
__EOF__
【】内を自分の環境に変更してください。
sudo a2ensite growi.conf
sudo apache2ctl configtest
Syntax OKを確認します。
sudo systemctl restart apache2.service
Growiインストール確認
http://設定したドメイン
でアクセスします。
初期サイトが表示されたらインストール完了です。
等を設定してログインします。