nginx 可以在同一台虚拟机上同时运行 gitlab 和 taiga.io 吗?

nginx 可以在同一台虚拟机上同时运行 gitlab 和 taiga.io 吗?

我跑步有困难GitLabTaiga.io在同一台虚拟机上(即共享同一 IP)。两者都使用 nginx。我的虚拟机运行 Debian 8。

我遵循了经典综合安装适用于 Debian 8 的 GitLab,当我在浏览器上输入我的 VM 的 IP 时,gitlab 可以正确运行,一切顺利。

然后我关闭了它(sudo gitlab-ctl stop),并安装了 Taiga,按照生产环境设置。根据文档,它使用 Gunicorn 和 Circus 作为 taiga-back(提供 REST API),并使用 nginx 作为前端服务。一旦/etc/nginx/sites-available|enabled/taiga~/taiga-back/settings/local.py~/taiga-front-dist/dist/conf.json都使用相同的 IP 地址进行设置,并且重新启动 nginx(sudo service nginx restart),一切也都顺利进行。

现在,可以将上述所有 Taiga IP 地址更改为不同的端口(例如8080),重新启动 nginx,Taiga 现在将从 IP 地址 8080 提供服务。一切顺利!

当我重新启动 GitLab ( sudo gitlab-ctl start) 时,它显示一切启动顺利。但当我尝试访问它(在默认端口 80 上)时,我得到了一个502!

如果我关闭 Taiga 并重新启动 GitLab,呵呵,GitLab 就可以使用了!基本上,我只能单独使用它们,而不能同时使用。

我也尝试将 Taiga 保留在端口 80 上,并将 GitLab 移到端口 8080 上(通过更改文件上的端口/etc/gitlab/gitlab.rb并运行sudo gitlab-ctlr reconfigure),但我从未成功运行它。

我还尝试将 GitLab 配置为使用系统 nginx(而不是嵌入式 nginx),即 Taiga 使用的 nginx。为此,我按照以下gitlab.rb方法禁用了 nginx文档,并使用综合(非 SSL)配方:

## GitLab 8.3+
##
## Lines starting with two hashes (##) are comments with information.
## Lines starting with one hash (#) are configuration parameters that can be uncommented.
##
##################################
##        CONTRIBUTING          ##
##################################
##
## If you change this file in a Merge Request, please also create
## a Merge Request on https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests
##
###################################
##         configuration         ##
###################################
##
## See installation.md#using-https for additional HTTPS configuration details.

upstream gitlab-workhorse {
  server unix:/var/opt/gitlab/gitlab-workhorse/socket;
}

## Normal HTTP host
server {
  ## Either remove "default_server" from the listen line below,
  ## or delete the /etc/nginx/sites-enabled/default file. This will cause gitlab
  ## to be served if you visit any address that your server responds to, eg.
  ## the ip address of the server (http://x.x.x.x/)n 0.0.0.0:80 default_server;
  listen 80 default_server;
  #listen [::]:80 default_server;
  server_name gitlab.<replaced with company URL> <replace with VM IP address>; ## Replace
  server_tokens off; ## Don't show the nginx version number, a security best practice
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  ## See app/controllers/application_controller.rb for headers set

  ## Individual nginx logs for this GitLab vhost
  access_log  /var/log/nginx/gitlab_access.log;
  error_log   /var/log/nginx/gitlab_error.log;

  location / {
    client_max_body_size 0;
    gzip off;

    ## https://github.com/gitlabhq/gitlabhq/issues/694
    ## Some requests take more than 30 seconds.
    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    proxy_http_version 1.1;

    proxy_set_header    Host                $http_host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;

    proxy_pass http://gitlab-workhorse;
  }
}

以及 Taiga 的:

server {
    listen 8080 default_server;
    server_name taiga.<replaced with company URL> <replace with VM IP address>; 

    large_client_header_buffers 4 32k;
    client_max_body_size 50M;
    charset utf-8;

    access_log /opt/taiga/logs/nginx.access.log;
    error_log /opt/taiga/logs/nginx.error.log;

    # Frontend
    location / {
        root /opt/taiga/taiga-front-dist/dist/;
        try_files $uri $uri/ /index.html;
    }

    # Backend
    location /api {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8001/api;
        proxy_redirect off;
    }

    # Django admin access (/admin/)
    location /admin {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8001$request_uri;
        proxy_redirect off;
    }

    # Static files
    location /static {
        alias /opt/taiga/taiga-back/static;
    }

    # Media files
    location /media {
        alias /opt/taiga/taiga-back/media;
    }
}

有了这两个配置/etc/nginx/sites-enabled,重启(sudo service nginx restart)后,我的 Taiga 服务器可以通过端口 8080 访问,但奇怪的是,gitlab 服务器不再可访问。没有 502,但连接超时!

有谁了解 nginx 并有想法吗?任何帮助都将不胜感激!

答案1

感谢我的 IT 提供商的帮助,我们找到了一个解决方案,它与 @Alex_hha 回答的起点一致:将 Taiga 绑定到端口 8080 是一个错误(激光共聚焦超声...)

所以最后,我在我的虚拟机中使用 Debian 安装的 nginx 作为反向代理,禁用了 GitLab 中嵌入的 nginx(通过编辑文件),并使用里面的配置文件(和符号链接)/etc/gitlab/gitlab.rb配置了 Taiga 和 Gitlab ,如下所示:/etc/nginx/sites-available/etc/nginx/sites-enabled

泰嘉:

server {
    listen 80 default_server;
    server_name taiga.<company URL> <VM IP address>;

其余保持不变。对于 Gitlab:

server {
    listen 80;
    server_name gitlab.<company URL>;

    large_client_header_buffers 4 32k;
    client_max_body_size 50M;
    charset utf-8;

    access_log /opt/gitlab/logs/nginx.access.log;
    error_log /opt/gitlab/logs/nginx.error.log;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
    }
}

default_server因此,两者都通过端口 80 进行访问,但给定请求的 URL,就会调用正确的服务。请注意GitLab 配置中没有。

这种配置组合使得所有 GitLab 流量都流向 GitLab,而其他任何流量(甚至无效的 URL)最终都流向 Taiga 服务。

答案2

不要对 Taiga 使用端口 8080,或者至少不要将 nginx 绑定到 localhost:8080。对于 Taiga,你可以将 nginx 绑定到某些特定的外部接口,例如以下内容

server {
    listen 192.168.127.1:8080;
    ...
}

我在同一台机器上使用 Gitlab 和 Jenkins,没有任何问题。它们都在端口 8080 上

# lsof -n -P -i tcp:8080
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    18983 jenkins  155u  IPv6 639617      0t0  TCP 192.168.88.87:8080 (LISTEN)
ruby    19098     git    9u  IPv4 113752      0t0  TCP 127.0.0.1:8080 (LISTEN)
ruby    19141     git    9u  IPv4 113752      0t0  TCP 127.0.0.1:8080 (LISTEN)
ruby    19144     git    9u  IPv4 113752      0t0  TCP 127.0.0.1:8080 (LISTEN)
ruby    19147     git    9u  IPv4 113752      0t0  TCP 127.0.0.1:8080 (LISTEN)
ruby    19150     git    9u  IPv4 113752      0t0  TCP 127.0.0.1:8080 (LISTEN)

相关内容