Cómo instalar GitBucket con Nginx en Ubuntu 20.04 LTS

GitBucket es una plataforma web Git de código abierto basada en Scala. Proporciona una interfaz de usuario con características similares a Github, como alojamiento de repositorios Git a través de HTTP y SSH, incidencias, wiki, visor de repositorios y pull requests. Viene con un rico conjunto de características. Algunas de ellas se enumeran a continuación:

  • Interfaz de usuario intuitiva
  • Soporte para GitLFS
  • Soporta repositorios Git públicos y privados
  • Cronología de la actividad y notificaciones por correo electrónico
  • Compatibilidad de la API con GitHub
  • Gestión de cuentas y grupos

En este tutorial, explicaremos cómo instalar GitBucket con Nginx en Ubuntu 20.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 20.04 con 2 GB de RAM.
  • Un nombre de dominio válido apuntado con tu servidor.
  • Una contraseña de root configurada en tu servidor.

Instalar Java

GitBucket se basa en Java, por lo que necesitarás instalarlo en tu sistema. Puedes instalarlo con el siguiente comando:

apt-get install default-jdk -y

Una vez instalado, verifica la versión de Java utilizando el siguiente comando:

java -version

Deberías obtener la siguiente salida:

openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)

Una vez que hayas terminado, puedes continuar con el siguiente paso.

Instalar y configurar GitBucket

Antes de empezar, es una buena idea crear un usuario y un grupo separados para ejecutar GitBucket. Puedes crear un nuevo grupo y usuario llamado gitbucket con el siguiente comando:

groupadd -g 555 gitbucket
useradd -g gitbucket --no-user-group --home-dir /opt/gitbucket --no-create-home --shell /usr/sbin/nologin --system --uid 555 gitbucket

A continuación, crea un nuevo directorio para GitBucket con el siguiente comando:

mkdir /opt/gitbucket

A continuación, descarga la última versión de GitBucket dentro del directorio GitBucket:

cd /opt/gitbucket
wget https://github.com/gitbucket/gitbucket/releases/download/4.33.0/gitbucket.war

A continuación, cambia la propiedad del directorio de GitBucket:

chown -R gitbucket:gitbucket /opt/gitbucket

GitBucket viene con una base de datos H2 integrada. Puedes crear un nuevo archivo de configuración de la base de datos con el siguiente comando:

nano /opt/gitbucket/database.conf

Añade las siguientes líneas:

db {
  url = "jdbc:h2:${DatabaseHome};MVCC=true"
  user = "sa"
  password = "sa"
}

Guarda y cierra el archivo cuando hayas terminado.

Crear un archivo de servicio Systemd para GitBucket

A continuación, tendrás que crear un archivo de servicio systemd para gestionar el servicio GitBucket. Puedes crearlo utilizando el siguiente comando:

nano /etc/systemd/system/gitbucket.service

Añade las siguientes líneas:

# GitBucket Service
[Unit]
Description=Manage Java service

[Service]
WorkingDirectory=/opt/gitbucket
ExecStart=/usr/bin/java -Xms128m -Xmx256m -jar gitbucket.war
User=gitbucket
Group=gitbucket
Type=simple
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo cuando hayas terminado. A continuación, recarga el demonio systemd utilizando el siguiente comando:

systemctl daemon-reload

A continuación, inicia el servicio GitBucket y habilítalo para que se inicie tras el reinicio del sistema con el siguiente comando:

systemctl start gitbucket
systemctl enable gitbucket

A continuación, verifica el estado del servicio GitBucket con el siguiente comando:

systemctl status gitbucket

Deberías obtener la siguiente salida:

