【问题标题】:Forwarding to GitLab Subdomain with Existing Nginx Installation使用现有 Nginx 安装转发到 GitLab 子域
【发布时间】:2015-06-06 19:59:49
【问题描述】:

我一直在关注instructions from the GitLab wiki,但是,似乎缺少一些关键信息。在“使用非捆绑的 Web 服务器”部分中,它从未解释我需要如何重新配置​​我的 Nginx 安装以将代理反向代理到 GitLab。

基本上,我希望将 GitLab 安装在 git.example.com 下,但我似乎无法为我现有的 Nginx 安装找到可以执行此操作的配置设置。 wiki 页面继续讨论配置现有的Passenger/Nginx 安装,但我没有Passenger,所以我认为这不适用于我的情况。

我想最简单的解决方案是,如果有办法告诉 Gitlab 使用它的内置 Nginx 并只监听内部端口,然后让我的其他 Nginx 转发到该端口,但我似乎无法弄清楚如何配置 Gitlab 来处理这个问题。

任何帮助将不胜感激。

【问题讨论】:

    标签: ubuntu nginx reverse-proxy gitlab


    【解决方案1】:

    根据@cyberchis 的回答,我简化了流程,并且我已经完成了两次相同的设置。我希望它也对你有用。

    1. 查看 nginx 的用户

      1.1。使用nano /etc/nginx/nginx.conf 打开 nginx.conf

      1.2。检查第 1 个。行user www-data;,这里的用户是www-data

    2. 编辑gitlab的external_url

      2.1。使用nano /etc/gitlab/gitlab.rb 打开 gitlab.rb

      2.2。将external_url 'GENERATED_EXTERNAL_URL' 行编辑为external_url 'http://gitlab.yourdomain.com'

      2.3。取消注释并将nginx['enable'] = true 行更改为nginx['enable'] = false

      2.4。取消注释并将web_server['external_users'] = [] 行更改为web_server['external_users'] = ['www-data']

    3. 为 gitlab 添加配置文件

      3.1。从gitlab repository下载gitlab-omnibus-nginx.conf

      3.2。进入文件所在目录,将这个文件复制到nginx中,cp /directory-to-this-file/gitlab-omnibus-nginx.conf /etc/nginx/sites-enabled

      3.3。使用nano /etc/nginx/sites-enabled/gitlab-omnibus-nginx.conf 打开此文件。

      3.4。将此行 listen 0.0.0.0:80 default_server; 更改为 listen 0.0.0.0:7001; // gitlab 在端口 7001 上运行

      3.5。将此行 listen [::]:80 default_server; 更改为 listen [::]:7001; // gitlab 在端口 7001 上运行

      3.6。将此行 server_name YOURSERVER_FQDN 更改为 server_name www.yourdomain.com

    4. 配置 nginx

      4.1。使用nano /etc/nginx/nginx.conf 打开 nginx.conf

      4.2。添加此配置

    http {
    
       ...
      
       server {
           listen 80;
           server_name gitlab.yourdomain.com;
           location / {
               proxy_pass http://127.0.0.1:7001;
           }
       }
    }
    
    1. 重新配置gitlab并重新加载nginx

      5.1。 sudo gitlab-ctl reconfigure

      5.2。 sudo systemctl reload nginx

    2. 将防火墙配置为导出端口 7001可选

      由于 gitlab 在我的本地服务器上运行,因此必须允许从外部访问端口 7001。启用它的最简单方法是运行ufw allow 7001

    现在 gitlab 在您应该访问的子域 gitlab.yourdomain.com 上运行。

    【讨论】:

      【解决方案2】:

      @fillky 的帖子无法完全帮助我安装 ubuntu 18.04。这些是我让 Gitlab 工作的步骤。

      对于 Ubuntu 18.04(http 模式):

      1. 安装 Gitlab(来自https://about.gitlab.com/install/#ubuntu 的第 1 步和第 2 步)
      2. 编辑配置文件 /etc/gitlab/gitlab.rb 并取消注释或附加以下内容(在此处找到 https://docs.gitlab.com/omnibus/settings/nginx.html#configuration):

        nginx['enable'] = false

        独角兽['enable'] = false

        gitlab_rails['internal_api_url'] = 'http://gitlab.yourdomain.com'

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

      3. 重新配置 Gitlab

        sudo gitlab-ctl 重新配置

      4. 为 nginx 启用乘客(https://www.phusionpassenger.com/library/install/nginx/install/oss/bionic/ 中的步骤 1 到 3)

      5. 重新加载 nginx 以检查一切是否仍然有效。如果不是:谷歌是你的朋友

        sudo nginx -s 重新加载

      6. 更改您的 nginx 配置以支持 gitlab。在 /etc/nginx/sites-enabled 中使用原始文档的 Vhost 步骤中的内容创建一个“gitlab”文件:

        https://docs.gitlab.com/omnibus/settings/nginx.html#vhost-server-block

      7. 重新加载nginx,让修改生效

        sudo nginx -s 重新加载

      8. 安装 node.js(如果尚未安装),因为 gitlab 需要执行 JavaScript

        sudo apt-get install node.js

      9. 浏览到您的 gitlab 网址。应该会提示您输入 root gitlab 帐户的密码。在下一步中,您将能够使用该帐户登录

      就是这样!如果要启用 HTTPS,请执行以下额外步骤:

      1. 将 /etc/gitlab/gitlab.rb 中的“external_url”从 http 更改为 https
      2. 更改 nginx 配置 /etc/nginx/sites-enabled/gitlab 以使用 ssl

        听 0.0.0.0:443 ssl;
        听 [::]:443 ipv6only=on ssl; 开启ssl; ssl_certificate #链接到您的公共 ssl 证书 ssl_certificate_key #链接到您的私有 ssl 密钥 ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA- AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL :!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers 开启; ssl_session_cache 共享:SSL:10m; ssl_session_timeout 5m;

      3. 重新配置 gitlab

        sudo gitlab-ctl 重新配置

      4. 重新加载 nginx

        sudo nginx -s 重新加载

      【讨论】:

        【解决方案3】:

        我花了几天时间才把所有事情都整理好,所以我想分享一下让这一切正常工作所采取的步骤。这是为网站安装 Nginx 并使其与现有的 gitlab 存储库(使用 Nginx 的捆绑版本)一起工作的方法。我的 gitlab 存储库位于我网站的一个名为“repos”的子域中。

        打开终端并安装 Nginx:

        sudo apt-get update
        sudo apt-get install nginx
        

        编辑配置文件/etc/nginx/nginx.conf:

        找到你的用户名,你在配置 gitlab 时会用到: 就我而言,这是“nginx”:

        user   nginx;
        

        在 http{ } 块内添加这一行:

        $include /etc/nginx/sites-enabled/*;
        

        例子:

        http{
            include  etc/nginx/mime.types;
            include  etc/nginx/sites-enabled/*;
        
            (more stuff...)
        }
        

        编辑配置文件/etc/gitlab/gitlab.rb:

        改变这一行:

        external_url 'GENERATED_EXTERNAL_URL' 
        

        收件人:

        external_url 'http://www.example.com/repos'  // (whatever your server name is)  
        

        取消注释并更改此行:

        nginx['enable'] = true
        

        收件人:

        nginx['enable'] = false
        

        取消注释并更改此行:

        web_server['external_users'] = []    
        

        收件人:

        web_server['external_users'] = ['nginx']     // or whatever your nginx user is called, sometimes it's 'www-data'
        

        Nginx 需要 gitlab 的配置文件:

        在 GitLab 配方存储库中:https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/nginx 找到“gitlab-omnibus-nginx.conf”。 将该文件放在文件夹 /etc/nginx/sites-enabled 中(您可能需要创建启用站点的文件夹)

        编辑配置文件/etc/nginx/sites-enabled/gitlab-omnibus-nginx.conf:

        改变这一行:

        server_name YOUR_SERVER_FQDN
        

        收件人:

        server_name www.example.com/repos     // (or whatever your server name is)
        

        您需要更改 gitlab 所在的端口,以便网站和 git 服务器都能正常工作。

        改变这一行:

        listen 0.0.0.0:80 default_server;
        

        收件人:

        listen 0.0.0.0:8081; 
        

        改变这一行:

        listen [::]:80  default_server;
        

        收件人:

        listen [::]:8081;
        

        编辑配置文件/etc/nginx/conf.d/default.conf:

        将其设为默认服务器:

        listen    80 default_server;
        server_name  localhost;
        

        为 gitlab 存储库添加第二个位置,并使用 proxy_pass 指向您放置 Gitlab 的端口。 我把我的 Gitlab 放在子目录“repos”中。数字 127.0.0.1 表示 localhost(同一台计算机):

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
        location /repos/ {
            proxy_pass http://127.0.0.1:8081;
        }
        

        在终端中运行这些命令:

        sudo gitlab-ctl reconfigure
        sudo service nginx restart
        

        您的网络服务器和 gitlab 现在应该都可以工作并且可以在线访问了。 当用户访问您的网络服务器时,Nginx 将默认为 /usr/share/nginx/html。那里有一个默认的 .html 文件。这是您可以为您的网站放置文件的地方。

        【讨论】:

        • 所以你在没有 HTTPS 的情况下运行你的 Gitlab?
        【解决方案4】:

        对于那些列出的答案不起作用的人。我自己的答案是编辑nginx.conf 并取消注释include /etc/nginx/passenger.conf; 行。

        它的缺失阻止了 nginx 对乘客做任何事情。

        【讨论】:

          【解决方案5】:

          在 Ubuntu 上使用现有的 Nginx 服务器运行

          1. 安装 gitlab
          2. 编辑配置文件 /etc/gitlab/gitlab.rb 并取消注释或附加以下内容:
            • nginx['enable'] = false
            • 独角兽['enable'] = false
            • gitlab_rails['internal_api_url'] = 'http://git.yourdomain.com'
            • web_server['external_users'] = ['www-data']
          3. 启动捆绑的 postgres 数据库服务器
            • sudo gitlab-ctl 启动 postgresql
          4. 重新配置
            • sudo gitlab-ctl 重新配置
          5. 将 git lab 的 nginx 配置文件添加到 /etc/nginx/sites-available/gitlab-example.conf 并通过 sites-enabled 启用它
          6. 为 nginx 启用乘客
          7. 重启nginx
            • sudo service nginx 重启
          8. 启动redis
            • sudo gitlab-ctl start redis

          【讨论】:

          • 这些说明对我的帮助比 Eckster 接受的答案要多一些,但我对 Phusion Passenger 步骤有点困惑。乘客在这里做什么?我实际上没有安装它,它似乎按预期工作?
          • 好点,我犯了一个错误,链接到一个维基,而不是仅仅解释所有的步骤,我已经改变了接受的答案。
          【解决方案6】:

          我搞定了!太激动了!

          正如我所说,我试图关注these instructions,但我没有得到任何结果,因为它似乎缺少关于如何将现有 Nginx 安装链接放入 Gitlab 的说明。

          好吧,在页面的下方,他们对Using an Existing Passenger / Nginx Installation 有更完整的解释,虽然起初这看起来不像我想要的,但稍微研究一下Passenger,就清楚地表明它不是Ruby-唯一的事情(他们很容易找到的安装说明要求您将其安装为 ruby​​ gem)和他们的instructions for Ubuntu installation 允许我将它相当容易地集成到我现有的 Nginx 中。

          从那里开始,只需按照 wiki 中的步骤进行操作,尽管有一些更改。

          1. Existing Passenger/Nginx Installation 部分未提及 non-bundled Nginx install 上一部分所说的内容,即您需要将 www-data 添加到 gitlab.rb 文件中的 web_server['external_users'] 行。
          2. 由于我在第一次运行之前重新配置了我的 Gitlab 安装以删除捆绑的 Nginx,所以 /var/log/gitlab/nginx/gitlab_access.log 的 nginx 日志文件不存在,这导致 Nginx 尝试启动时出错,只需创建空白文件并为其提供适当的读/写访问权限使其像魅力一样工作。

          我现在超级兴奋,希望将来有特定问题的任何人都能遇到这个问题,真的应该更新 Wiki 以简单地删除/合并这两个部分并解释/链接到如何将乘客安装到现有的 Nginx 安装。会为我省去很多困惑和浪费的时间。

          【讨论】:

            猜你喜欢
            • 2015-01-16
            • 2014-06-24
            • 2019-11-18
            • 1970-01-01
            • 2013-08-21
            • 1970-01-01
            • 2015-03-09
            • 2023-01-18
            • 2013-01-13
            相关资源
            最近更新 更多