こんにちは、
タイトルにもある通り、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.
これを解決するにはどうすればよいでしょうか?ご協力ありがとうございます。
schleifer
(Andrew Schleifer)
2020 年 5 月 25 日午前 10:35
2
そのポートですでに別のプロセスが実行されています。それを特定して停止する必要があります。
netstat -an | grep :80 を実行すると、それが何かが表示される場合があります。
「いいね!」 3
tcp6 0 0 :::80 :::* LISTEN
tcp6?奇妙ですね。
だから、apache2.conf のポート番号を他のものに変更すべきでしょうか?この Web サーバーで今後動作するサイトに影響が出ないか心配です。
schleifer
(Andrew Schleifer)
2020 年 5 月 25 日午前 11:23
4
申し訳ありません、フラグを見落としていました。プログラム名を表示するには netstat -anp を使用してください。
「いいね!」 4
pfaffman
(Jay Pfaffman)
2020 年 5 月 25 日午後 12:40
5
なぜですか?Discourseをインストールした場合、ポート80と443を使用します。
既存のApacheサイトがあるサーバーでDiscourseを設定する方法 を参照してください。
「いいね!」 1
試してみます、ありがとう!
それに、@schleifer さん、30005/docker-proxy と表示されています。
neounix
(Dark Matter)
2020 年 5 月 25 日午後 1:29
7
はい、でもいいえです。少し立ち戻って、この問題を整理してみましょう。
以前は、Apache で複数の Web サイトを運用されていたようです。Apache はポート 80 と 443 でリッスンし、「プロキシ(転送)」として「仮想ホスト」にリクエストを振り分けていました。そのため、同じサーバー上で複数の Web サイトを、すべて同じポート(80 と 443)で動作させることができていました。これは「LAMP 101」、つまり仮想ホストの基本的な仕組みです。
さて、公式の OOTB(Out of the Box)方法で Discourse をインストールすると、Discourse は同じポートにバインドしようとして失敗します。なぜなら、Apache がすでにそれらのポートを使用(バインド)しているからです。この場合、以下の選択肢があります。
Discourse を Unix ドメインソケット上で実行し、Apache を設定して Discourse アプリを仮想ホストとしてリバースプロキシする。
注:これは私がテスト済みで動作しますが、Discourse によって公式にも非公式にもサポートされていません。
Apache から nginx に移行し、すべての Web サーバーを nginx で実行する。Discourse-docker 本番アプリには Unix ドメインソケットを使用し、Discourse アプリを仮想ホストとしてリバースプロキシする。
注:これも Discourse によって公式にはサポートされていません。また、Apache サイトを運用している多くの人は、Apache2 の mod_rewrite やエンコードされた geo-ip モジュールの設定を nginx に移植するのが「大変(bear)」だと感じるでしょう。ただし、もちろん可能です。特に、アプリが nginx と Apache2 の両方で構築されている場合は比較的簡単ですが、それでも公式にはサポートされていません。
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 チュートリアルに従う方が良いでしょう。
It’s not as daunting as it sounds!
While this may sound a bit intimidating at first, it’s really not all that bad. You basically need to do two things:
Install HAProxy (or an alternative) which will take over port 80 and then divert your Discourse traffic to your docker container, and all your other sites to your usual Apache set-up.
Let Apache know which port to listen for.
While this is only a rough guide, it should do a good job of pointing you in the right direction. Let’s get star…
少しでもお役に立てれば幸いです、@nekodroid
「いいね!」 1
Stephen
(Stephen)
2020 年 5 月 25 日午後 1:38
8
非標準ポートでの公開は 100% サポート対象外です。いくつかのトピックで、ソケットにバインドする代わりにサイト所有者がポートを変更し、リバースプロキシを使用して 80/443 にマッピングしている例を見ましたが、最終的に :port が必要になる場合はサポートできません。