Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[7.0.x] Websocket による通信ができない環境で既存ドキュメントの編集できない #8722

Closed
potofo opened this issue Apr 16, 2024 · 8 comments

Comments

@potofo
Copy link

potofo commented Apr 16, 2024

7.0.1-RC.0のEdit画面でMarkdownのテキストが表示されません
過去のIssueは確認したつもりですが見逃していたらすみません。

現象
 ・Markdown プレビュー(右側ペイン)は表示される
 ・Makrdown テキスト(左側ペイン)
 ・「マークダウン形式でページをエクスポート」とするとMarkdownはダウンロード可能
 ・「更新履歴」画面では最新版との比較でMarkdownテキストが表示されている。
 ・「更新履歴」から過去バージョンを表示した際はMakrdown テキスト(左側ペイン)が正しく表示される
 ・最新版のみMakrdown テキスト(左側ペイン)が表示されないもよう
 

image

Environment

Host

item version
OS
GROWI 7.0.1-RC.0
node.js 20.12.0
npm 10.5.0
yarn 1.22.19
Using Docker yes/no
Using growi-docker-compose yes/no

(Accessing https://{GROWI_HOST}/admin helps you to fill in above versions)

Client

item version
OS Windows
browser Edge 123.0.2420.97 (公式ビルド) (64 ビット)

How to reproduce? (再現手順)

関係ないと思いますが、ローカルのWSLでは発生せず、AWSクラウドのEC2で発生しています。

  1. Docker-ComposeでDocker版を起動
  2. Growiにサインイン(ID/Pass)
  3. トップページで「Edit]ボタンを押す

What happens? (症状)

  • symptom 1
    Docker版のEdit画面で最新版のMarkdownのテキストが表示されない(更新履歴で過去のものは表示される)
  • symptom 2
Stack Trace

What is the expected result? (期待される動作)

  • Markdownが正しく表示される

Note

@potofo
Copy link
Author

potofo commented Apr 16, 2024

WSLのRocky-Linux 9.3では正しく表示されています。
現象が起きているのはAWS Ubuntu-22.04です。

@yuki-takei
Copy link
Member

AWS での情報を整理いただくことは可能でしょうか?もしリバプロがある場合は websocket の設定がうまくできていない場合にそういった症状が起こるということはあります。別の Issue ですが以下のような報告をしてくださっている方もいます。

#8677 (comment)

ブラウザの開発者ツールから websocket のリクエスト・レスポンスがどうなっているのかを見ると同様の原因かどうかを特定できるかと思います。

@potofo
Copy link
Author

potofo commented Apr 19, 2024

まず、Reverse-Proxyの設定(docker-compose.override.yml)は実施していません。
EdgeのDevToolの「ネットワーク」を確認したところ、以下のように表示されていました
websocketのサイズが0Bとなっているので類似問題と思われます。

名前            状況   種類   イニシエーター        サイズ  時間
pages.updatePost?path=%2F  304   xhr    47583-09d895d144a4698f.js:1  555B   108ミリ秒
socket.io/?EIO=4&      -    websocket 17413.2f3d0cd2a0a07825.js:1  0B    26ミリ秒

Reverse-Proxyは動かしていないので、AWSのSG(Securiry Group)を見直してみます。

@potofo
Copy link
Author

potofo commented Apr 19, 2024

切り分け中ですが、中間状況報告です。

切り分けのためにWSL2にubuntu-22.04.6をインストールしてReverse Proxy無しコンテナ構成で
docker-composeで動かしてみたところのWSL2のubuntuではEdit画面の左側ペインのMarkdownが
正しく表示されました。
また、WSL2の環境ではクライアントのEdgeのDevtoolsでwebsocketのログは見つかりませんでした。

AWS ubuntuで確認したこと
①UFWの設定は無効になっていることを確認
②SG(Security Group)は全てのLANアダプタのIPとの間で3000/tcpを許可している
 ⇒一時的に全解除して切り分けてみる
