Подтвердить что ты не робот

Как обслуживать других vhosts рядом с сервером Gitlab Omnibus? [Полное пошаговое решение]

Я установил Gitlab CE на выделенную версию сервера Ubuntu 14.04 с пакетом Omnibus.

Теперь я бы хотел установить три других виртуальных хоста рядом с gitlab.

Два являются node.js веб-приложениями, запущенными non-root user, работающими на двух разных ports > 1024, третий - это веб-приложение PHP, для которого требуется запуск веб-сервера.

Есть:

  • частный реестр bower работает на 8081 (node.js)
  • частный реестр npm работает на 8082 (node.js)
  • частный реестр композитора (PHP)

Но Omnibus прослушивает 80 и, похоже, не использует ни Apache2, ни Nginx, , поэтому я не могу использовать их для обслуживания своего PHP-приложения и обратного прокси-сервера двумя другими node apps.

Какая обслуживающая механика Gitlab Omnibus использует listen 80? Как мне создать три других виртуальных узла, чтобы иметь возможность предоставлять следующие vHosts?

  • gitlab.mycompany.com (:80) - уже используется
  • bower.mycompany.com (:80)
  • npm.mycompany.com (:80)
  • packagist.mycompany.com (:80)
4b9b3361

Ответ 1

Об этих

Но Omnibus прослушивает 80 и, похоже, не использует ни Apache2, ни Nginx [, таким образом...].

и комментарий @stdob:

Разве omnibus не использовал nginx в качестве веб-сервера??? -

Как я ответил

Я думаю, не потому, что пакет nginx не установлен в системе...

В фактах

Из официальных документов Gitlab:

По умолчанию omnibus-gitlab устанавливает GitLab со связанным Nginx.

Так что да!

В пакете Omnibus используется Nginx!

но он был в комплекте, объясняя, почему он не требует установки в зависимости от операционной системы хоста.

Таким образом, ДА! Nginx может и должен использоваться для обслуживания моего PHP-приложения и обратного прокси-сервера двумя другими node приложениями.

Затем теперь

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

Чтобы использовать другой веб-сервер, такой как Apache или существующая установка Nginx, вам нужно будет сделать выполните следующие действия:

Отключите связанный Nginx, указав в /etc/gitlab/gitlab.rb

nginx['enable'] = false
# For GitLab CI, use the following:
ci_nginx['enable'] = false

Проверьте имя пользователя пользователя, не связанного с веб-сервером. По умолчанию omnibus-gitlab не имеет значения по умолчанию для пользователя внешнего веб-сервера. Вы должны указать имя пользователя внешнего веб-сервера в конфигурации! Скажем, например, что пользователь веб-сервера www-data. В /etc/gitlab/gitlab.rb установите

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

Этот параметр представляет собой массив, поэтому вы можете указать более одного пользователя для добавления в группу gitlab-www.

Запустите sudo gitlab-ctl reconfigure, чтобы изменения вступили в силу.

Установка адреса или адресов прослушивания NGINX

По умолчанию NGINX будет принимать входящие соединения на всех локальных IPv4-адресах. Вы можете изменить список адресов в /etc/gitlab/gitlab.rb.

nginx['listen_addresses'] = ["0.0.0.0", "[::]"] # listen on all IPv4 and IPv6 addresses

Для GitLab CI используйте параметр ci_nginx['listen_addresses'].

Настройка порта прослушивания NGINX

По умолчанию NGINX будет прослушивать порт, указанный в external_url или неявно использовать правильный порт (80 для HTTP, 443 для HTTPS). Если вы работаете GitLab за обратным прокси-сервером, вы можете переопределить порт прослушивания что-то другое. Например, чтобы использовать порт 8080:

nginx['listen_port'] = 8080

Аналогично, для GitLab CI:

ci_nginx['listen_port'] = 8081

Поддержка прокси SSL

По умолчанию NGINX будет автоматически определять, использовать ли SSL, если external_url содержит https://. Если вы используете GitLab за обратным прокси-сервером, вы может пожелать сохранить external_url в качестве HTTPS-адреса, но GITLAB NGINX внутри HTTP. Для этого вы можете отключить HTTPS, используя параметр listen_https:

nginx['listen_https'] = false

Аналогично, для GitLab CI:

ci_nginx['listen_https'] = false

Обратите внимание, что вам может потребоваться настроить обратный прокси-сервер для перенаправления определенных заголовки (например, Host, X-Forwarded-Ssl, X-Forwarded-For, X-Forwarded-Port) в GitLab.

Вы можете увидеть неправильные перенаправления или ошибки (например, "422 Unprocessable Entity", "Невозможно подтвердить подлинность CSRF-токена" ), если вы забудете этот шаг. Для большего информацию, см.:

Чтобы идти дальше, вы можете следить за официальными документами на https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#using-a-non-bundled-web-server

Настройка нашего виртуального хоста gitlab

Установка Phusion Passenger

Нам нужно установить ruby ​​(gitlab run in omnibus с включенным рубином) по всему миру в ОС

$ sudo apt-get update 
$ sudo apt-get install ruby
$ sudo gem install passenger

Перекомпилировать nginx с пассажирским модулем

Вместо Apache2, например, nginx не может быть подключен к двоичным модулям "на лету". Он должен быть перекомпилирован для каждого нового плагина, который вы хотите добавить.

Phusion команда разработчиков пассажирских упорно трудились, чтобы обеспечить говоря, " а в комплекте Nginx версия пассажирской":. Nginx бункерах скомпилирован с пассажирской плагин

Итак, давайте использовать его:

требование: нам нужно открыть наш TCP порт 11371 (порт APT key).

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7
$ sudo apt-get install apt-transport-https ca-certificates
создание passenger.list
$ sudo nano /etc/apt/sources.list.d/passenger.list

