Gitlab 8.0.3 с Apache2/Nginx

Фон

Убунту 15.10

Апач/2.4.10 (Убунту)

Все зависимости модулей включены:

  • mod_rewrite
  • mod_proxy
  • mod_proxy_http

GitLab Community Edition 8.0.3

GitLab docroot: /opt/gitlab/embedded/service/gitlab-rails/public

Я устанавливаю GitLab следующим образом: https://about.gitlab.com/downloads/#ubuntu1404

Проблема

На моем сервере есть веб-сайт, работающий с apache2 (example-site.com).

У меня работает GitLab со встроенным nginx (example-gitlab.com)

У меня есть 1 сервер, 1 IP и несколько полных доменных имен.

Таким образом, все мои доменные имена указывают на GitLab.

Таким образом, example-gitlab.com указывает на GitLab, как и требуется, но example-site.com также указывает на GitLab, а также на все остальные полные доменные имена.

Пути решения

Я думаю, что я должен (и я пытался):

  • Отключите связанный nginx и настройте gitlab с apache2 (мне сложно это сделать)
  • Настройте связанный nginx в качестве обратного прокси-сервера apache2 (мне сложно это сделать)

MAJ: на самом деле проблема в том, что Apache и nginx работают на одном и том же IP-адресе с одним и тем же портом (80). И я не хочу запускать веб-сайт на порту 81 или где-то еще, только на порту 80.

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

Понимание

Я не понимаю, как работают омнибус, рельсы или обратный прокси.

Я попытался отключить связанный nginx в /etc/gitlab/gitlab.rb

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

добавьте www-data в группу gitlab-www и измените:

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

и добавление модифицированного vhost.conf в apache2. Я беру его из https://gitlab.com/gitlab-org/gitlab-recipes/blob/master/web-server/apache/gitlab-apache24.conf

    <VirtualHost *:80>
    ServerName exemple-gitlab.com
    ServerSignature Off
    ProxyPreserveHost On

    AllowEncodedSlashes NoDecode

    <Location />
    Require all granted

    #Allow forwarding to gitlab-git-http-server
    ProxyPassReverse http://127.0.0.1:8181
    #Allow forwarding to GitLab Rails app (Unicorn)
    ProxyPassReverse http://127.0.0.1:8080
    ProxyPassReverse http://exemple-gitlab.com/
    </Location>

    #apache equivalent of nginx try files
    RewriteEngine on
    #Forward these requests to gitlab-git-http-server
    RewriteCond %{REQUEST_URI} ^/[\w\.-]+/[\w\.-]+/repository/archive.* [OR]
    RewriteCond %{REQUEST_URI} ^/api/v3/projects/.*/repository/archive.* [OR]
    RewriteCond %{REQUEST_URI} ^/[\w\.-]+/[\w\.-]+/(info/refs|git-upload-pack|git-receive-pack)$
    RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA]

    #Forward any other requests to GitLab Rails app (Unicorn)
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_URI} ^/uploads
    RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA,NE]

    # needed for downloading attachments
    /opt/gitlab/embedded/service/gitlab-rails/public

    #Set up apache error documents, if back end goes down (i.e. 503 error) then a maintenance/deploy page is thrown up.
    ErrorDocument 404 /404.html
    ErrorDocument 422 /422.html
    ErrorDocument 500 /500.html
    ErrorDocument 503 /deploy.html

    # /var/log/apache2.
    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
    ErrorLog  /var/log/apache2/logs/gitlab.example.com_error.log
    CustomLog /var/log/apache2/logs/gitlab.example.com_forwarded.log common_forwarded
    CustomLog /var/log/apache2/logs/gitlab.example.com_access.log combined env=!dontlog
    CustomLog /var/log/apache2/logs/gitlab.example.com.log combined

  </VirtualHost>

Но эта ошибка conf моего apache2:

~# systemctl status apache2.service
● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2)
   Active: failed (Result: exit-code) since mar. 2015-11-10 15:41:08 CET; 1min 9s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 18315 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 18342 ExecStart=/etc/init.d/apache2 start (code=exited, status=1/FAILURE)

