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

Gitlab в подкаталоге с apache и пассажиром

Я пытаюсь настроить gitlab, чтобы он был доступен через подкаталог существующего сервера apache, например, example.com/gitlab. Я пытаюсь использовать пассажира, поскольку это, кажется, проще всего настроить, но другие решения также будут приемлемыми. Использование отдельного виртуального хоста для gitlab, к сожалению, не является для меня вариантом.

Моя настройка

В настройке я выполнил руководство по установке gitlab и пассажирскую документацию.

Я считаю, что наиболее важными частями /etc/httpd/conf/httpd.conf являются следующие:

DocumentRoot "/home/.www"

# gitlab config
RackBaseURI /gitlab
<Directory "/home/.www/gitlab">
    Options -MultiViews
</Directory>

DocumentRoot apache содержит символическую ссылку на общий каталог gitlab:

$ ls -l /home/.www
lrwxrwxrwx  1 root  http    23 Jul 29 12:35 gitlab -> ../gitlab/gitlab/public

Пассажир был установлен с помощью passenger-install-apache2-module script, а строки конфигурации, выводимые script, включены в конфигурацию apache.

Я играл с relative_url_root в config/gitlab.yml; это не имело никакого эффекта (судя по комментариям в файле, этот механизм, кажется, обескуражен или устарел --- было бы неплохо его избежать).

Результаты

При доступе к example.com/gitlab я получаю следующий вывод (обычный текстовый документ):

Not Found: /

Журналы Apache указывают, что пассажир запустился, но из корневого каталога документа запрашивается не менее favicon.ico, когда его необходимо запросить из подкаталога как /gitlab/favicon.ico:

[ 2013-07-29 14:14:12.1029 2037/7f3502e1e740 agents/HelperAgent/Main.cpp:597 ]: PassengerHelperAgent online, listening at unix:/tmp/passenger.1.0.2033/generation-0/request
[ 2013-07-29 14:14:12.1150 2043/7fa24dbf3740 agents/LoggingAgent/Main.cpp:330 ]: PassengerLoggingAgent online, listening at unix:/tmp/passenger.1.0.2033/generation-0/logging
[ 2013-07-29 14:14:12.1154 2034/7ff20a0cb740 agents/Watchdog/Main.cpp:635 ]: All Phusion Passenger agents started!
[Mon Jul 29 14:14:12 2013] [notice] Digest: generating secret for digest authentication ...
[Mon Jul 29 14:14:12 2013] [notice] Digest: done
[ 2013-07-29 14:14:13.0297 2057/7f5380ee3740 agents/Watchdog/Main.cpp:452 ]: Options: { 'analytics_log_user' => 'nobody', 'default_group' => 'nobody', 'default_python' => 'python', 'default_ruby' => '/usr/bin/ruby', 'default_user' => 'nobody', 'log_level' => '0', 'max_instances_per_app' => '0', 'max_pool_size' => '6', 'passenger_root' => '/usr/lib/ruby/gems/2.0.0/gems/passenger-4.0.10', 'pool_idle_time' => '300', 'temp_dir' => '/tmp', 'union_station_gateway_address' => 'gateway.unionstationapp.com', 'union_station_gateway_port' => '443', 'user_switching' => 'true', 'web_server_pid' => '2055', 'web_server_type' => 'apache', 'web_server_worker_gid' => '33', 'web_server_worker_uid' => '33' }
[ 2013-07-29 14:14:13.0367 2061/7f92eefef740 agents/HelperAgent/Main.cpp:597 ]: PassengerHelperAgent online, listening at unix:/tmp/passenger.1.0.2055/generation-0/request
[ 2013-07-29 14:14:13.0485 2067/7f4cc5205740 agents/LoggingAgent/Main.cpp:330 ]: PassengerLoggingAgent online, listening at unix:/tmp/passenger.1.0.2055/generation-0/logging
[ 2013-07-29 14:14:13.0490 2057/7f5380ee3740 agents/Watchdog/Main.cpp:635 ]: All Phusion Passenger agents started!
[Mon Jul 29 14:14:13 2013] [notice] Apache/2.2.25 (Unix) mod_ssl/2.2.25 OpenSSL/1.0.1e DAV/2 Phusion_Passenger/4.0.10 configured -- resuming normal operations
[ 2013-07-29 14:14:16.8354 2061/7f92eef2a700 Pool2/Spawner.h:738 ]: [App 2096 stdout] 
[ 2013-07-29 14:14:24.8814 2061/7f92eef2a700 Pool2/SmartSpawner.h:301 ]: Preloader for /home/.www/../gitlab/gitlab started on PID 2096, listening on unix:/tmp/passenger.1.0.2055/generation-0/backends/preloader.2096
[Mon Jul 29 14:14:25 2013] [error] [client 129.241.220.221] File does not exist: /home/.www/favicon.ico

