Может ли nginx работать как на gitlab, так и на taiga.io на одной и той же виртуальной машине?

У меня возникли проблемы с запуском GitLab и Taiga.io на одной и той же виртуальной машине (то есть с одним IP-адресом). Оба используют nginx. Моя виртуальная машина работает под управлением Debian 8.

Я следовал классической Omnibus-установке GitLab для Debian 8, и когда я ввожу IP-адрес своей виртуальной машины в браузере, gitlab обслуживается правильно, и все идет хорошо.

Потом закрываю (sudo gitlab-ctl stop), и я установил Taiga, следуя настройке производственной среды. Согласно документу, он использует Gunicorn и Circus для тайги (которая обслуживает 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) все тоже идет хорошо.

Теперь можно изменить все вышеупомянутые IP-адреса тайги с другим портом (скажем, 8080), перезапустите nginx, и Taiga теперь обслуживается с IP-адреса:8080. Все хорошо!

Когда я перезагружаю GitLab (sudo gitlab-ctl start), это говорит о том, что все начинается гладко. Но когда я пытаюсь получить к нему доступ (по умолчанию порт 80), я получаю 502!

Если я выключу Тайгу и перезапущу GitLab, хохо, GitLab доступен! В принципе, я могу иметь их только по отдельности, но не одновременно.

Я также попытался сохранить Taiga на порту 80 и переместить GitLab на порт 8080 (изменив порт в файле /etc/gitlab/gitlab.rb и работает sudo gitlab-ctlr reconfigure), но мне так и не удалось запустить его успешно.

Я также пытался настроить GitLab для использования системы nginx (а не встроенной), то есть той, что используется Taiga. Для этого я отключил nginx на gitlab.rb следуя документу, и используя этот омнибус (не-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;
  }
}

наряду с этим для Тайги:

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 с идеей? Любая помощь будет принята с благодарностью!

2 ответа

Решение

Благодаря помощи моего ИТ-провайдера мы нашли решение, которое соответствует начальной точке ответа @Alex_hha: было ошибкой привязывать Taiga к порту 8080 ( LSNED...)

Наконец, я использую установку Debian nginx на своей виртуальной машине в качестве обратного прокси-сервера, отключив встроенный nginx внутри GitLab (редактируя /etc/gitlab/gitlab.rb файл) и настроил как Тайга, так и Gitlab с файлом конфигурации внутри /etc/nginx/sites-available (и символические ссылки на /etc/nginx/sites-enabled), в дальнейшем:

Taiga:

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

а оставшиеся без изменений. И для Гитлаб:

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;
    }
}

Таким образом, доступ к обоим осуществляется через порт 80, но с учетом URL-адреса запроса вызывается нужный сервис. Обратите внимание на отсутствие default_server в конфиге GitLab.

Эта комбинация конфигурации делает весь трафик GitLab, идущий в GitLab, и все остальное (даже недействительный URL) заканчивающимся на сервисе 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)
Другие вопросы по тегам