с этими символами

# Ubuntu 14.04
deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

используйте правильное репо для вашей версии ubuntu. Например, для Ubuntu 15.04:    deb https://oss-binaries.phusionpassenger.com/apt/passenger яркий главный

Изменить разрешения:

$ sudo chown root: /etc/apt/sources.list.d/passenger.list
$ sudo chmod 600 /etc/apt/sources.list.d/passenger.list

Обновление списка пакетов:

$ sudo apt-get update

Разрешить его как unattended-upgrades

$ sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Найдите или создайте этот блок конфигурации поверх файла:

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {

  // you may have some instructions here

};

Добавьте следующее:

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {

  // you may have some instructions here

  // To check "Origin:" and "Suite:", you could use e.g.:
  // grep "Origin\|Suite" /var/lib/apt/lists/oss-binaries.phusionpassenger.com*
    "Phusion:stable";

};

Теперь (за) установить nginx-extra и passenger:

$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak_"$(date +%Y-%m-%d_%H:%M)"
$ sudo apt-get install nginx-extras passenger

настроить его

Раскомментируйте директивы passenger_root и passenger_ruby в файле /etc/nginx/nginx.conf:

$ sudo nano /etc/nginx/nginx.conf

... получить что-то вроде:

##
# Phusion Passenger config
##
# Uncomment it if you installed passenger or passenger-enterprise
##

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/bin/passenger_free_ruby;

создать конфигурацию сайта nginx (виртуальный хост conf)

$ nano /etc/nginx/sites-available/gitlab.conf

server {
  listen *:80;
  server_name gitlab.mycompany.com;
  server_tokens off;
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  client_max_body_size 250m;
  access_log  /var/log/gitlab/nginx/gitlab_access.log;
  error_log   /var/log/gitlab/nginx/gitlab_error.log;

  # Ensure Passenger uses the bundled Ruby version
  passenger_ruby /opt/gitlab/embedded/bin/ruby;

  # Correct the $PATH variable to included packaged executables
  passenger_env_var PATH "/opt/gitlab/bin:/opt/gitlab/embedded/bin:/usr/local/bin:/usr/bin:/bin";

  # Make sure Passenger runs as the correct user and group to
  # prevent permission issues
  passenger_user git;
  passenger_group git;

  # Enable Passenger & keep at least one instance running at all times
  passenger_enabled on;
  passenger_min_instances 1;

  error_page 502 /502.html;
}

Теперь мы можем включить его:

$ sudo ln -s /etc/nginx/sites-available/gitlab.cong /etc/nginx/sites-enabled/

Нет эквивалента a2ensite, исходящего из nginx, поэтому мы используем ln, но если вы хотите, есть проект на github: nginx_ensite: nginx_ensite и nginx_dissite для быстрого включения и отключения виртуального хоста

Это оболочка (Bash) script, которая реплицирует для nginx Debian a2ensite и a2dissite для включения и отключения сайтов в качестве виртуальных хостов в Apache 2.2/2.4.

Сделано:-). Наконец, перезапустите nginx

$ sudo service nginx restart

С помощью этой новой конфигурации вы можете запускать другие виртуальные хосты рядом с gitlab для обслуживания того, что вы хотите

Просто создайте новые конфиги в /etc/nginx/sites-available.

В моем случае я выполнил и обслуживал этот путь на том же хосте:

Например, для обслуживания npm.mycompany.com:

Создайте каталог для журналов:

$ sudo mkdir -p /var/log/private-npm/nginx/

И залейте новый конфигурационный файл vhost:

$ sudo nano /etc/nginx/sites-available/npm.conf

С помощью этой конфигурации

server {
  listen *:80;
  server_name npm.mycompany.com

  client_max_body_size 5m;
  access_log  /var/log/private-npm/nginx/npm_access.log;
  error_log   /var/log/private-npm/nginx/npm_error.log;

  location / {
    proxy_pass http://localhost:8082;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

Затем включите его и перезапустите:

$ sudo ln -s /etc/nginx/sites-available/npm.conf /etc/nginx/sites-enabled/
$ sudo service nginx restart

Ответ 2

Поскольку я не хотел бы менять сервер nginx для gitlab (с некоторыми другими интеграциями), самый безопасный способ был бы ниже решения.

также согласно

Gitlab: Ningx = > Вставка пользовательских настроек в конфигурацию NGINX

отредактируйте файл /etc/gitlab/gitlab.rb вашего gitlab:

nano /etc/gitlab/gitlab.rb

и прокрутите до nginx ['custom_nginx_config'] и измените, как показано ниже, убедитесь, что вы раскомментируете

# Example: include a directory to scan for additional config files
nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/*.conf;"

создайте новый каталог config:

mkdir -p /etc/nginx/conf.d/
nano /etc/nginx/conf.d/new_app.conf

и добавьте контент в новую конфигурацию

# my new app config : /etc/nginx/conf.d/new_app.conf
# set location of new app 
upstream new_app {
  server localhost:1234; # wherever it might be
}
# set the new app server
server {
  listen *:80;
  server_name new_app.mycompany.com;
  server_tokens off;
  access_log  /var/log/new_app_access.log;
  error_log   /var/log/new_app_error.log;
  proxy_set_header Host      $host;
  proxy_set_header X-Real-IP $remote_addr;
  location / { proxy_pass  http://new_app; }
}

и перенастройте gitlab, чтобы вставить новые настройки

gitlab-ctl reconfigure

для перезапуска nginx

gitlab-ctl restart nginx

чтобы проверить журнал ошибок nginx:

tail -f /var/log/gitlab/nginx/error.log