? gitbucket.service - Manage Java service
     Loaded: loaded (/etc/systemd/system/gitbucket.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-05-14 02:27:13 UTC; 10s ago
   Main PID: 93029 (java)
      Tasks: 36 (limit: 2282)
     Memory: 324.9M
     CGroup: /system.slice/gitbucket.service
             ??93029 /usr/bin/java -Xms128m -Xmx256m -jar gitbucket.war

May 14 02:27:19 ubuntu2004 java[93029]: 2020-05-14 02:27:19.868:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
May 14 02:27:19 ubuntu2004 java[93029]: 2020-05-14 02:27:19.868:INFO:oejs.session:main: No SessionScavenger set, using defaults
May 14 02:27:19 ubuntu2004 java[93029]: 2020-05-14 02:27:19.875:INFO:oejs.session:main: node0 Scavenging every 600000ms
May 14 02:27:20 ubuntu2004 java[93029]: 02:27:20.261 [main] INFO  com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
May 14 02:27:20 ubuntu2004 java[93029]: 02:27:20.691 [main] INFO  com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
May 14 02:27:20 ubuntu2004 java[93029]: 02:27:20.697 [main] WARN  slick.util.AsyncExecutor - Having maxConnection > maxThreads can result in d>
May 14 02:27:20 ubuntu2004 java[93029]: 02:27:20.721 [main] INFO  g.core.servlet.InitializeListener - Check version
May 14 02:27:20 ubuntu2004 java[93029]: 02:27:20.721 [main] INFO  g.core.servlet.InitializeListener - Start schema update
May 14 02:27:22 ubuntu2004 java[93029]: 02:27:22.156 [main] INFO  l.servicelocator.ServiceLocator - Can not use class liquibase.parser.core.ya>
May 14 02:27:22 ubuntu2004 java[93029]: 02:27:22.161 [main] INFO  l.servicelocator.ServiceLocator - Can not use class liquibase.parser.core.js>

En este punto, GitBucket se está ejecutando y está a la escucha en el puerto 8080.

Configurar Nginx como proxy inverso

Por defecto, GitBucket se ejecuta en el puerto 8080. Por tanto, es una buena idea configurar Nginx como proxy inverso para GitBucket.

Primero, instala el servidor web Nginx con el siguiente comando:

apt-get install nginx -y

A continuación, crea un archivo de configuración de host virtual Nginx para GitBucket:

nano /etc/nginx/sites-available/gitbucket

Añade las siguientes líneas:

upstream gitbucket {
  server 127.0.0.1:8080 weight=100 max_fails=5 fail_timeout=5;
}

server {
  listen          80;
  server_name     gitbucket.linuxbuz.com;

  location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://gitbucket/;
  }
}

Guarda y cierra el archivo. A continuación, crea un enlace simbólico al directorio sites-enabled:

ln -s /etc/nginx/sites-available/gitbucket /etc/nginx/sites-enabled/

A continuación, comprueba si Nginx tiene algún error de sintaxis con el siguiente comando:

nginx -t

Deberías obtener la siguiente salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Por último, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

Asegura GitBucket con Let’s Encrypt

A continuación, tendrás que instalar el cliente Certbot para asegurar tu GitBucket con Let’s Encrypt SSL.

Primero, añade el repositorio de Certbot utilizando el siguiente comando:

add-apt-repository ppa:ahasenack/certbot-tlssni01-1875471

A continuación, actualiza el repositorio e instala el cliente Certbot con el siguiente comando:

apt-get update -y
apt-get install certbot python3-certbot-nginx -y

A continuación, ejecuta el siguiente comando para descargar e instalar Let’s Encrypt SSL para tu sitio web:

certbot --nginx -d gitbucket.linuxbuz.com

Se te pedirá que proporciones tu correo electrónico y que aceptes las condiciones del servicio:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for gitbucket.linuxbuz.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/gitbucket

A continuación, selecciona si deseas o no redirigir el tráfico HTTP a HTTPS:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Escribe 2 y pulsa Intro para finalizar la instalación.

Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/gitbucket

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://gitbucket.linuxbuz.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=gitbucket.linuxbuz.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/gitbucket.linuxbuz.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/gitbucket.linuxbuz.com/privkey.pem
   Your cert will expire on 2020-08-12. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Una vez hayas terminado, puedes pasar al siguiente paso.

Accede a GitBucket

Ahora, abre tu navegador web y escribe la URL https://gitbucket.linuxbuz.com. Serás redirigido a la siguiente página:

GitBucket

Haz clic en el botón Iniciar sesión. Deberías ver la página de inicio de sesión de GitBucket:

Introduce el nombre de usuario por defecto de GitBucket como root y la contraseña como root y haz clic en el botón Iniciar sesión. Deberías ver el panel de control de GitBucket en la siguiente página:

Panel de control de GitBucket

A continuación, haz clic en Configuración de la cuenta en la esquina superior derecha para cambiar la contraseña de root por defecto:

Configuración de la cuenta

Proporciona una nueva contraseña segura y haz clic en el botón Guardar para actualizar la contraseña raíz.

Perfil del administrador

Conclusión

Enhorabuena! has instalado y asegurado con éxito GitBucket con Nginx como proxy inverso en Ubuntu 20.04. Ahora puedes alojar tu propio repositorio Git utilizando GitBucket.

Scroll al inicio