reconfigure change nginx gitlab gitlab-ci

nginx - change - install gitlab



Usando nginx de gitlab para servir otra aplicaciĆ³n (6)

Aquí estoy usando

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

Gitlab instalado desde el paquete Deb está utilizando chef para aprovisionar ngnix, por lo que debe modificar recetas de chef y agregar una nueva plantilla de vhost en el directorio de libros de cocina del chef.

Puede encontrar todos los libros de cocina del chef aquí: / opt / gitlab / embedded / cookbooks / gitlab /

abrir /opt/gitlab/embedded/cookbooks/gitlab/recipes/nginx.rb

cambio:

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

a:

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"), })

agregar esto al mismo archivo:

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

luego, en el directorio de plantillas (/ opt / gitlab / embedded / cookbooks / gitlab / templates / default), cree el archivo de plantilla nginx vhost (nginx-examplecom-http.conf.erb) y añádalo allí:

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; }

tienes que establecer nginx [''redirect_http_to_https''] = false en (/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

agregar incluir <% = @examplecom_http_config%>; en /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 %>; }

después de todos esos cambios ejecutados:

gitlab-ctl reconfigure gitlab-ctl restart

Hola, he instalado Gitlab usando esto
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#installation

Ahora quiero usar nginx para servir otro contenido que no sea la aplicación gitlab, ¿cómo puedo hacer esto?

  • Dónde están los archivos de configuración que necesito modificar
  • ¿Cómo puedo apuntar a un directorio como / var / www para que nginx sepa que es la raíz de otra aplicación?

Actualización (olvidé mencionar que estoy ejecutando esto en Red Hat 6.5, bienvenida a la solución Debian / Ubuntu)


Como no quería cambiar la configuración para el servidor Nginx de gitlab ni instalar / configurar otro Nginx y para asegurarme de que gitlab sobreviviera a una actualización importante, llegué a la siguiente solución para el paquete Gitlab Omnibus .

también según

Gitlab: Ningx => Insertar configuraciones personalizadas en la configuración de NGINX

edita el /etc/gitlab/gitlab.rb de tu gitlab:

nano /etc/gitlab/gitlab.rb

y desplácese a nginx [''custom_nginx_config''] y modifique como se indica a continuación, asegúrese de descomentar

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

crea el nuevo dir de configuración:

mkdir -p /etc/nginx/conf.d/ nano /etc/nginx/conf.d/new_app.conf

y agregue contenido a su nueva configuración: /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; }

y reconfigure gitlab para obtener las nuevas configuraciones insertadas

gitlab-ctl reconfigure

para reiniciar nginx después de cambiar las configuraciones o agregar más configuraciones en /etc/nginx/conf.d:

gitlab-ctl restart nginx

para verificar el registro de errores de nginx:

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

y vea https://.com/a/39695791/6821811 para redireccionar a otro servidor de aplicaciones.


Esos "otros contenidos" se declaran en NGiNX con " Bloques de servidor ".

El de GitLab está en /etc/nginx/sites-available/gitlab (de acuerdo con la documentation , y se encuentra en [/etc/nginx/sites-enabled][3] ).
Puede agregar otros bloques de servidor, similar a este (puede que tenga que elegir un número de puerto diferente), como se ilustra en este proceso (actualizado aquí para 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; }

La directiva root debe hacer referencia a la carpeta raíz de su aplicación web ( /var/www o, más probablemente, una subcarpeta de /var/www ).

Ese bloque de servidor está bastante separado de cualquier configuración de GitLab.


He intentado ambos enfoques, y el que funcionó para mí fue poner un NGINX limpio encima del Gitlab incorporado. es más fácil / conveniente a largo plazo.

Dependiendo de sus necesidades, aquí hay algunas cosas cruciales que deben estar en primer lugar:

  • Configuración DNS de su red / enrutador / etc. (de lo contrario, esto no funcionará, ya que las configuraciones aquí se basan en nombres de servidor,)
  • Mi configuración es un servidor trivial, varios sitios alojados en la misma IP del servidor, y los filtro nombrando las aplicaciones a través del filtro de nombre NGINX.

