Growi

WebベースのMarkdownのWikiサイト、Growiについて

Growiインストール方法

Growiインストール方法

Ubuntu 22.04にGrowi 6.xをインストール

GrowiをUbuntu22.04をインストールしたので、そのときの手順です。

※ Growi v7以降、いくつか設定が異なりますので本稿ではv6での手順を示します。

環境

の基本的な設定が済んだという状況です。

前提

さっくりとはならない手順

  1. Node.js/npmをインストールします。
  2. Redis-serverをインストールします。
  3. Javaをインストールします。
  4. ElasticSearch 8をインストールします。
    1. ElasticSearchの設定変更を行います。
    2. ElasticSearchのプラグインをインストールします。
    3. ElasticSearchの設定変更を反映します。
  5. MongoDBをインストールします。
    1. MongoDBのデータ格納先を変更します。
    2. MongoDBのアップデートを防ぎます。
    3. MongoDBの設定変更を反映します。
  6. yarnのインストールを行います。
    1. 必要パッケージをインストールします。
    2. turboパッケージをインストールします。
  7. Growiのインストールを行います。
    1. yarnを用いてインストールします。
    2. 自動起動のスクリプトを作成します。
  8. Apacheのリバースプロキシの設定を行います。
  9. ブラウザで起動します。

手順

node18をインストールします。

sudo curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash
sudo aptitude update
sudo aptitude install nodejs
node -v

2024/04/03現在:v18.20.0

npm -v

2024/04/03現在:10.5.0

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

ElasticSearhをインストールします。

sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
sudo aptitude install apt-transport-https
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://pgp.mongodb.com/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-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools
MongoDBバージョン固定

※2024/04/03現在、GrowiはMongoDBのバージョンが固定されているので、自動更新されないようにします。

sudo aptitude hold mongodb-org
sudo aptitude hold mongodb-org-server
sudo aptitude hold mongodb-org-shell
sudo aptitude hold mongodb-org-mongos
sudo aptitude hold mongodb-org-tools
保存先変更(オプション)

MongoDBの格納先を、冗長化構成されているパーティションにするため対応しました。

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

yarnインストール

sudo npm install -g yarn

※Growi v6.1.0から必須パッケージとなりました。

sudo yarn global add turbo@1.12.2

※最新版のturboをインストールするとv6では動きませんでした。

Growiインストール

sudo git clone https://github.com/weseek/growi /home/www-data/growi

※任意のディレクトリを指定します。

cd /home/www-data/growi && pwd

先ほどcloneしたディレクトリです。

sudo git checkout -b v6.3.5 refs/tags/v6.3.5

2024/06/25現在、Growi6系最新版の6.3.5をインストールします

sudo yarn

CPUのスペックによっては相当な時間がかかります。

自動起動スクリプトの作成

cat <<- __EOF__ | sudo tee -a /etc/systemd/system/growi.service
[Unit]
Description = growi
After=network-online.target mongod.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したディレクトリにします。

#!/bin/bash
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=[任意の文字列] \
FILE_UPLOAD=local \
npm start

※【】内を、git cloneしたディレクトリにします。 []内には任意の文字列を入れます。 例:PASSWORD_SEED=GOLDEN_SEED

また、オプションなどは好みに応じて指定してください。(FILE_UPLOAD=localは添付ファイルの保存先をDBではなくローカルに保存するオプションです)

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 rewrite header
sudo systemctl restart apache2.service
suod 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
  # SSLを有効化します

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

    # socket.io の path を rewrite する
    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
    RewriteCond %{QUERY_STRING} transport=websocket    [NC]
    RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

</VirtualHost>

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off
__EOF__

【】内を自分の環境に変更してください。

※v7とはWebSocketの書き方が異なります。ご注意ください。

sudo a2ensite growi.conf
sudo apache2ctl configtest

Syntax OKを確認します。

sudo systemctl restart apache2.service

Growiインストール確認

http://設定したドメイン でアクセスします。

この初期サイトが表示されたらインストール完了です。

Growiインストール方法

Ubuntu 22.04にGrowi v7.xをインストール。(v7.1.0未対応)

