Gitlab 配置问题:: NGINX 独角兽端口冲突

Posted

技术标签:

【中文标题】Gitlab 配置问题:: NGINX 独角兽端口冲突【英文标题】:Gitlab Configuration Issues:: NGINX Unicorn Port Conflict 【发布时间】:2014-09-20 14:57:52 【问题描述】:

我已经设法在带有 Apache、Git、php、PostGreSQL 和 mysql 的 Linux CentOS 服务器上部分设置了Gitlab。我正在运行Chef Cookbook version。我从here 获得了 rpm。我想用它来更好、更直观地管理我的 Git 存储库,这似乎是一个不错的选择。但现在我遇到了让它工作的问题。

为了让它真正工作并更新所有文件,我决定使用gitlab-ctl reconfigure 重新运行配置。第二次运行确实有效:

Chef Client finished, 4 resources updated
gitlab Reconfigured!

见full log

主办方已经将 nginx 放在 8080 上,而不是与运行在端口 80 上的 Apache 争论,我们有一个 LAMP 项目正在运行。但是现在 Ruby 的 Unicorn Web Server 似乎和 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 

当我们检查进程 id 21627 时,我们看到

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 并找到了这个 link。我还读到:

Unicorn 是用于 Rack 应用程序的 HTTP 服务器,旨在仅提供服务 低延迟、高带宽连接上的快速客户端,并采取 Unix/类 Unix 内核中的功能优势。慢客户端应该 只能通过放置能够完全缓冲的反向代理来提供服务 Unicorn 和慢速客户端之间的请求和响应。

当我检查文件 /var/opt/gitlab/gitlab-rails/etc/unicorn.rb 时,我确实看到它使用 8080。问题是 Unicorn 似乎应该与 NGINX 一起工作,所以也许我不应该更改端口。

我应该采取什么步骤才能使 Gitlab 正常工作? Gitlab 可以在没有独角兽的情况下工作吗?我认为不会。然后我应该为它选择另一个端口还是为 NGINX 选择另一个端口?

【问题讨论】:

当我在 /var/opt/gitlab/nginx/etc/gitlab-http.conf 中更改为端口 8888 并使用 gitlab-ctl restart 重新启动时,我得到:ok: run: nginx: (pid 3211) 0s ok: run: postgresql: (pid 3217) 0s ok: run: redis: (pid 3226) 1s ok: run: sidekiq: (pid 3232) 1s timeout: run: unicorn: (pid 21627) 94720s, got TERM 所以仍然是小问题,但我可以访问 domain.com:8888 上的站点。 【参考方案1】:

您应该覆盖/etc/gitlab/gitlab.rb 中的端口。不要乱用/var/opt/gitlab/...,因为任何手动配置在重新配置后都会丢失。特别是阅读Setting the NGINX listen port。在下载页面中有一句话:有关故障排除和配置选项,请参阅 Omnibus GitLab 自述文件。我想知道这是否被人们看不到:/如果没有,我们应该更清楚。

【讨论】:

【参考方案2】:

添加到 Axil 的 cmets。我也必须在 /var/opt/gitlab/gitlab-rails/etc/unicorn.rb 文件中更改它。之后重新启动,我没有丢失我的配置。即使在多次重启后,独角兽大师也没有从 /etc/gitlab/gitlab.rb 文件中选择我的更改。

【讨论】:

这对我也有帮助。更改 /etc/gitlab.gitlab.rb 上的任何内容都没有帮助,更改 /var/opt/gitlab/gitlab-rails/etc/unicorn.rb 有帮助。我想知道为什么端口被硬编码为 8080 重新启动会起作用 (gitlab-ctl restart),但是当您更新到新版本时,会运行重新配置 (gitlab-ctl reconfigure),因此任何更改都将丢失。 docs.gitlab.com/omnibus/settings/…中有新文档【参考方案3】:

你应该更新 /etc/gitlab/gitlab.rb 文件。

确保在修改文件时取消注释正在更改的行。它正在使用厨师,所以如果 gitlab.rb 文件在您运行sudo gitlab-ctl reconfigure; 时配置正确,它将正确更新相应的文件。然后sudo gitlab-ctl restart重启服务。

sudo lsof -Pni |grep <port number> 是您确定端口冲突时的朋友

【讨论】:

虽然 Axil 的回答是正确的,但你的回答对我来说更能说明这个问题。我必须对 gitlab.rb 文件进行两项修改:gitlab_workhorse['auth_backend'] = "http://localhost:8080" 和这个:unicorn['port'] = 8080。然后执行sudo gitlab-ctl reconfigure,最后执行sudo gitlab-ctl restart。非常感谢!【参考方案4】:

The documentation 建议设置 'nginx['listen_port'] = 8080' 但是当我这样做时,这个独角兽未能绑定端口 8080。我将 nginx 端口设置为 8888 并且它起作用了。这表明为了将 nginx 端口设置为 8080,需要将 unicorn 从默认端口 8080 更改为其他端口,但我没有探索这种可能性。如果设置 nginx 端口的示例是一个可以在默认配置下工作的设置,那就太好了,我的也是,我知道 - 我今天早上才安装它。

【讨论】:

以上是关于Gitlab 配置问题:: NGINX 独角兽端口冲突的主要内容,如果未能解决你的问题,请参考以下文章

Linux(centos7)下gitlab使用自己安装的nginx配置

nginx根据域名转发

GitLab中文社区版Docker镜像安装启动及配置

docker中的plantuml,gitlab nginx配置不起作用

docker部署gitlab改端口

虚拟机中的jenkins无法访问&Nginx配置