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

Использование gitlab nginx для обслуживания другого приложения

Здравствуйте, я установил Gitlab, используя это приложение https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#installation

Теперь я хочу использовать nginx для обслуживания другого контента, кроме приложения gitlab как я могу это сделать

  • Где находятся файлы конфигурации, которые мне нужно изменить
  • Как я могу указать каталог, например /var/www, чтобы nginx знал, что является корнем для другого приложения.

Обновление (забыл упомянуть, что я запускаю это под Red Hat 6.5, решение для Debian/Ubuntu приветствуется)

4b9b3361

Ответ 1

Я пробовал оба подхода, и тот, который работал у меня, заключался в том, чтобы поставить чистую NGINX поверх встроенной в gitlab. его более легкий/удобный в долгосрочной перспективе.

В зависимости от ваших потребностей вот некоторые важные вещи, которые должны быть на месте:

  • Настройки DNS вашей сети/маршрутизатора/и т.д. (иначе это не сработает, так как конфигурации здесь основаны на именах серверов).
  • Моя настройка - тривиальный один сервер, несколько сайтов, размещенных на одном и том же IP-сервере, и я фильтрую, именовав приложения через фильтр имен NGINX.

Вот основные шаги, которые следует соблюдать, помните, что в зависимости от ваших потребностей это может означать больше настроек, также это сервер Ubuntu 14.04.

  • Сначала деактивируйте основной Nginx (тот, который связан с omnibus), отредактируйте /etc/gitlab/gitlab.rb

    nginx['enable'] = false ci_nginx['enable'] = false

  • Теперь вы можете установить чистый экземпляр NGINX.
  • Что касается предыдущего шага: иногда установщик не создает папки sites-enabled/ и сайты-доступные/, создавая их и удостоверяются, что чтобы включить их в файл /etc/nginx/nginx.conf

    include /etc/nginx/sites-enabled/*.conf;

  • В общем рабочем процессе nginx вы включаете настройки своего сайта под сайтами-доступными/, а затем, когда вы готовы/счастливы, вы делаете ссылку на папку с сайтами / и перезапустите nginx, чтобы изменения были эффективными.
  • Добавьте конфигурацию Gitlab в папку Nginx сайт-доступный/.

вот мой conf:

`upstream gitlab-workhorse {
  server unix:/var/opt/gitlab/gitlab-workhorse/socket;
}

## Normal HTTP host
server {
  ## Either remove "default_server" from the listen line below,
  ## or delete the /etc/nginx/sites-enabled/default file. This will cause gitlab
  ## to be served if you visit any address that your server responds to, eg.
  ## the ip address of the server (http://x.x.x.x/)n 0.0.0.0:80 default_server;
  #listen 0.0.0.0:80 default_server;
  listen 0.0.0.0:80 ;
#  listen [::]:80 default_server;
  server_name gitlab.mycompany.com; ## Replace this with something like gitlab.example.com
  server_tokens off; ## Don't show the nginx version number, a security best practice
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  ## See app/controllers/application_controller.rb for headers set

  ## Individual nginx logs for this GitLab vhost
  access_log  /var/log/nginx/gitlab.access.log;
  error_log   /var/log/nginx/gitlab.error.log;

  location / { 
    client_max_body_size 0;
    gzip off;

    ## https://github.com/gitlabhq/gitlabhq/issues/694
    ## Some requests take more than 30 seconds.
    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    proxy_http_version 1.1;

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

        proxy_pass http://gitlab-workhorse;
      }
    } 

вы можете найти более подробную информацию о конфигурации здесь дополнительные параметры

  1. перезагрузка/перезагрузка nginx

    sudo service nginx restart

  2. перезапустите gitlab omnibus и проверьте конфигурацию Gitlab

    sudo gitlab-ctl reconfigure

    sudo gitlab-ctl tail (просто чтобы проверить, что-то не так в вашей конфигурации gitlab)

  3. Добавьте дополнительные (сколько угодно) конфигурации серверов, которые вам нужны в /etc/nginx/sites-available/, и в конце концов, когда happy/ready добавит ссылку на /и т.д./Nginx/сайты с поддержкой /
    вот еще один пример другого приложения

    upstream app_server {
        server 127.0.0.1:9080 fail_timeout=0;
    }
    server {
        listen 80; 
        server_name jenkins.mycompany.com;    
        access_log            /var/log/nginx/jenkins.access.log;
        location / { 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            if (!-f $request_filename) {
                proxy_pass http://app_server;
                break;
            }
    
        }   
    }
    
  4. Не забудьте всегда перезагружать/перезагружать nginx, чтобы вы видели ваши изменения.

    sudo service nginx restart

  5. проверить журналы в случае, если что-то не так. /var/log/nginx/anysites*.log

  6. Обратите внимание, что здесь мы используем вверх по течению с различными портами, а имена (они существуют/являются реальными/зарегистрированы в домене вашей компании) все указывают на тот же IP-адрес, что означает, что NIGNX придет и найдет тот же IP-адрес, но он не сломается из-за разных портов в восходящем потоке, это действительно важно

Как моя конфигурация работает прямо сейчас, у меня не было проблем с Gitlab или другими приложениями.
Так что, надеюсь, это поможет кому угодно.

Ответ 2

vndr выше решение будет работать, но на https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md, он сказал:

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

Если вам нужно добавить пользовательские настройки в конфигурацию NGINX, например чтобы включить существующие серверные блоки, вы можете использовать следующую настройку.

Пример: включить каталог для сканирования дополнительных файлов конфигурации nginx ['custom_nginx_config'] = "включить/etc/nginx/conf.d/*. conf;"

Итак, давайте проверим ваш /opt/gitlab/embedded/cookbooks/gitlab/templates/default/nginx.conf.erb, чтобы узнать, содержит ли он: <% = @custom_nginx_config% > (похоже, что текущий gitlab-7.5.3_omnibus.5.2.1.ci-1.el6.x86_64.rpm не включает его)

Если нет, то просто добавьте его над строкой include <% = @gitlab_http_config% > ;, например:

<%= @custom_nginx_config %>
include <%= @gitlab_http_config %>;

Затем откройте файл /etc/gitlab/gitlab.rb, чтобы добавить: nginx ['custom_nginx_config'] = "включить/etc/nginx/conf.d/*. conf;"

Мы можем сделать это просто добавим: включить /etc/nginx/conf.d/*. conf; вместо <% = @custom_nginx_config% >

Затем создайте нормальные nginx.conf файлы в/etc/nginx/conf.d/и gitlab-ctl reconfigure

Ответ 3

Здесь я использую

- gitlab.example.com to serve gitlab.example.com over https.
- example.com over http to serve another content other than gitlab application.

Gitlab, установленный из пакета deb, использует шеф-повар для обеспечения ngnix, поэтому вам нужно изменить рецепты шеф-повара и добавить новый шаблон vhost в каталог кулинарных шедевров.

Здесь вы можете найти все кулинарные книги повара: /Опт/gitlab/встроенный/поваренные книги /gitlab/

открыт /opt/gitlab/embedded/cookbooks/gitlab/recipes/nginx.rb

изменения:

nginx_vars = node['gitlab']['nginx'].to_hash.merge({
  :gitlab_http_config => File.join(nginx_etc_dir, "gitlab-http.conf"),
})

в

nginx_vars = node['gitlab']['nginx'].to_hash.merge({
  :gitlab_http_config => File.join(nginx_etc_dir, "gitlab-http.conf"),
  :examplecom_http_config => File.join(nginx_etc_dir, "examplecom-http.conf"),
})

добавьте это в тот же файл:

template nginx_vars[:examplecom_http_config] do
  source "nginx-examplecom-http.conf.erb"
  owner "root"
  group "root"
  mode "0644"
  variables(nginx_vars.merge(
    {
      :fqdn => "example.com",
      :port => 80,
    }
  ))
  notifies :restart, 'service[nginx]' if OmnibusHelper.should_notify?("nginx")
end

затем в каталоге шаблона (/opt/gitlab/embedded/cookbooks/gitlab/templates/default) создайте файл шаблона nginx vhost (nginx-examplecom-http.conf.erb) и добавьте его там:

server {
  listen <%= @listen_address %>:<%= @port %>;
  server_name <%= @fqdn %>;
  root /var/www/example.com;

  access_log  <%= @log_directory %>/examplecom_access.log;
  error_log   <%= @log_directory %>/examplecom_error.log;

  location /var/www/example.com {
    # 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;
  }

  error_page 502 /502.html;
}

вам нужно установить nginx ['redirect_http_to_https'] = false в (/etc/gitlab/gitlab.rb):

external_url "https://gitlab.example.com"
gitlab_rails['gitlab_email_from'] = "[email protected]"
gitlab_rails['gitlab_support_email'] = "[email protected]"



nginx['redirect_http_to_https'] = false
nginx['ssl_certificate'] = "/etc/gitlab/ssl/ssl-unified.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/ssl.key"


gitlab_rails['gitlab_default_projects_limit'] = 10

добавить включить <% = @examplecom_http_config% > ; в /opt/gitlab/embedded/cookbooks/gitlab/templates/default/nginx.conf.erb:

http {
  sendfile <%= @sendfile %>;
  tcp_nopush <%= @tcp_nopush %>;
  tcp_nodelay <%= @tcp_nodelay %>;

  keepalive_timeout <%= @keepalive_timeout %>;

  gzip <%= @gzip %>;
  gzip_http_version <%= @gzip_http_version %>;
  gzip_comp_level <%= @gzip_comp_level %>;
  gzip_proxied <%= @gzip_proxied %>;
  gzip_types <%= @gzip_types.join(' ') %>;

  include /opt/gitlab/embedded/conf/mime.types;

  include <%= @gitlab_http_config %>;
  include <%= @examplecom_http_config %>;
}

после выполнения всех этих изменений:

gitlab-ctl reconfigure
gitlab-ctl restart

Ответ 4

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

Просто установите эти два экземпляра на разные порты и прокси-сервер gitlab nginx с верхним. Из-за этого это будет непроизводительным, но совершенно несущественным.

Ответ 5

Поскольку я не хотел менять конфигурацию для сервера gitlab Nginx, не устанавливал и не настраивал другой Nginx и не делал этого, чтобы gitlab выдержал значительное обновление, я пришел к решению ниже для пакета Gitlab Omnibus.

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

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

и добавьте контент в новую конфигурацию:/etc/nginx/conf.d/new_app.conf

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;

  root /var/www/html/new_app/;
  index index.html index.htm;

 }

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

gitlab-ctl reconfigure

перезапустить nginx после изменения конфигурации или добавить дополнительную конфигурацию в /etc/nginx/conf.d:

gitlab-ctl restart nginx

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

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

и см. fooobar.com/questions/188460/... для перенаправления на другой сервер приложений.

Ответ 6

Те "другое содержимое" объявляются в NGiNX с Блоки сервера".

GitLab находится в /etc/nginx/sites-available/gitlab (согласно документации и обозначен в [/etc/nginx/sites-enabled][3]).
Вы можете добавить в него другие серверные блоки, похожие на это (возможно, вам придется выбрать другой номер порта), как показано в в этом процессе ( обновлено здесь для Ubuntu 14.04)

server {
        listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6

        root /var/www/example.com/public_html;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name example.com;
}

Директива root должна ссылаться на корневую папку вашего webapp (/var/www или, скорее, подпапка /var/www).

Этот серверный блок совершенно отделен от любого конфигуратора GitLab.