Dockerを用いない方法でGrowiのv7.xをUbuntu22.04がインストールできたので、その手順を示します。

環境

の基本的な設定が済んだという状況です。

前提

さっくりとはならない手順

太字部分はv7で必要になる手順です。

  1. 必要なパッケージをインストールします。
  2. Node.js/npmをインストールします。
  3. Redis-serverをインストールします。
  4. Javaをインストールします。
  5. ElasticSearch 8をインストールします。
    1. ElasticSearchの設定変更を行います。
    2. ElasticSearchのプラグインをインストールします。
    3. ElasticSearchの設定変更を反映します。
  6. MongoDBをインストールします。
    1. MongoDBのデータ格納先を変更します。
    2. MongoDBのアップデートを防ぎます。
    3. MongoDBの設定変更を反映します。
  7. yarnのインストールを行います。
    1. 必要パッケージをインストールします。
    2. turboパッケージをインストールします。
  8. Growiのインストールを行います。
    1. yarnを用いてインストールします。
    2. アプリのビルドを行います。
    3. 自動起動のスクリプトを作成します。
  9. Apacheのリバースプロキシの設定を行います。
  10. ブラウザで起動します。

手順

必要なパッケージのインストールを行います。

sudo aptitude install build-essential git git-lfs apt-transport-https

※v6系と異なり、git-lfsをインストールしない状態でgit-cloneを行うと正しくビルドが行えません。

node18をインストールします。

sudo curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash
sudo aptitude update
sudo aptitude install nodejs
node -v

2024/06/27現在:v18.20.3

npm -v

2024/06/27現在:10.7.0

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

ElasticSearhをインストールします。

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://pgp.mongodb.com/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-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools
MongoDBバージョン固定

※2024/04/03現在、GrowiはMongoDBのバージョンが固定されているので、自動更新されないようにします。

sudo aptitude hold mongodb-org
sudo aptitude hold mongodb-org-server
sudo aptitude hold mongodb-org-shell
sudo aptitude hold mongodb-org-mongos
sudo aptitude hold mongodb-org-tools
保存先変更(オプション)

MongoDBの格納先を、冗長化構成されているパーティションにするため対応しました。

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

yarnインストール

sudo npm install -g yarn

※Growi v6.1.0から必須パッケージとなりました。

sudo yarn global add turbo

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.0.11 refs/tags/v7.0.11

2024/06/27現在の最新版をチェックアウトします。

sudo yarn

CPUのスペックによっては相当な時間がかかります。

sudo yarn app:build

v7からこの操作が必要です。やはり時間がかかります。

自動起動スクリプトの作成

cat <<- __EOF__ | sudo tee -a /etc/systemd/system/growi.service
[Unit]
Description = growi
After=network-online.target mongod.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したディレクトリにします。

#!/bin/bash
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=[任意の文字列] \
FILE_UPLOAD=local \
npm start

※【】内を、git cloneしたディレクトリにします。 []内には任意の文字列を入れます。 例:PASSWORD_SEED=GOLDEN_SEED

また、オプションなどは好みに応じて指定してください。(FILE_UPLOAD=localは添付ファイルの保存先をDBではなくローカルに保存するオプションです)

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 rewrite header
sudo systemctl restart apache2.service
suod 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
  # SSLを有効化します

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

     # WebSocketのための設定
     RewriteEngine On
     RewriteCond %{HTTP:Upgrade} =websocket [NC]
     RewriteCond %{HTTP:Connection} upgrade [NC]
     RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

</VirtualHost>

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off
__EOF__

【】内を自分の環境に変更してください。

※v6とはWebSocketの書き方が異なります。ご注意ください。特に、Apacheのリバースプロキシ環境でWebSocket周りを適切に指定しないとページを編集しようとすると編集画面が空白になってしまいます。

sudo a2ensite growi.conf
sudo apache2ctl configtest

Syntax OKを確認します。

sudo systemctl restart apache2.service

Growiインストール確認

http://設定したドメイン でアクセスします。

この初期サイトが表示されたらインストール完了です。

Growiインストール方法

Ubuntu24.04にGrowi v7をインストール。(v7.1.0未対応)

