WordPress を 2 つ目の IP と同じ VPS で実行できますか?

こんにちは。

Discourse は独自のサーバーで実行することが推奨されていますが、このプロジェクトは私自身の費用で運営しており、基本的には趣味の範囲です。少なくとも短期的には収益化の展望や意図はほとんどありません。

そのため、別の VPS を購入する代わりに、2 つ目の IP アドレスを申請し、IP ベースの Apache 仮想サーバー上で WordPress を実行することを考えています。これによりコストを抑えることができます。

これは可能でしょうか、それとも非推奨でしょうか?

リバースプロキシの設定に精通している場合は、2 番目の IP アドレスは不要です。

Discourse と WordPress の両方を Unix ソケット(またはより高いポート)でリッスンさせ、その前にリバースプロキシソフトウェア(Caddy を推奨)を配置して、同じ IP で blog.example.comforum.example.com を提供することも可能です。

ただし、このような設定に不慣れな場合は、それぞれを独自の VPS で実行する方がはるかに簡単です。それぞれの豊富なドキュメントに従うだけで済みます。

あなたが推奨する設定は問題なく機能しますか?

Discourse を最初に試していた頃、HAProxy で何か設定しました。当時はサーバー関連の知識があまりなく、今でも初心者ですが、とにかく試して、その過程で HAProxy について少し学びました。記憶が正しければ、SSL に問題があり、Discourse の動作もやや不安定でしたが、おそらく私が何か間違っていたのでしょう。

そこで質問ですが、あなたが推奨する設定を、不安定さや「奇妙な」問題なしに、過度な微調整をせずに実現することは可能でしょうか?

はい、リバースプロキシを適切に設定すれば可能です。実際、このサイト自体もそのように運用されています。

ただ、ここであらゆるリバースプロキシの設定に対するサポートを提供することはできません。

素晴らしい!

最後のお願いですが、この設定を行うためのヘルプドキュメントへのリンクをいただけますか?

Nginx Run other websites on the same machine as Discourse

Caddy Use Caddy instead of NGINX as your reverse proxy

Apache Set up Discourse on a server with existing Apache sites

素晴らしいですね。

以前私が試行錯誤していた頃、Apache のガイドに従いました。しかし、その記事では以下の点が明確ではありません。

  1. Discourse を再構築する際に SSL を無効にする必要があるかどうか(そして、Let’s Encrypt のメールアドレスを入力しないだけで無効化できるのか)。
  2. discourse/app.yml でどのポートを「公開(exposed)」すべきか(ガイドには…

“8888:80” # ホストのポート 8888 をコンテナのポート 80 (http) に転送

… という行の例しか示されておらず、app.yml ファイルの直後の行(デフォルトでは…

  • “443:443” # https

… となっている行)がどのように記述すべきかについての説明がありません。

追伸:app.yml ファイルを確認してこの投稿を書いている最中に、以下の行が存在することに気づきました。

Lets Encrypt (https) を追加したい場合は、この 2 行のコメントを外してください

  • “templates/web.ssl.template.yml”
  • “templates/web.letsencrypt.ssl.template.yml”

… しかし、現時点ではこれらの行のコメントを外していないにもかかわらず、私の Discourse アプリは SSL 有効で動作しています。現在の設定(プロキシなし)や、目指している設定(プロキシと Apache + WordPress を使用)において、これらの行のコメントアウトがどれほど重要なのでしょうか?

:slight_smile:

リバースプロキシに不慣れで、簡単に2番目のIPアドレスを取得できる場合、それは悪い解決策ではありません。以下のように設定してください。

expose:
  - "192.168.1.1:80:80"   # http
  - "192.168.1.1:443:443" # https

これで解決しました。

ありがとう。

Configure direct-delivery incoming email for self-hosted sites with Mail-Receiver のリンク先で、同じテクニックを実行できます。

ありがとうございます。これで解決しました。私の VPS プロバイダーは、VPS に設定されたメインの IP に加えて、安価な「フローティング IP」を提供しています。このソリューションは私にとって非常に便利で、シンプルであるだけに、もっとよく文書化されるべきだと思います。

expose:
   - "my_floating_ip:80:80"
   - "my_floating_ip:443:443"

それでうまくいきましたか?ドロプレットがフローティング IP のことを知っているとは思いませんでした。

さて、問題なく動作しています:

まず、フローティングIPを購入してVPSに紐付けます。
次に、サーバーがそれを使用するように設定します:

vim /etc/network/interfaces.d/60-my-floating-ip.cfg

auto eth0:1
iface eth0:1 inet static
    address your.Float.ing.IP
    netmask 32

保存してネットワークを再起動します:

sudo service networking restart

これで2つのIPアドレスが使えるようになりました。メインのIPを使って複数のnginxサイトを構成していますが、/etc/nginx/sites-enabled の設定行にご注意ください:

listen my_main_IP:80 myserver.name;
listen my_main_IP:443 ssl http2 myserver.name;

そしてフローティングIPは /var/discourse/containers/app.yml で以下のように設定します:

expose:
   - "my_floating_ip:80:80"
   - "my_floating_ip:443:443"

すべて正常か確認します(元のIPはfloating_ipとmain_ipとして編集済み):

# netstat -taunp | grep -i listen
tcp        0      0 floating_ip:80      0.0.0.0:*               LISTEN      19775/docker-proxy  
tcp        0      0 main_ip:80          0.0.0.0:*               LISTEN      13151/nginx: master 
tcp        0      0 0.0.0.0:22          0.0.0.0:*               LISTEN      725/sshd            
tcp        0      0 floating_ip:443     0.0.0.0:*               LISTEN      19763/docker-proxy  
tcp        0      0 main_ip:443         0.0.0.0:*               LISTEN      13151/nginx: master 
tcp6       0      0 :::22                      :::*                    LISTEN      725/sshd       

名前を挙げてよいのか分かりませんが、サーバーはHetzner Cloud上にあり、フローティングIP機能はとても便利で価格も適切です。

なるほど!そんなことができるなんて知りませんでした!

このテクニックを使えば、複数のドメイン向けの 複数の受信メールサーバー を実行することもできます。

素晴らしい仕事ですね!

なるほど!だから仕組みがわからなかったんですね。

これは古いトピックであることは承知していますが、皆さんに感謝したかったのです。これは、私が取り組んできた同様の問題に対する数日間の作業を節約できるかもしれません。この貴重な情報を皆さんと共有してくれてありがとう!!