Как обслуживать другие 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"), если вы забыли этот шаг. Для больше информация:
- каков фактический стандарт для обратного прокси-сервера, чтобы сообщить, что используется серверный SSL?
- https://wiki.apache.org/couchdb/Nginx_As_a_Reverse_Proxy
чтобы пойти дальше, вы можете следовать официальным документам по адресу 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
(theAPT 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
.
в моем случае я сделал запуск и обслуживание таким образом на одном хосте:
- gitlab.mycompany.com -the удивительная платформа git написано в Руби!--145-->
- ci.mycompany.com -the сервер непрерывной интеграции gitlab написано Рубином
- npm.mycompany.com -рядовой npm реестра написано
node.js
- bower.mycompany.com -рядовой беседке реестра написано
node.js
- packagist.mycompany.com -рядовой packagist на композитор реестр записан в в PHP
например, служить 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