nov. 10 15:41:08 vpsxxx.ovh.net apache2[18342]: * The apache2 configtest failed.
nov. 10 15:41:08 vpsxxx.ovh.net apache2[18342]: Output of config test was:
nov. 10 15:41:08 vpsxxx.ovh.net apache2[18342]: (2)No such file or directory: AH02291: Cannot access di...f:10
nov. 10 15:41:08 vpsxxx.ovh.net apache2[18342]: AH00014: Configuration check failed
nov. 10 15:41:08 vpsxxx.ovh.net apache2[18342]: Action 'configtest' failed.
nov. 10 15:41:08 vpsxxx.ovh.net apache2[18342]: The Apache error log may have more information.
nov. 10 15:41:08 vpsxxx.ovh.net systemd[1]: apache2.service: Control process exited, code=exited status=1
nov. 10 15:41:08 vpsxxx.ovh.net systemd[1]: Failed to start LSB: Apache2 web server.
nov. 10 15:41:08 vpsxxx.ovh.net systemd[1]: apache2.service: Unit entered failed state.
nov. 10 15:41:08 vpsxxx.ovh.net systemd[1]: apache2.service: Failed with result 'exit-code'.
Hint: Some lines were ellipsized, use -l to show in full.

person noraj    schedule 31.10.2015    source источник
comment
это, вероятно, лучше спросить о сбое сервера. Если вам удобнее работать с apache, я бы, вероятно, сделал что-то вроде создания виртуального хоста gitlab.domain.com, а затем использовал прокси-прокси apache, чтобы отправить его на nginx, работающий на другом порту. . (поскольку это только 1 виртуальный хост), но то же самое можно сделать и с nginx. Но вопрос о сбое сервера может дать вам лучшие ответы)   -  person Doon    schedule 10.11.2015


Ответы (2)


Самый простой способ — установить omnibus и настроить nginx на петлевом адресе, а затем использовать apache впереди в качестве обратного прокси-сервера.

Просто снова включите nginx и добавьте следующее в свой /etc/gitlab/gitlab.rb:

nginx['listen_addresses'] = ['127.0.1.1']

Затем перенастройте установку gitlab.

Затем в конфигурации вашего сайта Apache используйте что-то похожее на это:

<VirtualHost *:80>
  ServerName exemple-gitlab.com
  ProxyPreserveHost On

  ProxyPass / http://127.0.1.1/
  ProxyPassReverse / http://127.0.1.1/
</VirtualHost>

Разрешив омнибусу управлять конфигурацией nginx, вам не придется иметь дело с изменением конфигурации веб-сервера каждый раз, когда они перемещают службу с воркеров-единорогов на сервер Go gitlab-git-http-server. Apache будет беспрепятственно проксировать запросы к nginx (по петле), которые будут автоматически обновляться омнибусом во время обновлений.

person T0xicCode    schedule 10.11.2015

Извините, я разместил это на ServerFault и нашел решение:

https://serverfault.com/questions/735270/gitlab-8-0-3-with-apache2-nginx/735273#735273

Я нашел причину сбоя apache2, прокомментировав каждую строку (журналы damm были бесполезны).

Мне просто нужно было создать /var/log/apache2/logs

 ErrorLog  /var/log/apache2/logs/gitlab.example.com_error.log
  CustomLog /var/log/apache2/logs/gitlab.example.com_forwarded.log common_forwarded
  CustomLog /var/log/apache2/logs/gitlab.example.com_access.log combined env=!dontlog
  CustomLog /var/log/apache2/logs/gitlab.example.com.log combined

apache2 давал сбой из-за отсутствия папки/каталога...

Итак, теперь gitlab работает над этим доменом, и мой drupal тоже выглядит так:

  • gitlab.com: 80
  • drupal.com:80

Именно так, как я хотел :)

person noraj    schedule 11.11.2015