③https-portalを起動して確認(うまく起動できず設定を見直して再確認よてい)
 FQDN無しにも関わらずproductionで起動していたのが原因と思われる
 ⇒STAGEをlocalにして再トライ予定(WSL2ではリプロデュースしないので恐らく無関係)

WSL2との変化点としては以下の3点くらいです。
①企業プロキシがある
 Growiがクライアントサイトのjavascriptを使っているならば考えられる
②AWS環境
 SGの設定(コンテナー間はLocalhost I/Fを使用したws/wss通信のはずなので関係なさそう)
③AWSのAMI(Amazon Machine Imageベースのubuntuである)
 関係なさそうですがAMI独自のwebsocketが通信できないケースがないか
 念のためRedhat系のAMIでも試してみます。

その他気になる点
①FQDNアクセスではなくIPベースでアクセスしている点
②企業Proxy通過時にHTTP通信の警告が出ている点

@potofo
Copy link
Author

potofo commented Apr 22, 2024

上記の企業プロクシが影響していないかと思い
仮説を立てました
検証内容EdgeのDevtoolでwebsocketが失敗委している通信先を確認
socket.io/?EIO=4&transport=websocketの詳細を表示
DevToolで確認した内容は以下の通りです

要求URL(AWSのサーバのIP)
 ws://XXX.XXX.XXX.XXX:3000/socket.io/?EIO=4&transport=websocket
応答ヘッダ―
 無し
リクエストヘッダ
 記載あり

このことから、ws即ちWebsocketの非TLS通信がProxyを通過できずEDIT画面のMarkdownテキストの
要求に応答がない事から、上手く動かないと考えています。

何らかの設定でWebsocket通信を使用しない方法はありますか?

また、
①Markdownでエクスポート
②エクスポートしたMarkdownを入力
③更新
④再度「Edit」で開いた場合はMarkdownテキストは保持されまづが、DevtoolでWebsocketプロトコルを見ると
通信は失敗していますので、クライアントに保持されたデータで表示ができていると考えています。

@yuki-takei
Copy link
Member

このことから、ws即ちWebsocketの非TLS通信がProxyを通過できずEDIT画面のMarkdownテキストの
要求に応答がない事から、上手く動かないと考えています。

何らかの設定でWebsocket通信を使用しない方法はありますか?

v7 のエディタは yjs というライブラリを常時利用する仕様になっているため、今のところは websocket が必須になります。

@yuki-takei yuki-takei changed the title [7.0.1]Edit画面 [7.0.x] Websocket による通信ができない環境で既存ドキュメントの編集できない Apr 22, 2024
@potofo
Copy link
Author

potofo commented Apr 22, 2024

仮説の企業Proxy問題を切り分けてみました。
やはり、ws/wssがProxy通過できていない模様です。

切り分けとして、AWS内部にEC2でWindowsを構築し、VPC内でGrowiに接続したところ、Markdownテキスト部が正しく表示されました。
同じサーバで企業Proxyの有無が変化点なので、企業Proxyをws/wssが通過できていないことが問題のようです。

v7 のエディタは yjs というライブラリを常時利用する仕様になっているため、今のところは websocket が必須になります。

ありがとうございます。
v7ではWorkaroundは無いこと了解しました。

@potofo
Copy link
Author

potofo commented Apr 27, 2024

さらに切り分けを実施しました。
切り分けの結果、企業Proxyでwebsocketプロトロルが通過できるものと通過できないものがあることがわかりました。
今回のケースではA社のプロキシサービスでは通過できず、OSSなどで立ち上げたSquidやcernのhttpプロキシでは通過できるようです。
ひとまず、OSS側に振ることで、Makrdown テキスト(左側ペイン)を表示することができました。
websocketのOn/Offができることは理想ですが、無理に対応する必要もないかと思いました。

従って、本issue #8722はクローズいただいて結構です。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

2 participants