皆さん、こんにちは。
Discourse をルート (/) に維持しつつ、カスタムアプリケーションをサブパスで提供するための正しいアーキテクチャについて確認したいと思っています。Discourse の内部を変更する必要はありません。
実現したいこと(最終目標)
https://mydomain.com/ → Discourse
https://mydomain.com/tickets → カスタムチケットシステム (Go + Gin)
要件:
- Discourse は
/ に留まり、カスタムアプリは /tickets に配置する必要があります
- 同じドメイン
- Discourse プラグインは使用しない
現在の環境
- OVH VPS (Ubuntu) - Docker 内で Discourse を実行中 (
/var/discourse)
- カスタム Go アプリケーションが同じサーバーの
127.0.0.1:8080 で実行中
- ホスト上にインストールされた外部の nginx (コンテナ内ではない)
/forum のようなサブフォルダで Discourse を実行しようとしているわけではありません。また、誰かが尋ねる前に言っておきますが、Discourse チケットプラグインは試しましたが、望むようには動作しませんでした。
nginxを使えば簡単にできますが、推奨はされておらず、discourseが/ticketsルートを何かに使用しているという情報はありません。
迅速なご返信ありがとうございます!nginxを使用していますが、うまくいきません。これが私の設定ですが、まだ成功しません。
app.ymlファイル内の設定です
ports:
- "127.0.0.1:4000:4000"
#- "80:80" # http
#- "443:443" # https
/etc/nginx/sites-enabled/filename
server {
listen 80;
server_name mydomain.com;
# ---- チケットアプリ ----
location ^~ /tickets {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Discourse認証ヘッダー
proxy_set_header X-Discourse-Username $http_x_discourse_username;
proxy_set_header X-Discourse-User-Id $http_x_discourse_user_id;
proxy_set_header X-Discourse-Groups $http_x_discourse_groups;
}
# ---- Discourse ----
location / {
proxy_pass http://127.0.0.1:4000;
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
具体的にどこで苦労しているのか詳しく教えていただけますか?
「いいね!」 2
pfaffman
(Jay Pfaffman)
5
それらの手順が、おそらく最善の指示になるでしょう。その手順に従いますが、ある意味逆の順序になります。外部リバースプロキシで、/ を Discourse に、/tickets をあなたのアプリケーションに提供するようにします。
@pfaffman ということは、設定ではなくコンセプトを再利用する、つまり、外部リバースプロキシを前面に配置して以下のようにルーティングする、ということですね。
- / → Discourse
- /tickets → カスタムアプリ
Discourse は /tickets については全く認識しない、と。
つまり、こちらのガイドに従えばよいのですね: Serve Discourse from a subfolder (path prefix) instead of a subdomain
「いいね!」 1
pfaffman
(Jay Pfaffman)
7
外部のnginxを使うのが一番簡単な方法だと思います。内部のnginxでそれを可能にするテンプレートを作成することも可能ですが、より複雑になり、得られるメリットは少ないと思います。
ええ、しかし、ssl/let’s encryptのテンプレートを削除することと、ソケットを使用すること以外に、Discourseコンテナに変更を加える必要はありません。(ですから、そのトピックのほとんどはあまり役に立ちません。)
動作するようになりました!
お二方とも、返信ありがとうございます!
Discourseヘッダーに追加した「Tickets」リンクも機能します。/ticketsがDiscourseのルートとして扱われ、Reactビューを切り替えようとするため、空欄に設定した場合(selfではなく)は機能します。空欄にすると完全なページ再読み込みが強制されます。
「いいね!」 1
pfaffman
(Jay Pfaffman)
9
それを修正したい場合、Ember のことはあまり得意ではありませんが、テーマコンポーネントを追加して /tickets のルートを作成し、何かを指示することで修正できると確信しています(…何かを)。また、DISCOURSE_HOST_ALIASES を使用して Discourse サーバーに別のサブドメイン(例: tickets.mydomain.com)を追加し、そのドメインにリンクすることでリダイレクトが実行され、Ember がルートを掴もうとしなくなると思います。