Estos son los principales pasos a seguir, tenga en cuenta que dependiendo de sus necesidades esto podría implicar más ajustes, también se trata de un servidor Ubuntu 14.04 .

  1. Primero desactive la Nginx principal (la que viene con omnibus) edite /etc/gitlab/gitlab.rb

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

  2. Ahora puedes instalar una instancia limpia de NGINX .
  3. Con respecto al paso anterior: a veces el instalador no crea las carpetas habilitadas por sitios / y sitios disponibles / , las crea y se asegura de incluirlas en el archivo /etc/nginx/nginx.conf

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

  4. En un flujo de trabajo general de nginx, incluye las configuraciones de tu sitio en sites-available / y cuando estés listo / feliz haz un enlace a sites-enabled / folder y reinicia nginx para que los cambios sean efectivos.
  5. Agregue su configuración de Gitlab a Nginx sitio-disponible / carpeta

aquí está mi 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; } }

puedes encontrar más detalles de la configuración aquí más opciones

  1. reiniciar / recargar nginx

    sudo service nginx restart

  2. reinicie gitlab omnibus y verifique su configuración de Gitlab

    sudo gitlab-ctl reconfigure

    sudo gitlab-ctl tail (solo para verificar si algo está mal en tu configuración de gitlab)

  3. Agregue configuraciones de servidor extra (tantas como quiera) que necesite en / etc / nginx / sites-available / y eventualmente cuando esté listo / listo agregue el enlace a / etc / nginx / sites-enabled /
    aquí hay otro ejemplo de otra aplicación

    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. recuerde siempre reiniciar / recargar nginx para que pueda ver sus cambios.

    sudo service nginx restart

  5. revisa los registros en caso de que algo esté mal /var/log/nginx/anysites*.log

  6. Tenga en cuenta que aquí estamos usando upstream con diferentes puertos y los nombres (existen / son reales / están registrados en el dominio de su empresa) apuntan a la misma dirección IP , lo que significa que NIGNX vendrá y buscará la misma dirección IP, pero no se romperá debido a los diferentes puertos en las corrientes ascendentes esto es realmente importante

Así es como funciona mi configuración ahora mismo. No he tenido ningún problema con Gitlab ni con ninguna otra aplicación.
Así que espero que esto ayude a cualquiera por ahí.


Incluso si realmente puede hacerlo, una mejor práctica sería usar un servidor nginx separado de nivel superior para servir tanto el nginx de gitlab como su otro contenido personalizado. El nginx de Gitlab puede cambiar su configuración en cualquier momento y puede romper su contenido personalizado. Además, separar nginx es completamente tuyo para configurarlo.

Simplemente instale esas dos instancias en diferentes puertos y delegue el nginx de gitlab con el superior. Por una causa, será una sobrecarga, pero completamente insignificante.


La solución anterior de vndr funcionaría, pero en el https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md , decía:

Insertar configuraciones personalizadas en la configuración de NGINX

Si necesita agregar configuraciones personalizadas en la configuración de NGINX, por ejemplo para incluir bloques de servidor existentes, puede usar la siguiente configuración.

Ejemplo: incluir un directorio para buscar archivos de configuración adicionales nginx [''custom_nginx_config''] = "include /etc/nginx/conf.d/*.conf;"

Así que revisemos su /opt/gitlab/embedded/cookbooks/gitlab/templates/default/nginx.conf.erb para ver si contiene: <% = @custom_nginx_config%> (se ve como el actual gitlab-7.5.3_omnibus.5.2 .1.ci-1.el6.x86_64.rpm no lo incluye)

Si no, solo agrégalo encima de la línea incluye <% = @gitlab_http_config%>; me gusta:

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

A continuación, abra el /etc/gitlab/gitlab.rb para agregar: nginx [''custom_nginx_config''] = "include /etc/nginx/conf.d/*.conf;"

Podemos hacerlo simplemente con solo agregar: incluir /etc/nginx/conf.d/*.conf; en cambio <% = @custom_nginx_config%>

A continuación, cree archivos .conf nginx normales en /etc/nginx/conf.d/ y reconfigure gitlab-ctl