GitWeb es una aplicación web que permite visualizar los repositorios Git publicados en un servidor.
En este tutorial se muestra la configuración de GitWeb compatible con las instalaciones desarrolladas en Cómo instalar un servidor Git sobre Nginx e Instalar servidor para el protocolo Git. Esto quiere decir que los usuarios que posean credenciales válidas para el servidor podrán acceder a la consulta de la totalidad de los repositorios mediante la URL https://crossforests.com/gitweb
mientras que el resto de los usuarios podrá consultar únicamente los repositorios públicos mediante la URL https://crossforests.com/gitweb
(nótese que en un caso se utiliza el protocolo seguro HTTPS mientras que en el otro el acceso es vía HTTP) como se muestra en el ejemplo a continuación:
- Consulta de todos los repositorios (sólo para usuarios autenticados)
- Consulta de los repositorios públicos
Instalación de GitWeb
En servidores Debian la instalación de GitWeb se reduce a la ejecución del comando apt‑get
:
# apt-get install gitweb
Configuración de datos estáticos
Para facilitar el acceso a los datos estáticos del servicio web se copian los datos de usr/share/gitweb/static
a /var/local/static/gitweb
:
# mkdir -p /var/local/static/gitweb # cd /var/local/static/gitweb # cp /usr/share/gitweb/static/* . # chgrp -R www-data /var/local/static # chmod -R g+r /var/local/static
Entre los datos estáticos ubicados en /var/local/static/gitweb
se encuentran la imágenes git-favicon.png
y git-logo.png
que se corresponden con el favicon a mostrar en las pestañas del navegador y el icono a mostrar en la esquina superior derecha de las imágenes.
Utilizando el editor de gráficos Gimp he creado mi propia versión de cada una de estas imágenes respetando el formato y tamaño de los originales que he denominado git-favicon-ex.png
y git-logo-ex.png
.
Configuración de Gitweb
Configuración para los repositorios privados
La configuración del servicio GitWeb para los repositorios privados se encuentra en el fichero /etc/gitweb.conf
:
# path to git projects (.git) $projectroot = "/var/local/git"; # directory to use for temp files $git_temp = "/tmp"; # target of the home link on top of all pages #$home_link = $my_uri || "/gitweb"; # html text to include at home page #$home_text = "indextext.html"; # file with project list; by default, simply scan the projectroot dir. #$projects_list = $projectroot; # stylesheet to use @stylesheets = ("/static/gitweb/gitweb.css"); # javascript code for gitweb $javascript = "/static/gitweb/gitweb.js"; # logo to use $logo = "/static/gitweb/git-logo-ex.png"; # the 'favicon' $favicon = "/static/gitweb/git-favicon-ex.png"; # git-diff-tree(1) options to use for generated patches #@diff_opts = ("-M"); @diff_opts = (); $site_name = "Example Git Repositories"; $projects_list_description_width = 80; @git_base_url_list = ("https://example.org/git"); @extra_breadcrumbs = ([ 'Example Site' => 'https://example.org' ]); $logo_url = "https://example.org"; $logo_label = "Example home site";
Configuración de repositorios públicos
La configuración del servicio GitWeb para los repositorios privados se encuentra en el fichero /etc/gitweb_pub.conf
:
# path to git projects (.git) $projectroot = "/var/local/git/pub"; # directory to use for temp files $git_temp = "/tmp"; # target of the home link on top of all pages #$home_link = $my_uri || "/gitweb"; # html text to include at home page #$home_text = "indextext.html"; # file with project list; by default, simply scan the projectroot dir. #$projects_list = $projectroot; # stylesheet to use @stylesheets = ("/static/gitweb/gitweb.css"); # javascript code for gitweb $javascript = "/static/gitweb/gitweb.js"; # logo to use/static $logo = "/static/gitweb/git-logo-ex.png"; # the 'favicon' $favicon = "/static/gitweb/git-favicon-ex.png"; # git-diff-tree(1) options to use for generated patches #@diff_opts = ("-M"); @diff_opts = (); $site_name = "Example Git Repositories"; $projects_list_description_width = 80; @git_base_url_list = ("http://example.org/git"); @extra_breadcrumbs = ([ 'Example Site' => 'http://example.org' ]); $logo_url = "http://example.org"; $logo_label = "Example home site";
Configuración de Nginx
Configuración del servicio HTTPS
Primeramente se crea el fichero /etc/nginx/global/gitweb_params.conf
que configura los parámetros para uso del servicio gitweb:
root /var/local; auth_basic "Gitweb users"; auth_basic_user_file /var/local/git/.htpasswd; fastcgi_pass unix:/var/run/fcgiwrap.socket; fastcgi_param SCRIPT_FILENAME /usr/share/gitweb/gitweb.cgi; fastcgi_param PATH_INFO $1; fastcgi_param GITWEB_CONFIG /etc/gitweb.conf; include fastcgi_params;
Para configurar el servicio, se accede al fichero de configuración correspondiente a la URL (generalmente /etc/nginx/sites‑enabled/default
) y, dentro de la sección server correspondiente al protocolo HTTPS, se incluyen dos secciones location
, una para los path que comiencen con /gitweb
, que ejecutará el servicio de GitWeb en sí, y otra para los paths que comiencen con /static/gitweb
, que simplemente servirá los contenidos estáticos del servicio como se muestra a continuación:
server { # SSL configuration # listen 443 ssl default_server; server_name example.org; ssl on; ... # Git web dinamyc data location /gitweb { include global/gitweb_params.conf; } # Git web static data location ^~ /static/gitweb { root /var/local; } ... }
Configuración del servicio HTTP
Primeramente se crea el fichero /etc/nginx/global/gitweb_pub_params.conf
que configura los parámetros para uso del servicio gitweb para los repositorios de acceso público:
root /var/local; fastcgi_pass unix:/var/run/fcgiwrap.socket; fastcgi_param SCRIPT_FILENAME /usr/share/gitweb/gitweb.cgi; fastcgi_param PATH_INFO $1; fastcgi_param GITWEB_CONFIG /etc/gitweb_pub.conf; include fastcgi_params;
Para configurar el servicio, se accede al fichero de configuración correspondiente a la URL (generalmente /etc/nginx/sites‑enabled/default
) y, dentro de la sección server correspondiente al protocolo HTTP, se incluyen dos secciones location
, una para los path que comiencen con /gitweb
, que ejecutará el servicio de GitWeb en sí, y otra para los paths que comiencen con /static/gitweb
, que simplemente servirá los contenidos estáticos del servicio como se muestra a continuación:
server { listen 80 default_server; # default treatment for common addresses server_name example.org; ... # Git public service web pages location /gitweb { include global/gitweb_pub_params.conf; } # Git web static data location ^~ /static/gitweb { root /var/local; } ... }