Gitea es un servidor git rápido y fácil de usar escrito en Go. Incluye un editor de archivos de repositorio, seguimiento de problemas del proyecto, gestión de usuarios, notificaciones, wiki incorporado, y mucho más.

Gitea es una aplicación ligera y puede instalarse en la mayoría de distribuciones de GNU/Linux. Si estás buscando una alternativa a Gitlab con una huella de memoria mucho más pequeña y no necesitas todas las características que ofrece Gitlab, entonces deberías darle una oportunidad a Gitea.

Este artículo explica cómo instalar y configurar Gitea en Debian 11. Para esta instalación usaremos MySQL, pero también podéis configurarlo sin problemas con PostgreSQL o SQLite. La instalación de MySQL la vamos a excluir debido a que usaremos un servidor externo.

Instalación de Gitea

Gitea proporciona imágenes Docker y puede ser instalado desde el código fuente, binario, y como un paquete. Vamos a instalar Gitea desde el binario.

Instalación de Git

Lo primero que instalaremos será git:

$ apt update
$ apt install git

Verificamos la versión de git que debe ser superior a la 2.xx:

$ git --version
git version 2.25.1

Creamos usuario git

Deberemos de crear un usuario nuevo para que ejecute la aplicación de Gitea, para eso creamos un usuario llamado git:

$ adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git

Descargamos el binario de Gitea

Desde la página de descarga de Gitea, podemos descargar la última versión de Gitea. En el momento de escribir este artículo, la última versión de Gitea es 1.17.0.

$ VERSION=1.17.0
$ wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64

Una vez descargado, copiamos el binario en el directorio correspondiente:

$ mv /tmp/gitea /usr/local/bin
$ chmod +x /usr/local/bin/gitea

Luego crearemos los directorios necesarios para el funcionamiento de Gitea:

$ mkdir -p /var/lib/gitea/{custom,data,log}
$ chown -R git:git /var/lib/gitea/
$ chmod -R 750 /var/lib/gitea/
$ mkdir /etc/gitea
$ chown root:git /etc/gitea
$ chmod 770 /etc/gitea

Creamos el servicio de systemD

Para poder gestionar Gitea desde SystemD, descargaremos el fichero desde el repositorio:

$ wget https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/systemd/gitea.service -P /etc/systemd/system/

No es necesario editar el fichero, la configuración que estamos haciendo es acorde a la configuración del servicio.

Iniciamos el servicio y lo habilitamos al arranque:

$ systemctl daemon-reload
$ systemctl enable --now gitea

Configurar Nginx Proxy para acceder vía dominio

Por defecto, Gitea escucha internamente por el puerto 3000. Para acceder desde IP se deberá de habilitar este puerto en el Firewall. En este caso lo que vamos hacer es configurar un Nginx Proxy para acceder vía web con un dominio.

Para ello deberemos de seguir estos pasos:

Configurar Proxy Inverso con Nginx para que escuche a un puerto interno
En ocasiones tenemos servicios o aplicaciones web que escuchan directamente a un puerto interno. Para evitar acceder a dicha aplicación o servicio por la IP del servidor, una configuración que podemos hacer es acceder desde un Nginx Proxy.

Si queréis ampliar más en la configuración de Nginx para Gitea, podéis añadir lo siguiente:

server {
    listen 80;
    server_name git.example.com;

    include snippets/letsencrypt.conf;
    return 301 https://git.example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name git.example.com;

    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;

    client_max_body_size 50m;

    # Proxy headers
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/git.example.com/chain.pem;
    include snippets/letsencrypt.conf;
    include snippets/ssl.conf;

    # log files
    access_log /var/log/nginx/git.example.com.access.log;
    error_log /var/log/nginx/git.example.com.error.log;

    # Handle / requests
    location / {
       proxy_redirect off;
       proxy_pass http://127.0.0.1:3000;
    }
}

Finalmente, creamos el fichero de configuración para Gitea:

$ nano /etc/gitea/app.ini

A continuación, añadimos lo siguiente:

[server]
DOMAIN           = git.example.com
ROOT_URL         = https://git.example.com/

Finalmente, reiniciamos Nginx y Gitea -en ese orden-:

$ systemctl reload nginx
$ systemctl restart gitea

Una vez hemos realizado esto, ya deberíamos de poder acceder vía web. En este punto, debemos de configurar la base de datos y demás parámetros de Gitea.

Una vez hayamos configurado la base de datos y hayamos hecho clic en el botón "Install Gitea" tendremos acceso de forma instantánea a nuestro nodo de Gitea.