ようやく、Ubuntu24.04にGrowiをインストールできたのでそのメモです。

参考手順:GROWIをUbuntuで構築した

ただし、v7.1.0ではpnpmでパッケージ管理を行うため、本手順は未対応です。

環境

の基本的な設定が済んだという状況です。

前提

さっくりとはならない手順

  1. 必要なパッケージをインストールします。
  2. Node.js/npmをインストールします。
  3. Redis-serverをインストールします。
  4. Javaをインストールします。
  5. ElasticSearch 8をインストールします。
    1. ElasticSearchの設定変更を行います。
    2. ElasticSearchのプラグインをインストールします。
    3. ElasticSearchの設定変更を反映します。
  6. MongoDBをインストールします。
    1. MongoDBのデータ格納先を変更します。(オプション)
    2. MongoDBの設定変更を反映します。(オプション)
  7. yarnのインストールを行います。
    1. turboパッケージをインストールします。
  8. Growiのインストールを行います。
    1. yarnを用いてインストールします。
    2. アプリのビルドを行います。
    3. 自動起動のスクリプトを作成します。
  9. Apacheのリバースプロキシの設定を行います。
  10. ブラウザで初期インストールを行います。

手順

必要なパッケージのインストールを行います。

sudo aptitude install build-essential git git-lfs apt-transport-https

※v6系と異なり、git-lfsをインストールしない状態でgit-cloneを行うと正しくビルドが行えません。

node20をインストールします。

sudo curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash
sudo aptitude update
sudo aptitude install nodejs
node -v

2024/10/30現在:v20.18.0

npm -v

2024/10/30現在:10.9.0

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

ElasticSearhをインストールします。

sudo aptitude install openjdk-17-jdk sudo bash -
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の格納先を、冗長化構成されているパーティションにするため対応しました。

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

yarnインストール

sudo npm install -g yarn

※Growi v6.1.0から必須パッケージとなりました。

sudo yarn global add turbo

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.0.23 refs/tags/v7.0.23

2024/10/30現在の最新版をチェックアウトします。

sudo yarn

CPUのスペックによっては相当な時間がかかります。

sudo yarn app:build

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したディレクトリにします。

#!/bin/bash
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

※【】内を、git cloneしたディレクトリにします。 []内には任意の文字列を入れます。 例:PASSWORD_SEED=GOLDEN_SEED

また、オプションなどは好みに応じて指定してください。(今回はs3互換クラウドストレージに保存するため、ファイルのアップロードを自由選択にしています。)

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 rewrite
sudo systemctl restart apache2.service
suod 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
  # SSLを有効化します

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

    # socket.io の path を rewrite する
    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
    RewriteCond %{QUERY_STRING} transport=websocket    [NC]
    RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

</VirtualHost>

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off
__EOF__

【】内を自分の環境に変更してください。

※Ubuntu22.04の時と異なり、socket.ioのpathは公式ドキュメント通りで正常に動作しています。

sudo a2ensite growi.conf
sudo apache2ctl configtest

Syntax OKを確認します。

sudo systemctl restart apache2.service

Growiインストール確認

http://設定したドメイン でアクセスします。

この初期サイトが表示されたらインストール完了です。

Growiインストール方法

Ubuntu24.04にGrowi v7をインストール。(v7.1.0対応版)

Growi v7.1.0のインストールメモです。

パッケージ管理がyarnからpnpmに変更されているため、若干手間が異なります。

環境

の基本的な設定が済んだという状況です。

前提

さっくりとはならない手順

  1. 必要なパッケージをインストールします。
  2. Node.js/npmをインストールします。
  3. Redis-serverをインストールします。
  4. Javaをインストールします。
  5. ElasticSearch 8をインストールします。
    1. ElasticSearchの設定変更を行います。
    2. ElasticSearchのプラグインをインストールします。
    3. ElasticSearchの設定変更を反映します。
  6. MongoDBをインストールします。
    1. MongoDBのデータ格納先を変更します。(オプション)
    2. MongoDBの設定変更を反映します。(オプション)
  7. pnpmのインストールを行います。
    1. turboパッケージをインストールします。
  8. Growiのインストールを行います。
    1. pnpmを用いてインストールします。
    2. アプリのビルドを行います。
    3. 自動起動のスクリプトを作成します。
  9. Apacheのリバースプロキシの設定を行います。
  10. ブラウザで初期インストールを行います。

