使用现有的 Nginx 安装转发到 GitLab 子域

Forwarding to GitLab Subdomain with Existing Nginx Installation

我一直在关注 instructions from the GitLab wiki,但是,似乎缺少一些关键信息。在 "Using a Non-Bundled Web Server" 部分中,它从未解释我需要如何重新配置​​我的 Nginx 安装以将代理反向到 GitLab。

基本上,我想在 git.example.com 下安装 GitLab,但我似乎找不到适合我现有 Nginx 安装的配置设置。维基页面继续讨论配置现有 Passenger/Nginx 安装,但我没有 Passenger,所以我认为这不适用于我的情况。

我想最简单的解决方案是,如果有办法告诉 Gitlab 使用它的内置 Nginx 并只监听一个内部端口,然后让我的另一个 Nginx 转发到那个端口,但我不能'我似乎不知道如何配置 Gitlab 来处理这个问题。

如有任何帮助,我们将不胜感激。

我成功了!太激动了!

正如我所说,我试图遵循 these instructions,但我一无所获,因为它似乎缺少有关如何将现有 Nginx 安装 link 的说明Gitlab.

好吧,在页面的更下方,他们对 Using an Existing Passenger / Nginx Installation, and while at first that didn't seem like what I wanted, researching Passenger a bit made it clear that it wasn't a Ruby-only thing(their easily-found install instructions require you to install it as a ruby gem) and their instructions for Ubuntu installation 进行了更完整的解释,这使我能够相当轻松地将其集成到我现有的 Nginx 中。

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

  1. Existing Passenger/Nginx Installation section fails to mention what the previous section on non-bundled Nginx install 表示,您需要将 www-data 添加到 gitlab.rb 文件中的 web_server['external_users'] 行。
  2. 由于我在第一次 运行 之前重新配置我的 Gitlab 安装以删除捆绑的 Nginx,/var/log/gitlab/nginx/gitlab_access.log 处的 nginx 日志文件不存在,这导致 Nginx 运行时出错尝试启动,只需创建该空白文件并为其提供适当的 read/write 访问权限就可以让它工作得很好。

我现在非常兴奋,希望将来遇到具体问题的任何人都能遇到这个问题,Wiki 真的应该更新为简单的 remove/merge 这两个部分和 explain/link如何将 Passenger 安装到现有的 Nginx 安装中。本来可以让我避免很多困惑和浪费时间。

运行 与 Ubuntu

上现有的 Nginx 服务器
  1. 安装git实验室
  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 实验室的 nginx 配置文件添加到 /etc/nginx/sites-available/gitlab-example.conf 并通过 sites-enabled 启用它
  6. 为 nginx 启用 passenger
  7. 重启nginx
    • sudo 服务 nginx 重启
  8. 启动redis
    • sudo gitlab-ctl 启动redis

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

它的缺席阻止了 nginx 对 passenger 做任何事情。

我花了几天时间才把所有事情都整理好,所以我想分享一下让一切正常进行的步骤。这是为网站安装 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 表示本地主机(同一台计算机):

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 文件。这是您可以放置​​网站文件的地方。

@fillky 的 post 无法完全帮助我安装 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 启用 passenger(https://www.phusionpassenger.com/library/install/nginx/install/oss/bionic/ 中的第 1 步到第 3 步)

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

    sudo nginx -s reload

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

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

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

    sudo nginx -s reload

  8. 安装node.js(如果还没有安装)因为gitlab需要JavaScript执行

    sudo apt-get 安装node.js

  9. 浏览到你的 gitlab url。系统应该会提示您输入 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 #link 到你的 public ssl 证书 ssl_certificate_key #link 到你的 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 shared:SSL:10m; ssl_session_timeout5m;

  3. 重新配置gitlab

    sudo gitlab-ctl 重新配置

  4. 重新加载 nginx

    sudo nginx -s reload

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

  1. 检查nginx的用户

    1.1。用 nano /etc/nginx/nginx.conf.

    打开 nginx.conf

    1.2。检查第一个。第 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。转到文件所在的目录,并使用 cp /directory-to-this-file/gitlab-omnibus-nginx.conf /etc/nginx/sites-enabled.

    将此文件复制到 nginx

    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 运行s on port 7001

    3.5。将此行 listen [::]:80 default_server; 更改为 listen [::]:7001; // gitlab 运行s on port 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 运行s 在我的本地服务器上,因此必须允许端口7001 从外部访问。启用它的最简单方法是 运行 ufw allow 7001.

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