apache2のインストールを試みています

こんにちは、

タイトルにもある通り、sudo apt install apache2 を実行しました。

しかし、サーバーが起動せず、以下のエラーが表示されます:

(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
pam_unix(sudo:session): session closed for user root
Control process exited, code=exited status=1
apache2.service: Failed with result 'exit-code'.
Failed to start The Apache HTTP Server.

これを解決するにはどうすればよいでしょうか?ご協力ありがとうございます。

そのポートですでに別のプロセスが実行されています。それを特定して停止する必要があります。

netstat -an | grep :80 を実行すると、それが何かが表示される場合があります。

「いいね!」 3
tcp6       0      0 :::80                   :::*                    LISTEN

tcp6?奇妙ですね。

だから、apache2.conf のポート番号を他のものに変更すべきでしょうか?この Web サーバーで今後動作するサイトに影響が出ないか心配です。

申し訳ありません、フラグを見落としていました。プログラム名を表示するには netstat -anp を使用してください。

「いいね!」 4

なぜですか?Discourseをインストールした場合、ポート80と443を使用します。

既存のApacheサイトがあるサーバーでDiscourseを設定する方法を参照してください。

「いいね!」 1

試してみます、ありがとう!

それに、@schleifer さん、30005/docker-proxy と表示されています。

はい、でもいいえです。少し立ち戻って、この問題を整理してみましょう。

以前は、Apache で複数の Web サイトを運用されていたようです。Apache はポート 80 と 443 でリッスンし、「プロキシ(転送)」として「仮想ホスト」にリクエストを振り分けていました。そのため、同じサーバー上で複数の Web サイトを、すべて同じポート(80 と 443)で動作させることができていました。これは「LAMP 101」、つまり仮想ホストの基本的な仕組みです。

さて、公式の OOTB(Out of the Box)方法で Discourse をインストールすると、Discourse は同じポートにバインドしようとして失敗します。なぜなら、Apache がすでにそれらのポートを使用(バインド)しているからです。この場合、以下の選択肢があります。

  1. Discourse を Unix ドメインソケット上で実行し、Apache を設定して Discourse アプリを仮想ホストとしてリバースプロキシする。

注:これは私がテスト済みで動作しますが、Discourse によって公式にも非公式にもサポートされていません。

  1. Apache から nginx に移行し、すべての Web サーバーを nginx で実行する。Discourse-docker 本番アプリには Unix ドメインソケットを使用し、Discourse アプリを仮想ホストとしてリバースプロキシする。

注:これも Discourse によって公式にはサポートされていません。また、Apache サイトを運用している多くの人は、Apache2 の mod_rewrite やエンコードされた geo-ip モジュールの設定を nginx に移植するのが「大変(bear)」だと感じるでしょう。ただし、もちろん可能です。特に、アプリが nginx と Apache2 の両方で構築されている場合は比較的簡単ですが、それでも公式にはサポートされていません。

  1. Discourse Docker コンテナをポート 80 や 443 以外のポートで公開する。

注:これも(実際には)推奨されていません(ただし、公式にはサポートされていると記憶しています)。しかし、多くの人は https://my-great-discourse-app.org:3334 のようにポート番号を入力して Web アプリにアクセスしたくないため、本番環境ではこの方法はほとんど採用されません。開発環境であれば別ですが。

「すべての詳細を把握していない」前提での私の推奨は、LAMP を多く扱っており、現在は Discourse も増えている経験から、それぞれを別のサーバーで実行することです(これは Discourse によって公式にサポートされています)。しかし、予算が非常に厳しいため、どうしても同じサーバーで全てを動かす必要がある場合、あるいは単に 1 つの複雑なサーバーで管理したい場合は、Apache2 を設定して、Discourse アプリとの間で Unix ドメインソケットを介したリバースプロキシを行う方法を学ぶ必要があります。

私はこれをテスト済みで、Apache2 を設定して Unix ドメインソケットを介して Discourse をリバースプロキシすることは可能ですが、この解決策は(全く)公式にはサポートされていません。

注:HAProxy を用いた Apache2 の設定に関するリンクは、私が簡単に動作させることができなかったため、採用しませんでした(HAProxy だけに依存する必要はなく、「昔ながらの方法」でも可能です)。ただし、この Discourse チュートリアルに従う方が良いでしょう。

少しでもお役に立てれば幸いです、@nekodroid

「いいね!」 1

非標準ポートでの公開は 100% サポート対象外です。いくつかのトピックで、ソケットにバインドする代わりにサイト所有者がポートを変更し、リバースプロキシを使用して 80/443 にマッピングしている例を見ましたが、最終的に :port が必要になる場合はサポートできません。