手順

必要なパッケージのインストールを行います。

sudo aptitude install build-essential git git-lfs apt-transport-https

※v6系と異なり、git-lfsをインストールしない状態でgit-cloneを行うと正しくビルドが行えません。

node20をインストールします。

sudo curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash
sudo aptitude update
sudo aptitude install nodejs
node -v

2024/10/30現在:v20.18.0

npm -v

2024/10/30現在:10.9.0

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

ElasticSearhをインストールします。

sudo aptitude install openjdk-17-jdk sudo bash -
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の格納先を、冗長化構成されているパーティションにするため対応しました。

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

pnpmインストール

sudo npm install -g pnpm

※Growi v6.1.0から必須パッケージとなりました。

sudo yarn global add turbo

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.1.0 refs/tags/v7.1.0
sudo git lfs pull
sudo pnpm install

CPUのスペックによっては相当な時間がかかります。

sudo npm run app:build

やはり時間がかかります。

自動起動スクリプトの作成

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したディレクトリにします。

#!/bin/bash
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

※【】内を、git cloneしたディレクトリにします。 []内には任意の文字列を入れます。 例:PASSWORD_SEED=GOLDEN_SEED

また、オプションなどは好みに応じて指定してください。(今回はs3互換クラウドストレージに保存するため、ファイルのアップロードを自由選択にしています。)

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 rewrite
sudo systemctl restart apache2.service
suod 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
  # SSLを有効化します

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

    # socket.io の path を rewrite する
    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
    RewriteCond %{QUERY_STRING} transport=websocket    [NC]
    RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

</VirtualHost>

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off
__EOF__

【】内を自分の環境に変更してください。

※Ubuntu22.04の時と異なり、socket.ioのpathは公式ドキュメント通りで正常に動作しています。

sudo a2ensite growi.conf
sudo apache2ctl configtest

Syntax OKを確認します。

sudo systemctl restart apache2.service

Growiインストール確認

http://設定したドメイン でアクセスします。

この初期サイトが表示されたらインストール完了です。

Growi運用

Growi運用

Ubuntu 24.04環境でのGrowi 7.0.23→7.1.0へのバージョンアップ

Ubuntu 7.1.0はかなり大きめの仕様変更がありました。

https://github.com/weseek/growi/releases/tag/v7.1.0

いくつかハマったポイントがありましたが、「自分はこの手順でうまくいった」 というメモを残します。

バージョンアップ前環境

以下の手順に沿ってインストール済みです。

https://barrel.reisalin.com/books/growi/page/ubuntu2404growi-v7v710

バージョンアップ後環境

ここで分かるように、パッケージ管理がyarnからpnpmへと変わっています。

さっくりとした手順

  1. Growiサービスを停止します。
  2. Growiのディレクトリを退避します。
  3. 新たにgit cloneを行います。
  4. チェックアウトを行います。
  5. pnpmのインストールを行います。
  6. アプリのビルドを行います。
  7. Growiスタートアップスクリプトをコピーします。
  8. Growiサービスを起動します。
  9. バージョンアップを確認します。

なぜか通常のgit checkoutはビルドがうまくいきませんでした。

Growiサービスの停止

systemctl status growi.service

active(running)を確認します。

sudo systemctl stop growi.service
systemctl stop growi.service

inactive(dead)を確認します。

Growiディレクトリの退避

筆者環境は/home/www-data/growiです。

sudo mv /home/www-data/growi /path/to/backup/directory/growi_org
ls -l /path/to/backup/directory/growi_org

ファイル一覧が参照できることを確認します。

Growiデータの新規取得

sudo git clone https://github.com/weseek/growi /home/www-data/growi

※任意のディレクトリを指定します。

cd /home/www-data/growi && pwd

先ほどcloneしたディレクトリですが、退避前のディレクトリと同じことを確認します。

Growi v7.1.0をチェックアウト

