ちょっとした息抜きに『ジャイプル』のソロバリアントを行いました。
ルールは先に示したとおりです。
一本目を一点差で敗北後、二本目と三本目は快勝。
勝ったゲームは共に価格が高い商品を固め取りできたのも幸いです。
そして、たアップグレードトークンも、没入感が段違い。
重いゲームが買える値段であるために、かなり覚悟を決めた商品ではありますが、お気に入りのゲームですので手にしておいてよかったです。
ちょっとした息抜きに『ジャイプル』のソロバリアントを行いました。
ルールは先に示したとおりです。
一本目を一点差で敗北後、二本目と三本目は快勝。
勝ったゲームは共に価格が高い商品を固め取りできたのも幸いです。
そして、たアップグレードトークンも、没入感が段違い。
重いゲームが買える値段であるために、かなり覚悟を決めた商品ではありますが、お気に入りのゲームですので手にしておいてよかったです。
話は一週間ほど前。
毎年恒例である王子・飛鳥山の紫陽花撮影をしてきました。
「ついでだから」とブロンプトンも携えて。
と、装備を原点回帰。いつでも輪行できるようにしたという形。
自転車の走行は快適。気がつけばレインボーブリッジの袂まで進み、
東京タワーも納めることができました。
「今日はここで自転車を走らせよう」という気分ですぐにいける構成は正しかったです。
何かと便利で使用を続けている情報カード。
カードが散らばりやすいという欠点はあるためにB6のクリップボードを利用してきました。
上が使っていたもの。
を解消するため、下のプラスチック製に切り替えです。
こうすることで、
なりました。地味に下に出っ張りがあるので紙が落ちるのをある程度防いでくれるのもお気に入り。
この手の文具は即時性が命なので、カスタムしがいがあります。
方を対象としています。
OS:Ubuntu 20.04
openssl version -a
OpenSSL 1.1.1f 31 Mar 2020
built on: Wed May 24 17:14:51 2023 UTC
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-mSG92N/openssl-1.1.1f=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific
ssh -V
OpenSSH_8.2p1 Ubuntu-4ubuntu0.9, OpenSSL 1.1.1f 31 Mar 2020
任意の方法でシステム全体のバックアップを取ります。とはいえ、EOL/脆弱性対応のため切り戻しは基本的に許されません。
sudo aptitude install build-essential zlib1g-dev libssl-dev libpam0g-dev libselinux1-dev libkrb5-dev checkinstall zlib1g-dev git
aptitudeを用いています。必要に応じてaptを使ってください。
OpenSSLをソースコードからコンパイルしてインストールする一連の作業は管理者権限で実行します。
sudo su -
cd /hoge && pwd
任意のディレクトリを指定します
git clone https://github.com/openssl/openssl -b openssl-3.3.1
2024/07/03現在の最新版をダウンロードします。
※root昇格済みなのでsudoが不要であることにご注意ください
cd openssl
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
Configuring OpenSSL version 3.3.1 for target linux-x86_64
Using os-specific seed configuration
Created configdata.pm
Running configdata.pm
Created Makefile.in
Created Makefile
Created include/openssl/configuration.h
**********************************************************************
*** ***
*** OpenSSL has been successfully configured ***
*** ***
*** If you encounter a problem while building, please open an ***
*** issue on GitHub <https://github.com/openssl/openssl/issues> ***
*** and include the output from the following command: ***
*** ***
*** perl configdata.pm --dump ***
*** ***
*** (If you are new to OpenSSL, you might want to consult the ***
*** 'Troubleshooting' section in the INSTALL.md file first) ***
*** ***
**********************************************************************
make
makeは時間がかかります。状況を時折確認しながら待ちましょう。
make test
make 同様に時間がかかります。
make install
cat <<- __EOF__ | tee -a /etc/ld.so.conf.d/openssl-3.3.1.conf
/usr/local/ssl/lib64
__EOF__
ldconfig -v
mv /usr/bin/c_rehash /path/to/backup/c_rehash.$(date +%Y%m%d)
任意の退避ディレクトリを指定します
mv /usr/bin/openssl /path/to/backup/openssl.$(date +%Y%m%d)
任意の退避ディレクトリを指定します
cat <<- __EOF__ | tee -a /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/ssl/bin"
__EOF__
source /etc/environment
echo $PATH
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/ssl/bin"
と表示されることを確認します
openssl version -a
OpenSSL 3.3.1 4 Jun 2024 (Library: OpenSSL 3.3.1 4 Jun 2024)
built on: Wed Jul 3 02:04:25 2024 UTC
platform: linux-x86_64
options: bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/ssl/lib64/engines-3"
MODULESDIR: "/usr/local/ssl/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa3203578bffff:0x7a9
これで、Ubuntu20.04でもOpenSSL3.3.1を利用することが可能になりました。
sudo reboot
強制的に3.3系に上げるので、その後、1.1.xがアップグレードされる可能性を防ぎます。
sudo apt-mark hold openssl
sudo aptitude hold openssl
これに続けて、CVE-2024-6387の対応を行います。
sudo mkdir /var/lib/sshd && sudo chmod -R 700 /var/lib/sshd/ && sudo chown -R root:sys /var/lib/sshd/
cd /hoge && pwd
任意のディレクトリを指定します。
wget -c http://mirror.exonetric.net/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
上記CVEの脆弱性に対応したバージョンを用います。
tar -xzf openssh-9.8p1.tar.gz
cd openssh-9.8p1
which openssl
/usr/local/ssl/bin/openssl
本手順でSSLのバージョンアップを行った場合の環境となります。
./configure --with-kerberos5 --with-md5-passwords --with-pam --with-selinux --with-privsep-path=/var/lib/sshd/ --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/ssl
--with-ssl-dir=/usr/local/ssl
は、opensslがあるディレクトリを指定します。
make
sudo make install
sudo reboot
この時点でSSH接続できていれば、ほぼ設定完了です。
ssh -V
OpenSSH_9.8p1, OpenSSL 3.3.1 4 Jun 2024
バージョンアップされていることを確認します。
強制的に9.x系に上げるので、その後、8.xがアップグレードされる可能性を防ぎます。
sudo apt-mark hold openssh-server
sudo aptitude hold openssh-server
これの結果となります。
限定環境での感想です。
結論から言ってしまうと、この形。以下、理由を述べていきます。
昨今のWebアプリの宿命と言えます。特にサーバーサイドレンダリングを重視しているGrowi v7以降は、低電圧版CPUでは満足に動かせません。(ビルドに15分以上かかりました)
Chromebookを選んでいた理由でもあります。
紙と同じぐらいの速度や携帯性を求めているので、重くしたのでは本末転倒です。
これも、小さくない欠点でした。クライアントとサーバを兼ねるため、CPUにかかる負荷は増大。それにつれてバッテリーも消費してしまいます。
こちらは個人的な所見。
検証を兼ねているので、かなり頻繁にOSの再インストールを行います。そのたびにバックアップやリストアをするのは面倒です。
そういうわけで、「PCに沿ったアプリを選定する」大切さを学びました。
『ライザのアトリエ3』終盤になって手に入る各キャラクターの最強武器。
などは投入できる素材が宝石やインゴットなどで固められています。
これらは超特性を付与するのが難しいので、ちょっとした技が必要です。
『ライザのアトリエ3』のシステムであり、既存の3つの特性の他につけられる特別な特性です。
など、いずれも強力なものばかり。
ただし、これには「素材からしか引き継がれない」という制約があります。
つまり、超特性を付与した調合素材(宝石やインゴットなど)からは引き継がれず、地道に素材集めをするしかありません。
前述したように、元から「宝石」「インゴット」を持つ素材は限られているので鍵の力を使います。
ここでは、「宝石」を持つ素材を集めるケースです。
必要なのは秘密の鍵のアドベンチャー効果『レア採取ポイント出現』。(アンコモン/レアに発現)
続いて、ゴールデンアックスが必要です。効果1の採取ランクと効果2の採取量アップをもたせておきます。
これらを装備した状態でネメド地方の沿岸灯台までファストトラベルします。
灯台近くにある木が視界に入っている状態で、レア採取ポイント出現の鍵を使います。
木全体が光り、超特性付きの素材が採取可能になります。
採取道具を斧(ゴールデンアックス)に切り替え、チャージスイングで一気に取ります。
効果2が発言した状態なら、一回のフルスウィングで20〜25個程度のトライホーンが採取可能です。
これは、宝石を持つ数少ない素材の一つ。しかも、木から取れるのでチャージスイングで効率的に採取可能です。
あとは、これらを用いて調合/リビルドを行います。
投入可能素材が宝石(必須素材のアルクァンシェル含む)とインゴットと制約のあるパトリツィアの最強武器「エフロレッセンス」に超特性「英雄の心得」を付与することができました。
長らくUbuntu 20.04で動かしているgrowi。こちらもv7.0.xにアップグレードできることを確認しました。
Apacheと同様、nginx環境でも、WebSocketを適切に設定する必要がありました。
node -v
OSが少々古いため、Ubuntu 20.04のnodeはv18.16.0
。Growi7系の対象外だったので、nodeを最新安定版に変えるところからスタートします。
sudo npm install -g n
sudo n --stable
node -v
20.15.0
を確認します。
systemctl status growi.service
※ サービススクリプト名は自分の環境に合わせます。
※ active(running)を確認します
sudo systemctl stop growi.service
systemctl status growi.service
inactive (dead)を確認します
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
こちらも時間がかかります。
systemctl status growi.service
inactive (dead)を確認します
sudo systemctl start growi.service
systemctl status growi.service
サービススクリプトを[growi]にしている場合
active (running)を確認します
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 /var/log/nginx/growi/ssl_access.log;
error_log /var/log/nginx/growi/ssl_error.log 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
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
を確認します。
sudo systemctl restart nginx.service
Dockerを用いない方法でGrowiのv7.xをUbuntu22.04がインストールできたので、その手順を示します。
の基本的な設定が済んだという状況です。
太字部分はv7で必要になる手順です。
sudo aptitude install build-essential git git-lfs apt-transport-https
※v6系と異なり、git-lfsをインストールしない状態でgit-clone
を行うと正しくビルドが行えません。
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
sudo aptitude install redis-server
systemctl status redis-server
active(running)を確認します。
sudo systemctl enable redis-server
sudo aptitude install openjdk-17-jdk
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
※この後、デフォルトパスワードが表示されますが、控えておく程度にしましょう。
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
※この作業だけ管理者権限で実行します。
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
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
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
sudo aptitude update
sudo aptitude install mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools
※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
sudo npm install -g yarn
※Growi v6.1.0から必須パッケージとなりました。
sudo yarn global add turbo
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したディレクトリにします。
growi-start.sh
#!/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
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
http://設定したドメイン でアクセスします。
この初期サイトが表示されたらインストール完了です。
先のエントリーで述べたように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' の環境変数を設定し損ねていたのが原因でした。
私の環境では、これを設定すると通常通り編集を行えることを確認しております。逆に、コメントアウトすると空白に戻ります。
とあります。
これを原因と断定し、対処に臨みます。
参考にした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サイトにアクセスします。
編集後、左ペイン(エディタ部分)がそのまま残っていれば対処完了です。
Nextcloudを29.0.3にアップデート後、以下の警告を確認しました。
データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。 オプションのインデックス "schedulobj_lastmodified_idx" がテーブル "schedulingobjects"にありません
こちらに対応します。
また、nextcloudの実行ユーザーはwww-dataです。
cd /var/www/html/nextcloud && pwd
自分の環境に合わせます。
sudo -u www-data php occ db:add-missing-indices
Adding additional schedulobj_lastmodified_idx index to the oc_schedulingobjects table, this can take some time...
oc_schedulingobjects table updated successfully.
解消方法がある程度示されているので、Nextcloudは親切です。
Powered by WordPress & Theme by Anders Norén