nginxへようこそ!新規インストール後

こんにちは、

Discourse の初心者で、インストール中に詰まってしまいました。Ubuntu Server 18.04 の仮想マシンを構築し、インストール手順を大まかに追って進めました。

「大まかに」というのは、クラウドサーバーではなく Ubuntu Server を使用している点です。Docker は事前にインストールせず、discourse-setup に任せてインストールさせました。また、メールサーバーは未設定ですが、セットアッププロセスには妥当な回答を入力しました。これが致命的な問題なのかはわかりません。DNS はすべて設定済みで、サーバーには静的 IP アドレスが割り当てられています。

ブートストラップ後、サーバーの FQDN にアクセスすると、「Congratulations, you installed Discourse!」ではなく「Welcome to nginx!」というページが表示されます。

このインストールはラボ環境用であり、外部からはアクセスできません。

Marc。

サーバーに nginx はインストールされていますか?インストールされているべきではありません。discourse-setup が検出するはずです。DNS の設定は正しいですか?

サーバーに Nginx がインストールされていません。DNS に関しては、サーバー用に A レコードと PTR レコードを設定しています。他に必要な要件はありますか?

Marc.

そのページが表示されるのは、DNS を誤ったサーバーに設定している場合か、NGINX がコンテナ外でポート 80 を占有し、コンテナからの応答を妨げている場合のみです。

「いいね!」 2

Web ブラウザをサーバーの IP アドレスに直接指しても、Nginx のウェルカムページが表示されます。

Ubuntu サーバーに SSH で接続している場合:
marc@community:~$ locate nginx
/var/discourse/image/base/install-nginx
marc@community:~$

さらに、Ubuntu サーバー上で実行している場合:
sudo find / -iname "*nginx*"
/var/lib/docker/overlay2 下に多数のファイルが…
/var/discourse/image/base/install-nginx
/var/discourse/shared/standalone/letsencrypt/deploy/nginx.sh
/var/discourse/shared/standalone/log/var-log/nginx

以下のコマンドの結果を表示してください:

lsof -i:80

コマンド lsof -i:80 は何も出力しません。

では、ポート80には何もリスニングしていないということでしょうか?

Dockerが:80でリスニングしている場合(正常なインストールではこれが達成され、コンテナ内のnginxが何かを認識するために必要となります)、以下のような表示が得られるはずです:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 890 root    4u  IPv6 961922      0t0  TCP *:http (LISTEN)

コンテナ外にnginxがインストールされておらず、Dockerもそのポートでリスニングしていない場合、nginxのウェルカムページが表示される唯一の可能性は、ネットワーク設定の誤りです。

おっしゃる通りのようです。サーバーの IP アドレスに対して私のラップトップで nmap を実行した結果は以下の通りです。

Starting Nmap 7.01 ( https://nmap.org ) at 2020-04-10 23:34 AEST
Nmap scan report for community.aureus-group-sb.com (192.168.12.35)
Host is up (0.0010s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp open ssh
MAC Address: 0C:8B:FD:CD:AF:EB (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 1.74 seconds

ネットワークの問題は、以下に限定されず、以下のようなものが考えられます。

  • VM 側のポリシーによるアクセス制限(ufw など)
  • 仮想サーバー側のポリシーによるアクセス制限(ネットワークモードの不適切な設定)
  • ネットワーク側のポリシーの不適切な設定(サブネット間の ACL など)
  • DNS の不適切な設定

上記のいずれも当てはまらない場合のみ、Discourse に問題があると言えます。標準的なインストール手順に従っているとのことですが、ご自身でも認めている通り、標準とは程遠い環境でのインストールとなっています。

もし貴組織で月額 5 ドルの費用を負担できるのであれば、時間を考慮すると、クラウド上に設置し、クラウド VPS のファイアウォールを貴社の環境からのみページを返すように制限する方が、結果として安上がりになるかもしれません。

「いいね!」 2

現時点では、このセットアップの学習面が主な目的です。これを掌握できたら、ホスティングオプションを検討する予定です。

挙げられたネットワークの側面についてですが、

  • ufw は非アクティブで、iptables が実行されています:Ubuntu サーバーのデフォルトインストールに変更を加えていません。
    ** iptables の設定を確認すると、input チェーンのポリシーは「すべて許可」で、output チェーンも同様です。forward チェーンには Docker 関連の参照がいくつかあります(下記参照)。
  • VM の vNIC はブリッジモードで構成されており、物理ネットワークに直接接続されています。
  • 作業中のラップトップと VM は同じサブネット上にあります。
  • DNS の正確な要件については確信が持てません。仕様を探してみましたが、決定的なドキュメントは見つけられませんでした。DNS に関しては、サーバーを名前で、FQDN で、IP アドレスでそれぞれ ping が通ります。DNS に関連して他に何が必要かについては確信が持てません。

VM と外部世界の間にはどのようなネットワークポリシーが存在しますか?

git pull が成功し、discourse-setup を実行できた場合、コンテナの内容を GitHub からダウンロードするために接続するのを妨げるものはありましたか?

サーバーがアクセス可能なアドレスを持っていない場合、Let’s Encrypt は失敗します。HTTPS を無効にするために YML を変更しましたか?

「いいね!」 1

VM はインターネットに接続でき、GitHub へのアクセスに制限はありません。discourse-setup を実行する際、Let’s Encrypt アカウントのメールアドレス?(スキップするには Enter を押してください)[me@example.com]: のオプションを空白のままにしました。

YML ファイルは変更していません。

そのフィールドを空白のままにすると、証明書の問題に関するアラートは受け取れませんが、コンテナが Let’s Encrypt の有効化を試みることは防げません。

はい、いくつかの大きな問題に焦点を当てましたが、それらは元の投稿(OP)とは関係ありません。ネットワーク上に nginx が存在し、ページを表示しているようですが、仮想マシン上でのテストでは nginx がインストールされていないか、Docker がリッスンしていないことになります。

その状況がどうなっているのかを特定したら、次のステップは YML ファイルを正しく設定することです。現時点では、そのページを表示している原因を特定する必要があります。

「いいね!」 2

私も同じことを思っていました。そのページがどこから来ているのか、調べてみます。

「いいね!」 1

私が学んだことは以下の通りです。サーバーをシャットダウンすると、IP アドレス、名前、FQDN すべてに対して ping が通らなくなります。IP アドレスにアクセスすると、Firefox から標準的な「接続できません」ページが表示されます。

したがって、IP アドレスの競合は発生していないと結論付けられます。

VM の電源を入れた後、ブラウザからの接続もできなくなり、再び標準的な「接続できません」ページが表示されます。この動作は、lsof -i:80 の出力から予想されていたものと一致しています。

docker exec -it <cont.id> /bin/bash でコンテナの中を確認し、ps aux の出力をチェックしました。そこに以下の行がありました:

root 2030 0.2 0.0 2160 1328 ? Ss 14:10 0:01 runsv nginx

つまり、コンテナ内で nginx が実行されているようですが、nsenter -t 1446 -n netstat -plnt の出力は以下の通りです:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      3606/unicorn master 
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      3590/postmaster     
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      3591/redis-server * 
tcp6       0      0 :::5432                 :::*                    LISTEN      3590/postmaster     
tcp6       0      0 :::6379                 :::*                    LISTEN      3591/redis-server *

これは、コンテナがポート 80 と 443 でリスンしていないことを示しているのでしょうか?

投稿が新しいトピックに分割されました:Discourse の代わりに ‘nginx へようこそ’ と表示される場合