sudo git checkout -b v7.1.0 refs/tags/v7.1.0
sudo git lfs pull

pnpmパッケージのインストール

sudo npm install -g pnpm
pnpm --version

9.12.3を確認(2024/11/02現在)

Growiインストール

sudo git lfs pull
sudo pnpm install

※ マシンスペックによっては相当時間がかかります
※ Done in 【時間】と書かれていたらアップグレード完了です

sudo npm run app:build

退避させたGrowiから起動スクリプトのコピー

筆者のように、起動スクリプトをGrowiのインストールディレクトリに仕込んでいる場合の手順です。

sudo cp -pi /path/to/backup/directory/growi_org/growi-start.sh /home/www-data/growi/

それぞれ、バックアップしたディレクトリとcloneしたディレクトリです。

ls -l /home/www-data/growi/growi-start.sh

ファイルがあることを確認します。

growiサービスを起動します。

systemctl status growi.service

inactive (dead)を確認します

sudo systemctl start growi.service

※ 完全に起動していないと、アクセスしても503エラーが発生します。

systemctl status growi.service
サービススクリプトを[growi]にしている場合

active (running)を確認します

バージョンアップを確認します。

  1. ブラウザから設定したgrowiのドメイン/IPにアクセスします。
  2. 画面下部にあるバージョンが7.1.0であることを確認します。
Growi運用

Growiで全文検索できないときの対処(ElasticSearchに伴うプラグインアップデート)

概要

サーバのパッケージアップデート後、Growiで全文検索ができない現象が発生しました。

状況確認

systemctl status elasticsearch.service
 
● elasticsearch.service - Elasticsearch
     Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Wed 2023-08-09 20:32:57 JST; 12min ago
       Docs: https://www.elastic.co
    Process: 992 ExecStart=/usr/share/elasticsearch/bin/systemd-entrypoint -p ${PID_DIR}/elasticsearch.pid --quiet (code=exited, status=1/FAI>
   Main PID: 992 (code=exited, status=1/FAILURE)

 8月 09 20:32:56 chisato.lyco.reco systemd-entrypoint[992]:         at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:1>
 8月 09 20:32:56 chisato.lyco.reco systemd-entrypoint[992]:         at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAware>
 8月 09 20:32:56 chisato.lyco.reco systemd-entrypoint[992]:         at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:11>
 8月 09 20:32:56 chisato.lyco.reco systemd-entrypoint[992]:         at org.elasticsearch.cli.Command.main(Command.java:77)
 8月 09 20:32:56 chisato.lyco.reco systemd-entrypoint[992]:         at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:125)
 8月 09 20:32:56 chisato.lyco.reco systemd-entrypoint[992]:         at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80)
 8月 09 20:32:56 chisato.lyco.reco systemd-entrypoint[992]: For complete error details, refer to the log at /var/log/elasticsearch/elasticsea>
 8月 09 20:32:57 chisato.lyco.reco systemd[1]: elasticsearch.service: Main process exited, code=exited, status=1/FAILURE
 8月 09 20:32:57 chisato.lyco.reco systemd[1]: elasticsearch.service: Failed with result 'exit-code'.
 8月 09 20:32:57 chisato.lyco.reco systemd[1]: Failed to start Elasticsearch.
lines 1-17/17 (END)

→ ElasticSearchがうまく稼働していない事象を確認。

原因調査

sudo tail -50 /var/log/elasticsearch/elasticsearch.log 
[2023-08-09T20:32:56,947][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [chisato.lyco.reco] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: Plugin [analysis-icu] was built for Elasticsearch version 7.17.10 but version 7.17.12 is running
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:173) ~[elasticsearch-7.17.12.jar:7.17.12]

と、パッケージ更新時にElasticSearchが上がったのに、その中のプラグインが対応していないためこの事象が発生です。

対処

  1. 入っていたプラグインをアンインストール
  2. 最新バージョンのプラグインを再インストール
  3. プラグイン再インストール後にElasticSearch起動

と、割と単純な作業です。

sudo /usr/share/elasticsearch/bin/elasticsearch-plugin remove analysis-icu
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin remove analysis-kuromoji
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
sudo systemctl restart elasticsearch.service

