带有 SSL 的 Apache2 上的 Gitlab

Posted

技术标签:

【中文标题】带有 SSL 的 Apache2 上的 Gitlab【英文标题】:Gitlab on Apache2 with SSL 【发布时间】:2017-04-23 18:40:30 【问题描述】:

我已经使用https://about.gitlab.com/downloads/#ubuntu1404 在 Ubuntu 14.04 上成功安装了 Gitlab,但我正在努力进行重定向并通过网络 (https://my.example.com/gitlab) 访问它。

我已将/etc/gitlab/gitlab.rb修改为:

external_url 'https://my.example.com/gitlab'

nginx['enable'] = false

并重新配置为sudo gitlab-ctl reconfigure

如果我取消注释:

web_server['external_users'] = ['www-data']

我明白了:

配方编译错误 /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab-ee/recipes/default

NoMethodError ------------- nil:NilClass 的未定义方法 `-'

食谱追踪: --------------- /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/config.rb:21:in from_file' /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/default.rb:26:in from_file' /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab-ee/recipes/default.rb:18:in `from_file'

相关文件内容: ---------------------- /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/config.rb:

14: # 请参阅许可证以了解具体的管理语言 权限和 15: # 许可证下的限制。 16:#17: 18: Gitlab[:node] = 节点 19: 20: 如果 File.exists?('/etc/gitlab/gitlab.rb') 21>> Gitlab.from_file('/etc/gitlab/gitlab.rb') 22: 结束 23: 24: node.consume_attributes(Gitlab.generate_config(node['fqdn'])) 25:

我尝试将各种 gitlab.conf 添加到 /etc/apache2/sites-available/ 但 https://my.example.com/gitlab 不会重定向到 Gitlab 登录页面,我从在主页上运行的 Redmine 服务中得到“找不到页面”。当前default-ssl.conf 使用DocumentRoot /var/www 而Gitlab DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public。 Apache2 配置为使用 SSL。

更新 1

我已经做了符号链接:

sudo ln -s /opt/gitlab/embedded/service/gitlab-rails/public /var/www/gitlab

所以现在可以在default-ssl.conf中配置了。

Alias /gitlab "/var/www/gitlab"

不转发到 Gitlab 主页,而

Alias /gitlab "/var/www/gitlab/deploy.html"

效果很好。什么是 Gitlab 主页目录? index.html 文件在哪里?

更新 2

如果我添加

RackBaseURI /gitlab
RailsBaseURI /gitlab
<Directory /var/www/gitlab>
    Allow from all
    Options -MultiViews
</Directory>

输入https://my.example.com/gitlab/后出现错误

Web 应用程序无法启动

看起来 Bundler 找不到 gem。也许您没有安装此应用程序所需的所有 gem。要安装您的 gem,请运行:

捆绑安装

如果这不起作用,那么问题可能是由于您的应用程序在与预期不同的环境下运行造成的。请检查 > 以下内容:

Is this app supposed to be run as the www-data user?
Is this app being run on the correct Ruby interpreter? Below you will see which Ruby interpreter Phusion Passenger attempted to use.

-------- 例外情况如下:-------- 在任何源中都找不到 rake-10.5.0 (Bundler::GemNotFound)

/var/lib/gems/1.9.1/gems/bundler-1.12.5/lib/bundler/spec_set.rb:95:in block in materialize' /var/lib/gems/1.9.1/gems/bundler-1.12.5/lib/bundler/spec_set.rb:88:inmap!' /var/lib/gems/1.9.1/gems/bundler-1.12.5/lib/bundler/spec_set.rb:88:in materialize' /var/lib/gems/1.9.1/gems/bundler-1.12.5/lib/bundler/definition.rb:140:inspecs' /var/lib/gems/1.9.1/gems/bundler-1.12.5/lib/bundler/definition.rb:185:in specs_for' /var/lib/gems/1.9.1/gems/bundler-1.12.5/lib/bundler/definition.rb:174:inrequested_specs'

上述异常在更新 Ruby 后得到解决。

更新 3

现在我明白了

Alias /gitlab "/var/www/gitlab"
AllowEncodedSlashes NoDecode

<Directory /var/www/gitlab>
        Options Indexes FollowSymLinks MultiViews
        PassengerAppRoot "/var/www/gitlab"
        RailsBaseURI /var/www/gitlab
        AllowOverride None
        Order allow,deny
        allow from all
</Directory>

输入https://my.example.com/gitlab时如何配置Gitlab和Apache2获取Gitlab首页?

【问题讨论】:

【参考方案1】:

听起来您的 Apache 配置没有代理到端口 8080(独角兽)上的 GitLab 服务器。 https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache 提供了示例 Apache 配置文件。

http://ryansechrest.com/2015/08/use-apache-instead-of-built-in-nginx-in-gitlab-ce/ 上还有一篇很好的文章解释了将 Apache 与 GitLab Omnibus 结合使用的步骤。它已经有一年多的历史了,所以 Apache 配置可能有点过时了。使用该指南,但替换上面 gitlab-recipes 链接中的 Apache 配置,它应该可以工作。

【讨论】:

现在我在任何源中都找不到 rake-10.5.0 (Bundler::GemNotFound)。 收到此错误时正在运行什么命令?除了 Apache 配置之外,您还更改了什么?更改 Apache 配置不会导致 GitLab 应用程序突然抛出这些错误。 我已经解决了这个问题。我在浏览器中输入 Gitlab URL 后得到它,这是因为 Ruby 版本不正确和缺少权限。现在它转发到 /opt/gitlab/embedded/service/gitlab-rails/public 文件夹,我看到“/gitlab 索引”包含文件而不是 Gitlab 主页。 我很高兴您克服了 rake 错误。现在您遇到了我在回答中描述的问题 - 您指向 GitLab 公共网络服务器文件夹,但没有代理到实际应用程序。请参阅我的答案中的链接以了解后续步骤。【参考方案2】:

我有其他服务在 8080 上工作,所以我将 Unicorn 端口更改为 9099。 修改Gitlab配置sudo nano /etc/gitlab/gitlab.rb

external_url 'https://subdomain.example.com/gitlab'

web_server['username'] = 'apache' #'gitlab-www'
web_server['group'] = 'apache' #'gitlab-www'

nginx['enable'] = false

unicorn['listen'] = '127.0.0.1'
unicorn['port'] = 9099

重新配置的 Gitlab:sudo gitlab-ctl reconfigure

修改 Apache 配置 sudo nano /etc/apache2/apache2.conf 并添加:

ProxyPass         /gitlab http://127.0.0.1:9099/gitlab
ProxyPassReverse  /gitlab http://127.0.0.1:9099/gitlab
RequestHeader add X-Forwarded-Proto https

重新加载:

sudo service apache2 reload

【讨论】:

相关:serverfault.com/questions/822716/…

以上是关于带有 SSL 的 Apache2 上的 Gitlab的主要内容,如果未能解决你的问题,请参考以下文章

强制访问者默认使用 SSL - Apache2

Apache2 反向代理上的 Odoo 14 - 页面速度错误始终如一

Apache2 上的 nextcloud:请求实体太大

在 apache 中使用带有 ssl 的单声道

Apache 停止响应 SSL + mod_jk

怎样在apache2.2.17中加载PHP模块