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

я установил GitLab CE на выделенном Ubuntu 14.04 server edition с Omnibus пакет.

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

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

есть:

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

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

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

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

2 ответов


об этих

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

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

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

который я ответил

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

факты

от Официальные документы Gitlab:

по умолчанию omnibus-gitlab устанавливает GitLab в комплекте с Nginx.

так что да!

пакет Omnibus фактически использует Nginx !

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

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

теперь

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

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 с пакетом ruby) глобально в ОС

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

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

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

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

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

требование: нам нужно открыть наш TCP порт 11371 (the 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: деб https://oss-binaries.phusionpassenger.com/apt/passenger яркий главный

редактировать permissions:

$ 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 директивы в :

$ 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), который реплицирует для 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

с Данный config

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

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

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

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

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

nano /etc/gitlab/gitlab.rb

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

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

создать новую конфигурацию реж:

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