環境によってはサービス起動まで時間が掛かります

systemctl status elasticsearch.service
● elasticsearch.service - Elasticsearch
     Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-08-09 20:53:39 JST; 27s ago
       Docs: https://www.elastic.co
   Main PID: 2930 (java)
      Tasks: 93 (limit: 9152)
     Memory: 786.6M
     CGroup: /system.slice/elasticsearch.service
             ├─2930 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.tt>
             └─3114 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller

 8月 09 20:53:14 chisato.lyco.reco systemd[1]: Starting Elasticsearch...
 8月 09 20:53:39 chisato.lyco.reco systemd[1]: Started Elasticsearch.

起動を確認。

Growiで事象の解消確認

  1. Growiアプリにブラウザでアクセスします。
  2. 管理者権限でログインします。
  3. 設定>Elasticsearch管理を進み、以下のように接続されていればOKです。
Growi運用

growiのバージョンアップ/ダウングレード手順。(v7.1.0未対応)

概要

Wikiツールとして有効に利用しているgrowi。そのバージョンアップ及びダウングレード方法のメモです。

※これは、単にgitのみの手順です。他にシステム要件(他のミドルウェアのバージョンアップや切り戻しなど)がある場合は、それも合わせて実施することを注記いたします。

前提

※備考

本手順はv7.1.0には未対応です。

手順

さっくりとした手順

  1. growiのサービスを停止します。
  2. gitコマンドで最新版を引っ張ります。
  3. アップグレードを行います。
  4. growiのサービスを再開します。
  5. アップグレードされたことを確認します。

growiサービスを停止します

systemctl status growi.service

※ サービススクリプト名は自分の環境に合わせます。
※ active(running)を確認します

sudo systemctl stop growi.service
systemctl status growi.service

inactive (dead)を確認します

growiディレクトリに移動します

cd /opt/growi

自分の環境に合わせます。

リリースタグを確認します。

sudo git fetch --tags
sudo git tag -l

スペースで確認していき、上記リリースサイトと同じバージョンがあることを確認します。

チェックアウトとインストールを行います。

sudo git stash
sudo git checkout 【バージョン】
sudo yarn

※ マシンスペックによっては相当時間がかかります
※ Done in 【時間】と書かれていたらアップグレード完了です

sudo yarn app:build

growiサービスを起動します。

systemctl status growi.service

inactive (dead)を確認します

sudo systemctl start growi.service

※ 完全に起動していないと、アクセスしても503エラーが発生します。

systemctl status growi.service
サービススクリプトを[growi]にしている場合

active (running)を確認します

バージョンアップを確認します。

  1. ブラウザから設定したgrowiのドメイン/IPにアクセスします。
  2. 画面下部にあるバージョンがチェックアウトしたバージョンであることを確認します。
Growi運用

Growi v7.xでページ編集時に空白になる問題に対処(Apache リバースプロキシのWebSocket設定)

事象の内容

Wikiとしては致命的な弱点だったため、やむなくv6.3.5に戻したという経緯があります。

ですが、回避策が見つかりましたのでメモとして残します。

事象が発生した環境

備考

この事象は、以下で回避されました。

同一事象をネットで確認。

How to reproduce? (再現手順)

2台のHostPCでそれぞれGrowiを立ち上げています。A環境・B環境と呼称します。

「データ移行」機能を用いて、A環境からB環境にデータをインポートする B環境のGrowiに他のPCからアクセスする 記事の編集画面を表示する

What happens? (症状)

記事の編集画面が白紙になっており、そのまま保存しても記事の内容が失われる(添付画面参照)

と、事象が一致。

事象の原因

上記issueのツリーに

私の環境でも編集画面が空白になる現象が観測されました。

私は https-portal を使ってデプロイしているのですが、 growi-docker-compose/examples/https-portal にある WEBSOCKET: 'true' の環境変数を設定し損ねていたのが原因でした。 私の環境では、これを設定すると通常通り編集を行えることを確認しております。逆に、コメントアウトすると空白に戻ります。

とあります。

これを原因と断定し、対処に臨みます。

