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配置