我已经在 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 启动一个干净的虚拟机,因为它(在我看来)与现有设置不兼容。