筆者が実施したのはオンプレ(Apacheによるリバースプロキシ)での対処です。

対応方法のさっくりとした手順

  1. 現状のgrowiのリバースプロキシの設定を確認。
  2. 設定ファイルのバックアップ。
  3. 設定ファイルを修正。
  4. 修正を反映。
  5. 事象の解決確認。

参考にしたURL

How to Reverse Proxy Websockets with Apache 2.4

現段階でのリバースプロキシの設定を確認します。

cat /etc/apache2/sites-available/growi.conf

自分の環境に合わせます。

    # socket.io の path を rewrite する
    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
    RewriteCond %{QUERY_STRING} transport=websocket    [NC]
    RewriteRule /(.*) ws://localhost:3000/ [P,L]

    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

設定そのものはgithubのgrowi公式ドキュメントに沿ったものでしたが、これが引っかかっていたようです。

設定ファイルのバックアップを取ります。

sudo cp -pi /etc/apache2/sites-available/growi.conf /path/to/backup/directory/growi.conf.$(date +%Y%m%d)

ファイル名は自分の環境に合わせます。適宜、任意のバックアップディレクトリを指定します。

diff -u /path/to/backup/directory/growi.conf.$(date +%Y%m%d) /etc/apache2/sites-available/growi.conf

差分が無いこと(エラーがないこと)でバックアップを確認します。

ファイルを修正します。

上記の設定ファイルを教義・信仰に沿ったエディタで編集します。(要管理者権限)

    # socket.io の path を rewrite する
    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
    RewriteCond %{QUERY_STRING} transport=websocket    [NC]
    RewriteRule /(.*) ws://localhost:3000/ [P,L]
     # WebSocketのための設定
     RewriteEngine On
     RewriteCond %{HTTP:Upgrade} =websocket [NC]
     RewriteCond %{HTTP:Connection} upgrade [NC]
     RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

編集後、差分を取ります。

diff -u /path/to/backup/directory/growi.conf.$(date +%Y%m%d) /etc/apache2/sites-available/growi.conf
-    # socket.io の path を rewrite する
-    RewriteEngine On
-    RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
-    RewriteCond %{QUERY_STRING} transport=websocket    [NC]
-    RewriteRule /(.*) ws://localhost:3000/ [P,L]
+     # WebSocketのための設定
+     RewriteEngine On
+     RewriteCond %{HTTP:Upgrade} =websocket [NC]
+     RewriteCond %{HTTP:Connection} upgrade [NC]
+     RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

設定を反映します。

sudo apache2ctl configtest

Syntax OKを確認します。

systemctl status apache2.service

active (running)を確認します。

sudo systemctl restart apache2.service
systemctl status apache2.service

active (running)を確認します。

事象の解決を確認します。

上記、設定を行ったGrowiサイトにアクセスします。

編集後、左ペイン(エディタ部分)がそのまま残っていれば対処完了です。

Growi運用

Ubuntu 20.04 / nginx環境でgrowiをv6.x→v7.0.xにアップグレード。(nginxリバースプロキシのWebSocket設定)

概要

長らくUbuntu 20.04で動かしているgrowi。こちらもv7.0.xにアップグレードできることを確認しました。

Apacheと同様、nginx環境でも、WebSocketを適切に設定する必要がありました。

環境

さっくりとした手順

  1. nodeのアップグレードを行います。
  2. growiサービスを停止します。
  3. growiのバージョンアップを行います。
  4. growiサービスを再開します。
  5. nginxのリバースプロキシ設定を書き換え、nginxサービスの再起動を行います。
  6. バージョンアップを行います。

nodeのアップグレード

node -v

v18.16.0はGrowi7系の対象外だったので、nodeを最新安定版に変えるところからスタートします。

sudo npm install -g n
sudo n --stable
node -v

20.15.0を確認します。

growiのアップグレード前のサービス停止

systemctl status growi.service

※ サービススクリプト名は自分の環境に合わせます。
※ active(running)を確認します

sudo systemctl stop growi.service
systemctl status growi.service

inactive (dead)を確認します

growiのアップグレード

cd /opt/growi

自分の環境に合わせます。

sudo aptitude install git-lfs

