(unsupported-install のタグを付けましたが、いずれにしても専門家の意見をいただけると幸いです )
皆さん、Docker Compose を使用した、比較的シンプルな(?) マルチ Docker コンテナ設定で、基本的な Discourse イメージを実行しようとしています。
基本は以下の通りです。
フォーラムはサブフォルダ /board に配置しています (https://blah.com/board)。
nginx は /board:443 へのリクエストを localhost:4000 に転送しています。
Discourse rails はポート 4000 で実行していました(3000 は別のものに使用されているため)。
Rails の環境変数には、これを機能させるための重要な設定が含まれています。
DISCOURSE_RELATIVE_URL_ROOT: “/board”
ここで、Discourse のバージョンを更新しました(Ember-CLI より前)が、動作しなくなりました。
そのため、Ember-CLI のコンテナを追加し、以下を実行します。
discourse-ember:
command: bin/ember-cli --port 4000 --proxy "http://localhost:4200"
これにより、Ember が最初に 4000 へのリクエストを処理するようになります。
Discourse rails コンテナをポート 4200 に移動して開始します。
まず良いニュースです。
さて、悪いニュースです。
ブラウザで動作しません。なぜでしょうか?
なぜなら、Discourse にアクセスしようとしているようですが、以下をリクエストしているからです。
/bootstrap.json
エラーが発生します。
Discourse Ember CLI Proxy Error
Error: Could not get http://0.0.0.0:4200/bootstrap.json
FetchError: invalid json response body at http://0.0.0.0:4200/bootstrap.json?for_url=%2Fboard reason: Unexpected token N in JSON at position 0
代わりに
/board/bootstrap.json (これはデータを返します)。
代わりにこの設定を使用すると:
discourse-ember:
command: bin/ember-cli --port 4000 --proxy "http://0.0.0.0:4200/forum"
Rails のエラーが発生します。
Routing Error
No route matches [GET] "/forum"
それにもかかわらず、数行離れたところに以下が表示されます。
bootstrap_path GET /bootstrap(.:format)
bootstrap#index {:format=/(json|html|\*\/ \*)/}
これは、まさにアクセスしようとしていたパスではありませんか?
Ember に、ブートストラップ情報を取得しようとしているときにサブフォルダにプロキシするように、どのように賢く設定すればよいでしょうか?つまり:
http://0.0.0.0:4200/forum/bootstrap.json
この場合、Ember は独自のコンテナで実行されていることを忘れないでください。
「いいね!」 1
pfaffman
(Jay Pfaffman)
2022 年 10 月 18 日午後 3:47
2
コンテナはどのように構築していますか? docker-composeからそのコンテナを起動していますか?
. . . えーと、ember-cliの動作を妨げる可能性のある環境設定がいくつかありましたが、削除しましたか?(もう無視されていると思いますが?)
はい、これらのコンテナ定義はdocker-composeにあります。
現在、ember-cliコンテナには環境設定はありません。
pfaffman
(Jay Pfaffman)
2022 年 10 月 18 日午後 3:52
4
コンテナをランチャーで構築し、Serve Discourse from a subfolder (path prefix) instead of a subdomain の内容を使用してから、docker-compose で起動しますか?
プロキシは何ですか?他の必要なものを設定するために、ランチャーで Discourse を起動し、docker-args を使用するだけではだめでしょうか?Traefik の場合、次のようなことを行います。
--docker-args "-l traefik.frontend.rule=Host:{{discourse_hostname}};PathPrefix:/{{discourse_subfolder}} \
-l traefik.frontend.entryPoints=https \
-l traefik.backend={{discourse_shortname}} \
-l traefik.port=80 \
{{ docker_extra_args | default('')}}"
「いいね!」 1
Jay Pfaffman:
ランチャーでコンテナを構築していますね
いいえ、Discourse Docker Image(バージョン2.8.9)を使用しているだけです。
(実際にはイメージはローカルでホストされていますが、ほぼ同じです。)
discourse:
command: bin/rails s -b 0.0.0.0 -p 4200
image: discourse:v2.8.9
environment:
DISCOURSE_PORT: 4200
DISCOURSE_RELATIVE_URL_ROOT: “/board”
<SNIP>
ports:
- 4200:4200
discourse-ember:
command: bin/ember-cli --port 4000 --proxy "http://0.0.0.0:4200"
image: discourse:v2.8.9
ports:
- 4000:4000
pfaffman
(Jay Pfaffman)
2022 年 10 月 18 日午後 4:24
6
うーん。その場合、どうやって機能したのか説明できません。サブフォルダーのインストールをサポートするものを追加するランチャーでイメージをビルドする必要があると思います。
解決しました。
Ember CLIコンテナにこれを追加しなかった私のミスでした(すでにRailsコンテナにはありました):
DISCOURSE_RELATIVE_URL_ROOT: "/board"
おっと:sweat_smile:
参考までに、ソースのキーファイルはこれだと思います:
"use strict";
module.exports = function (environment) {
let ENV = {
modulePrefix: "discourse",
environment,
rootURL: process.env.DISCOURSE_RELATIVE_URL_ROOT || "/",
locationType: "history",
historySupportMiddleware: false,
EmberENV: {
FEATURES: {
// Here you can enable experimental features on an ember canary build
// e.g. EMBER_NATIVE_DECORATOR_SUPPORT: true
},
EXTEND_PROTOTYPES: {
// Prevent Ember Data from overriding Date.parse.
Date: false,
「いいね!」 3
system
(system)
クローズされました:
2022 年 11 月 17 日午後 9:42
8
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.