Мне кажется, что нет необходимости запускать какой-либо сервер puma или аналогичный, поэтому я не запускал никаких команд bundle exec rake ... для запуска любых связанных с рельсами при создании журналов выше (я пробовал это, но я " m, не включая вывод здесь, как кажется мне идентичным).

Кто-нибудь видит, что я делаю неправильно?

4b9b3361

Ответ 1

Я не думаю, что Passenger - самый простой способ настроить Apache для GitLab. Использование локального обратного проксирования на самом деле проще.

Последняя версия GitLab (6.0) использует Unicorn, но она почти одинакова с Puma.

В вашем файле config/unicorn.rb прокомментируйте директиву listen и добавьте:

listen "127.0.0.1:9242"

В вашей конфигурации Apache вы можете добавить

ProxyPass         /gitlab http://127.0.0.1:9242
ProxyPassReverse  /gitlab http://127.0.0.1:9242

Перезапустите Apache и GitLab, и он должен работать.

Ответ 2

Запуск Gitlab в подкаталоге официально не поддерживается, но отлично работает (в настоящее время я запускаю экземпляр). Я ничего не знаю о Пассажире, но это то, как вы запускаете его с помощью единорога и прокси-сервера:

Вам нужно установить ваш подкаталог в трех местах (чтобы указать по умолчанию gitlab.yml):

# Uncomment and customize the last line to run in a non-root path
# WARNING: This feature is no longer supported
# Note that three settings need to be changed for this to work.
# 1) In your application.rb file: config.relative_url_root = "/gitlab"
# 2) In your gitlab.yml file: relative_url_root: /gitlab
# 3) In your unicorn.rb: ENV['RAILS_RELATIVE_URL_ROOT']
#
relative_url_root: /gitlab

Я просто положил ENV['RAILS_RELATIVE_URL_ROOT'] '/gitlab' где-то наверху в unicorn.rb, так как нет места по умолчанию.

После этого вам нужно запустить sidekiq (фоновое задание deamon) и единорог (веб-сервер для gitlab), как описано в документации по установке. Поставляемый init script работает очень хорошо.

Наконец, вам нужно настроить веб-сервер apache на запросы прокси-сервера для экземпляра бэкэнд-единорога. mod_proxy, настроенный как обратный прокси, должен выполнять эту работу. (Артурс ответил немного подробнее об этой части)

Если вы (или кто-то из Google) хотите использовать nginx в качестве прокси-сервера, это конфигурация, которую я использую:

location /gitlab {
    alias /home/git/gitlab/public;

    access_log  /var/log/nginx/gitlab_access.log;
    error_log   /var/log/nginx/gitlab_error.log;

    # serve static files from defined root folder;.
    # @gitlab is a named location for the upstream fallback, see below
    try_files $uri $uri/index.html $uri.html @gitlab;
}

# if a file, which is not found in the root folder is requested,
# then the proxy pass the request to the upsteam (gitlab unicorn)
location @gitlab {
    proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
    proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
    proxy_redirect     off;

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

    proxy_pass http://gitlab;

    access_log  /var/log/nginx/gitlab_access.log;
    error_log   /var/log/nginx/gitlab_error.log;
}

Ответ 3

Я сделал следующее, чтобы получить gitlab 6.2.2, доступный в подкаталоге с Apache и средой LAMP:

включить следующие модули apache:

sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
sudo a2enmod rewrite

прямо из документации, выполните следующие действия:

# 1) In your application.rb file: config.relative_url_root = "/gitlab"
# 2) In your gitlab.yml file: relative_url_root: /gitlab
# 3) In your unicorn.rb: ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab"

в файле /etc/apache 2/mod-available/proxy.conf:

ProxyRequests On
ProxyPreserveHost on
<Proxy *>
  AddDefaultCharset off
  Order deny,allow
  Allow from all 
  AllowOverride All
</Proxy>

в/etc/apache2/apache2.conf:

ProxyPass         /gitlab/ http://127.0.0.1:8080/gitlab/
ProxyPassReverse  /gitlab/ http://127.0.0.1:8080/gitlab/
ProxyPass         /gitlab http://127.0.0.1:8080/gitlab
ProxyPassReverse  /gitlab http://127.0.0.1:8080/gitlab
ProxyPass         /assets http://127.0.0.1:8080/gitlab/assets
ProxyPassReverse  /assets http://127.0.0.1:8080/gitlab/assets

Ответ 4

Обновление user1258056 post:

В последних выпусках Gitlab (я использую 10.0.3) предлагаемое решение приводит к тому, что активы не загружаются (ошибка 401: не авторизована)

Чтобы исправить это, добавьте следующие строки в /etc/gitlab/gitlab.rb:

unicorn['port'] = 8081
gitlab_workhorse['listen_addr'] ="127.0.0.1:8181"
gitlab_workhorse['listen_network'] = "tcp"

И измените /etc/apache2/apache2.conf следующим образом:

ProxyPass         /gitlab/assets/ http://127.0.0.1:8181/gitlab/assets/
ProxyPassReverse  /gitlab/assets/ http://127.0.0.1:8181/gitlab/assets/

ProxyPass         /gitlab/ http://127.0.0.1:8081/gitlab/
ProxyPassReverse  /gitlab/ http://127.0.0.1:8081/gitlab/
ProxyPass         /gitlab http://127.0.0.1:8081/gitlab
ProxyPassReverse  /gitlab http://127.0.0.1:8081/gitlab

Это приводит к отправке запроса ресурсов на компонент Workhorse (порт 8181), в то время как другие запросы проходят обычный путь (порт 8081)

Ответ 5

Я использую gitlab и nginx. использование gitlab в subdir имеет много проблем (или ошибок). Я использую gitlab.example.com(легко настраивается, легко запоминается), а не example.com/gitlab.