git-lfsを入れないとclone/build時に画像が表示されません

sudo git lfs pull
sudo git fetch --tags
sudo git tag -l

2024/06/30現在のv7系最新版、v7.0.11があることを確認しました。

sudo git stash
sudo git checkout 【バージョン】

上述した通り、v7.0.11を入力しました。

sudo yarn

v6.xよりも時間がかかります。

sudo yarn app:build

こちらも時間がかかります。

アップグレード後のgrowiサービス開始

systemctl status growi.service

inactive (dead)を確認します

sudo systemctl start growi.service
systemctl status growi.service
サービススクリプトを[growi]にしている場合

active (running)を確認します

nginxのバーチャルファイルを編集

v7.xは、WebSocketによる通信設定を正常に行わないと既存ドキュメントの編集ができません。(編集画面が空白になります)

そのため、nginxの設定を見直します。

sudo mv /etc/nginx/sites-available/growi.conf /path/to/backup/directory/growi.conf.$(date +%Y%m%d)

大幅に変更する必要があるため、cpではなくmvします。

【】内を自分の環境に合わせます。

cat <<- __EOF__ | sudo tee -a /etc/nginx/sites-available/growi.conf
upstream growi {
       server 【growiのIPアドレス】:3000;
}

server {
        listen 80;
        server_name 【サーバ名】;
        server_tokens off;
        return  301 https://$host$request_uri;
        access_log 【growiのアクセスログのフルパス】;
        error_log 【growiのエラーログのフルパス】 warn;
}

map $http_upgrade $connection_upgrade {
    default Upgrade;
    ''      close;
}

server {
        listen 443 ssl;
        server_name 【サーバ名】;
        server_tokens off;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
        ssl_dhparam /etc/nginx/dhparam.pem;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;
        add_header Strict-Transport-Security 'max-age=63072000';


        ssl_certificate 【サーバ証明書のフルパス】;
        ssl_certificate_key 【サーバ秘密鍵のフルパス】;

        access_log 【growiのSSLアクセスログのフルパス】;
        error_log 【growiのSSLエラーログのフルパス】 warn;


    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://growi;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_read_timeout 900s;
    }
}

__EOF__

こちらの設定ファイルはGrowiの公式ドキュメントに沿ったものです。

sudo nginx -t

を確認します。

sudo systemctl restart nginx.service

バージョンアップ確認

  1. 設定したgrowiのサイトにアクセスします。
  2. チェックアウトしたバージョンであることを確認します。
  3. 既存のページにアクセスし、編集できること(編集画面が白くならないこと)を確認します。
Growi運用

Growi v7.1.xのアップグレード手順

概要

V7.1.xからパッケージ管理がyarnではなくmnpmに変更されました。

その手順に合わせたメモです。

前提

※備考

v7.0.x以前はyarnを用います。

手順

さっくりとした手順

  1. growiのサービスを停止します。
  2. gitコマンドで最新版を引っ張ります。
  3. アップグレードを行います。
  4. growiのサービスを再開します。
  5. アップグレードされたことを確認します。

growiサービスを停止します

systemctl status growi.service

※ サービススクリプト名は自分の環境に合わせます。
※ active(running)を確認します

sudo systemctl stop growi.service
systemctl status growi.service

inactive (dead)を確認します

growiディレクトリに移動します

cd /opt/growi

自分の環境に合わせます。

リリースタグを確認します。

sudo git fetch --tags
sudo git tag -l

スペースで確認していき、上記リリースサイトと同じバージョンがあることを確認します。

チェックアウトとインストールを行います。

sudo git stash
sudo git checkout 【バージョン】
sudo pnpm install
sudo npm run app:build

growiサービスを起動します。

systemctl status growi.service

inactive (dead)を確認します

sudo systemctl start growi.service

※ 完全に起動していないと、アクセスしても503エラーが発生します。

systemctl status growi.service
サービススクリプトを[growi]にしている場合

active (running)を確認します

バージョンアップを確認します。

  1. ブラウザから設定したgrowiのドメイン/IPにアクセスします。
  2. 画面下部にあるバージョンがチェックアウトしたバージョンであることを確認します。