web-dev-qa-db-ja.com

Gitlab構成の問題:: NGINXユニコーンポートの競合

Linux CentOSサーバーでApache、Git、PHP、PostGreSQL、MySQLを使用して部分的にセットアップすることができました GitlabChef Cookbookバージョン を実行しています。 ここ からrpmを取得しました。私はそれを使ってGitリポジトリをより良く、より視覚的に管理したかったのですが、これは良い選択のようでした。しかし今、私はそれを機能させるのに問題にぶつかります。

それを実際に機能させてすべてのファイルを更新するために、gitlab-ctl reconfigureを使用して構成を再実行することにしました。 2回目の実行は機能しました:

Chef Client finished, 4 resources updated
gitlab Reconfigured!

完全なログ を参照してください

ホスティング業者はすでにNGINXを8080に配置しており、LAMPプロジェクトが実行されているポート80でApacheが実行されているという議論にはなりません。しかし現在、RubyのUnicornWebサーバーはNGINXと競合しているようです。私はNGINXを少し使ったことがありますが、それほど多くはありません。これがGitlabでの最初の刺し傷です。とにかく、これは私のホスティング業者の助けを借りて私が理解したものです。

Testserver.domain.netにログインして、次のコマンドを渡すと、次のようになります。

netstat -ln |grep 8080なるほど

tcp        0      0 127.0.0.1:8080              0.0.0.0:*                   LISTEN      

したがって、8080で何かが実行されています。私のホスティング業者によると、0.0.0.0:8080で実行されるはずです。そして、そのポートで何が実行されているかを確認すると、

netstat -tupln |grep 8080
tcp        0      0 127.0.0.1:8080              0.0.0.0:*                   LISTEN      21627/Unicorn maste 

プロセスID21627を確認すると、次のように表示されます。

cat /proc/21627/cmdline 
Unicorn master -E production -c /var/opt/gitlab/gitlab-Rails/etc/Unicorn.rb /opt/gitlab/embedded/service/gitlab-Rails/config.ru

これはRubyプロセスであり、NGINXプロセスではありません。

したがって、NGINXはUnicornと競合しているようです。

そして、nginxのログを確認すると、次の理由でnginxを実行できないことがわかります。

tail -f /var/log/gitlab/nginx/error.log 
2014/07/28 09:43:10 [emerg] 23122#0: bind() to 0.0.0.0:8080 failed (98: Address already in use)
2014/07/28 09:43:10 [emerg] 23122#0: still could not bind()
2014/07/28 09:43:12 [emerg] 23123#0: bind() to 0.0.0.0:8080 failed (98: Address already in use)
2014/07/28 09:43:12 [emerg] 23123#0: bind() to 0.0.0.0:8080 failed (98: Address already in use)
2014/07/28 09:43:12 [emerg] 23123#0: bind() to 0.0.0.0:8080 failed (98: Address already in use)
2014/07/28 09:43:12 [emerg] 23123#0: bind() to 0.0.0.0:8080 failed (98: Address already in use)
2014/07/28 09:43:12 [emerg] 23123#0: bind() to 0.0.0.0:8080 failed (98: Address already in use)
2014/07/28 09:43:12 [emerg] 23123#0: still could not bind()

私はUnicorn.rbをグーグルで検索し、これを見つけました リンク 。私もそれを読んだ:

Unicornは、低遅延、高帯域幅の接続で高速クライアントにのみサービスを提供し、Unix/Unixライクなカーネルの機能を利用するように設計されたラックアプリケーション用のHTTPサーバーです。遅いクライアントは、Unicornと遅いクライアントの間に要求と応答の両方を完全にバッファリングできるリバースプロキシを配置することによってのみサービスを受ける必要があります。

ファイル/var/opt/gitlab/gitlab-Rails/etc/Unicorn.rbを確認すると、8080が使用されていることがわかります。問題は、UnicornがNGINXと連携する必要があるため、ポートを変更しないようにする必要があることです。

Gitlabを機能させるにはどのような手順を踏む必要がありますか? GitlabはUnicornなしで動作できますか?私はそうは思わないでしょう。次に、そのポートまたはおそらくNGINX用に別のポートを選択する必要がありますか?

9
rhand

/etc/gitlab/gitlab.rbのポートをオーバーライドする必要があります。再構成後に手動構成が失われるため、/var/opt/gitlab/...をいじらないでください。特に読んでください NGINXリスンポートの設定 。ダウンロードページに次の文があります:トラブルシューティングと構成オプションについては、Omnibus GitLab readmeを参照してください。これは人々に見られないのだろうか:/そうでなければ、もっと明確にすべきだ。

9
axil

Axilのコメントに追加します。 /var/opt/gitlab/gitlab-Rails/etc/Unicorn.rbファイルでも変更する必要がありました。その後の再起動は機能しましたが、構成は失われませんでした。 Unicornマスターは、何度も再起動した後でも、/ etc/gitlab /gitlab.rbファイルから変更を選択していませんでした。

9
Akarsh

/etc/gitlab/gitlab.rbファイルを更新する必要があります。

ファイルを変更するときは、変更する行のコメントを解除していることを確認してください。 chefを使用しているため、Sudo gitlab-ctl reconfigure;を実行するときにgitlab.rbファイルが適切に構成されていると、対応するファイルが適切に更新されます。次に、Sudo gitlab-ctl restartでサービスを再起動します。

Sudo lsof -Pni |grep <port number>はポートの競合を判断するときの友達です

2
zeusAlmighty

ドキュメント は 'nginx [' listen_port '] = 8080'の設定を提案していますが、これを実行すると、Unicornはポート8080をバインドできませんでした。代わりにnginxポートを8888に設定すると、機能しました。これは、nginxポートを8080に設定するには、Unicornをデフォルトのポート8080から別のポートに変更する必要があることを示唆していますが、その可能性については調査しませんでした。 nginxポートを設定する例が、私が知っているように、デフォルト構成で機能する設定であるとしたら、それは素晴らしいことです。私は今朝だけインストールしました。

0
Ian