1:编辑你的 gitlab.rb 文件...

1:编辑你的 gitlab.rb 文件...

我已经在 Ubuntu 12.04 上使用默认包安装了 Gitlabhttps://about.gitlab.com/downloads/

{编辑以澄清}

我已经设置 Apache 来代理并运行安装在端口 8888 上的 nginx 服务器(或者我是这样认为的)。

由于我已经安装了 Apache,因此我必须在 localhost:8888 上运行 nginx。问题是,现在所有图像(例如头像)都由 提供http://localhost:8888,并且 Gitlab 提供的所有结帐 URL 也是 localhost - 而不是使用我的域名。

如果我更改/etc/gitlab/gitlab.rb为使用该 url,则 Gitlab 将停止工作并出现 503。

有什么想法可以告诉 Gitlab 向世界展示什么 URL,即使它实际上是在本地主机上运行?

/etc/gitlab/gitlab.rb好像:

# Change the external_url to the address your users will type in their browser
external_url 'http://my.local.domain'
redis['port'] = 6379
postgresql['port'] = 2345
unicorn['port'] = 3456

看起来/opt/gitlab/embedded/conf/nginx.conf像:

server {
        listen       localhost:8888;
        server_name  my.local.domain;

[更新]

如果我没有指定 localhost:8888 作为 external_url,则 nginx 似乎仍在监听错误的端口。我在/var/log/gitlab/nginx/error.log

2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: still could not bind()

Apache 设置如下:

<VirtualHost *:80>
  ServerName my.local.domain

  ServerSignature Off
  ProxyPreserveHost On

  AllowEncodedSlashes NoDecode

  <Location />
    ProxyPass http://localhost:8888/ 
    ProxyPassReverse http://127.0.0.1:8888
    ProxyPassReverse http://my.local.domain
  </Location>
</VirtualHost>

如果 Gitlab 在 localhost:8888 上监听,这似乎可以将所有内容代理回来 - 我只需要 Gitlab 开始显示正确的 URL,而不是 localhost:8888。

答案1

根据文档Gitlab的github

# Copy the example GitLab config
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

# Make sure to change "localhost" to the fully-qualified domain name of your
# host serving GitLab where necessary

还要确保 Apache 正在发送适当的代理标头。

在这种情况下,nginx 配置无关紧要,因为您使用 Apache 进行代理。只需将其删除或关闭即可。

答案2

我很伤心没有人能给出明确的答案,答案是在众多其他帖子和一些巧妙的会议编辑之间拼凑起来的。我把所有答案都放在了这里,为大家节省我刚刚浪费的两个小时。

我的设置是,我有一个托管多个站点并托管 HTTPS 的 apache,我将其配置为指向 gitlab 的反向代理。因此,我希望 gitlab 在电子邮件中生成的 URL 指向 apache 的安全 URL。因此,要做到这一点...

1:编辑你的 gitlab.rb 文件...

在 CentOS 7 上,它位于 /opt/gitlab/embedded/cookbooks/gitlab/libraries/gitlab.rb

并改变线路...

external_url nil

external_url "http://<yoururl>:81"

2:运行 gitlab-ctl reconfigure

您的 nginx 现在将托管在端口 81 上,但通过电子邮件发送的 URL 将看起来像“http://:81”,而不是您的安全 apache 代理。因此要做到这一点...

3:编辑为 gitlab 生成的 rails 配置文件

在 CentOS 7 上,它位于 /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

并改变线路...

## Web server settings (note: host is the FQDN, do not include http://)
host: <yoururl>
port: 81
https: false

## Web server settings (note: host is the FQDN, do not include http://)
host: <yoururl>
port: 443
https: true

4:使用 gitlab-ctl restart 重新启动 gitlab

然后只需确保 nginx 正确启动,如果需要,请运行 gitlab-ctl tail nginx 并查看它吐出什么错误。

警告:如果您再次运行 gitlab-ctl reconfigure,则需要再次进行此编辑。我到处搜索,但找不到一种方式可以很好地处理此问题,以便重新配置。这是有人可以要求 gitlab 添加的功能请求,应该很小。一个可选变量“actual_url”,当设置时用于任何生成的 URL。

5:利润!:)

答案3

我最终按照这个文档操作,其中包括禁用 nginx 并让你的 apache 安装代理 gitlab,这对我来说更有意义,而且无论如何,当我尝试通过 nginx 代理进行代理时,我遇到了一些资产仍然从 :8081 加载的问题

http://ryansechrest.com/2015/08/use-apache-instead-of-built-in-nginx-in-gitlab-ce/

vi /etc/gitlab/gitlab.rb

设置外部 URL

external_url 'http://mygitlab.web.site/'

更改 www 用户和组

web_server['username'] = 'www-data'
web_server['group'] = 'www-data'

禁用 nginx

nginx['enable'] = false

设置 git 服务器的端口(在文件末尾)

gitlab_git_http_server['listen_network'] = "tcp"
gitlab_git_http_server['listen_addr'] = "localhost:8282"

重新配置 gitlab

gitlab-ctl reconfigure

更改您的虚拟主机配置

<VirtualHost *:80>
  ServerName git.domain.com
  DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public

  ProxyPreserveHost On
  AllowEncodedSlashes Off

  <Location />
    Order deny,allow
    Allow from all
    ProxyPassReverse http://127.0.0.1:8080
    ProxyPassReverse http://git.domain.com/
  </Location>

  RewriteEngine on
  #Don't escape encoded characters in api requests
  RewriteCond %{REQUEST_URI} ^/api/v3/.*
  RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA,NE]

  #Forward all requests to gitlab-workhorse except existing files like error documents
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_URI} ^/uploads/.*
  RewriteRule .* http://127.0.0.1:8282%{REQUEST_URI} [P,QSA]
</VirtualHost>

重启 gitlab

gitlab-ctl restart

答案4

我有同样的问题,改变

external_url 'http://my.local.domain'

external_url 'http://my.local.domain:8888'

并重新生成 gitlab 配置,这将修复 nginx 配置。Apache 代理应该修复链接,以便再次删除 8888。

希望这会有所帮助,我最终从现有环境中删除了 gitlab,并为 gitlab 启动一个干净的虚拟机,因为它(在我看来)与现有设置不兼容。

相关内容