Cómo instalar el servicio de alojamiento de código Gitea en Fedora 34

Gitea es una solución de código abierto para alojar código basada en la plataforma Git. Está escrito en lenguaje Go. Incluye un editor de archivos de repositorio, seguimiento de incidencias, pull requests, gestión de usuarios, notificaciones, wiki integrado, soporte LFS, ganchos Git y mucho más.

Es una aplicación ligera. Porlo tanto, puede instalarse en sistemas poco potentes . Si buscas una plataforma Git autoalojada y con poca memoria, deberías echar un vistazo a Gitea.

Este artículo cubrirá cómo instalar y configurar Gitea en Fedora 34 y cómo configurar tu primer repositorio Git. Gitea puede instalarse desde el código fuente, desde un binario, desde un paquete Docker o desde un paquete. Para nuestro tutorial, lo instalaremos desde binario.

Requisitos previos

  • Un servidor con Fedora 34.
  • Un usuario sudo no root.
  • SELinux desactivado.
  • Asegúrate de que todo está actualizado.
    $ sudo dnf update
    

Paso 1 – Configurar el cortafuegos

El primer paso es configurar el cortafuegos. El servidor Fedora viene con el cortafuegos Firewalld.

Comprueba si el cortafuegos se está ejecutando.

$ sudo firewall-cmd --state

Deberías obtener la siguiente salida.

running

Comprueba los servicios/puertos permitidos actualmente.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar la siguiente salida.

dhcpv6-client mdns ssh

Permite los puertos HTTP y HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Vuelve a comprobar el estado del cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Deberías ver una salida similar.

dhcpv6-client http https mdns ssh

Recarga el Cortafuegos.

$ sudo systemctl reload firewalld

Paso 2 – Instalar Git

El primer paso es instalar Git.

$ sudo dnf install git

Verifica la instalación comprobando la versión de Git.

$ git --version
git version 2.31.1

Configurar Git

Puedes configurar Git con el comando git config. Configura tu nombre y dirección de correo electrónico para trabajar con Git.

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Puedes comprobar la configuración utilizando el siguiente comando.

$ git config --list
user.name=Your Name
[email protected]

Paso 3 – Instalar y configurar PostgreSQL

Gitea es compatible con SQLite, MySQL/Mariadb, MSSQL y PostgreSQL. Para nuestro tutorial, utilizaremos PostgreSQL.

Instala e inicializa PostgreSQL.

$ sudo dnf module enable postgresql:13
$ sudo dnf install postgresql-server postgresql-contrib
$ sudo postgresql-setup --initdb --unit postgresql
$ sudo systemctl enable --now postgresql

PostgreSQL utiliza por defecto el esquema de encriptación md5 para la autenticación de contraseñas, que no es seguro. Tienes que cambiar al esquema SCRAM-SHA-256. Y si vas a conectarte a una base de datos PostgreSQL remota, tienes que configurarla para que escuche tu dirección IP. Ambas cosas se pueden cambiar editando el archivo /var/lib/pgsql/data/postgresql.conf. Ábrelo para editarlo.

$ sudo nano /var/lib/pgsql/data/postgresql.conf

Edita las siguientes variables de la siguiente manera.

listen_addresses = 'localhost, 201.0.110.0'
password_encryption = scram-sha-256

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Reinicia PostgreSQL.

$ sudo systemctl restart postgresql

Accede al shell de PostgreSQL.

$ sudo -u postgres psql

Crea un nuevo usuario SQL y una nueva base de datos para Gitea. Elige una contraseña segura para el usuario de la base de datos.

postgres-# CREATE ROLE gitea WITH LOGIN PASSWORD 'yourpassword';
postgres-# CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';

Sustituye el nombre de usuario, el nombre de la base de datos y la contraseña según corresponda.

Sal del intérprete de comandos escribiendo \q.

Permite que el usuario de la base de datos acceda a la base de datos creada anteriormente añadiendo la siguiente regla de autenticación a /var/lib/pgsql/data/pg_hba.conf.

Si la base de datos es local, añade esta línea.

local    giteadb    gitea    scram-sha-256

Si se trata de una base de datos remota, utiliza en su lugar el siguiente código.

host    giteadb    gitea    192.0.2.10/32    scram-sha-256

También tendrás que editar las siguientes líneas añadiendo sustituyendo ident por scram-sha-256.

# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

Deberían tener el siguiente aspecto.

# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Reinicia PostgreSQL.

$ sudo systemctl restart postgresql

También tendrás que añadir la siguiente regla en el cortafuegos si quieres habilitar las conexiones remotas.

$ sudo firewall-cmd --permanent--add-service=postgresql
$ sudo firewall-cmd --reload

Paso 4 – Crear un usuario Git

Crea un nuevo usuario del sistema para ejecutar la aplicación Gitea.

$ sudo useradd \
   --system \
   --shell /bin/bash \
   --comment 'Git Version Control' \
   --create-home \
   --home /home/git \
   git

Este comando crea un nuevo usuario y grupo llamado git y establece el directorio de inicio en /home/git.

Paso 5 – Instalar Gitea

Abre la página de descargas de G itea y comprueba el número de versión del último binario disponible. En el momento de escribir este tutorial, la última versión es la 1.14.3. Si hay una versión más reciente, cámbiala en la variable VERSION en el comando que aparece a continuación.

Utiliza la utilidad wget para obtener el último binario de Gitea.

$ GITEAVERSION=1.14.3
$ wget -O gitea https://dl.gitea.io/gitea/${GITEAVERSION}/gitea-${GITEAVERSION}-linux-amd64

Mueve el binario descargado al directorio /usr/local/bin.

$ sudo mv gitea /usr/local/bin

Haz que el binario sea ejecutable.

$ sudo chmod +x /usr/local/bin/gitea

Ejecuta los siguientes comandos para crear directorios y establecer los permisos necesarios para que Gitea funcione correctamente.

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

El permiso para el directorio /etc/gitea se establece en 770 para que el asistente de instalación pueda crear el archivo de configuración. Una vez finalizada la instalación, estableceremos permisos más restrictivos.

Crear un archivo de servicio Systemd

Ejecutaremos Gitea como un servicio systemd. Para ello, crea un nuevo archivo de entrada systemd para Gitea.

$ sudo nano /etc/systemd/system/gitea.service

Pega en él el siguiente código.

[Unit]
Description=Gitea
After=syslog.target
After=network.target
After=postgresql.service

[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea

[Install]
WantedBy=multi-user.target

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Como referencia, puedes echar un vistazo al archivo systemd de ejemplo disponible en el repositorio de Gitea.

Recarga el demonio systemd para habilitar el archivo que acabamos de crear.

$ sudo systemctl daemon-reload

Activa e inicia el servicio Gitea.

$ sudo systemctl enable --now gitea

Comprueba que Gitea se está ejecutando.

$ sudo systemctl status gitea
  gitea.service - Gitea
     Loaded: loaded (/etc/systemd/system/gitea.service; enabled; vendor preset: disabled)
     Active: active (running) since Tue 2021-07-04 20:33:38 EDT; 1 day 8h ago
   Main PID: 46404 (gitea)
      Tasks: 7 (limit: 2328)
     Memory: 115.5M
        CPU: 9min 12.061s
     CGroup: /system.slice/gitea.service
             ---46404 /usr/local/bin/gitea web -c /etc/gitea/app.ini
...

Paso 6 – Configurar Gitea

Gitea, por defecto, escucha en el puerto 3000. Puedes utilizar un puerto diferente o ceñirte al puerto por defecto. Por lo tanto, necesitamos abrir también el puerto 3000.

$ sudo firewall-cmd --permanent --add-port=3000/tcp
$ sudo firewall-cmd --reload

Abre tu navegador y escribe https://YOURIPADDRESS:3000 y te aparecerá el instalador de Gitea. Utiliza los siguientes valores para configurar.

Configuración de la base de datos

Instalador de Gitea - Configuración de la base de datos

  • Tipo de base de datos: Elige PostgreSQL en el desplegable
  • Host: 127.0.0.1:5432
  • Nombre de usuario: gitea
  • Contraseña: yourpassword
  • Nombre de la base de datos: gitea

Configuración general

Instalador de Gitea - Configuración general

  • Título del sitio: Introduce el nombre de tu organización
  • Ruta raíz del repositorio: Deja la ruta por defecto
  • Ruta raíz de Git LFS: Deja la ruta por defecto
  • Ejecutar como nombre de usuario: git
  • Dominio del servidor SSH: Introduce tu dirección IP
  • Puerto de escucha HTTP: 3000 (Puedes cambiar el puerto aquí, pero tendrás que acceder a él a través del cortafuegos).
  • URL Base de Gitea: http://YOURIPADDRESS:3000
  • Ruta de registro: Deja la predeterminada

Puedes configurar las opciones de Correo Electrónico y Servidor en este punto, o puedes cambiarlas más tarde. No obstante, debes completar la configuración de la cuenta de administrador.

Instalador de Gitea - Ajustes opcionales

Para iniciar la instalación, haz clic en el botón Instalar Gitea*. Una vez completado, iniciarás sesión automáticamente y serás redirigido al panel de control de la cuenta.

Panel de control de la cuenta de Gitea

La instalación creará el archivo de configuración de Gitea. Cambia su permiso a sólo lectura.

$ sudo chmod 750 /etc/gitea
$ sudo chmod 640 /etc/gitea/app.ini

Ya está. Gitea ya está instalado en tu servidor.

Paso 7 – Instalar SSL con Let’s Encrypt

Para instalar un certificado SSL utilizando Let’s Encrypt, necesitamos descargar la herramienta Certbot utilizando el instalador de paquetes Snapd incluido en Ubuntu 20.04.

Ejecuta los siguientes comandos para instalar Certbot.

$ sudo dnf install certbot

Generar el certificado SSL.

$ sudo certbot certonly --standalone --preferred-challenges http -d example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/example.com de tu servidor.

Crea un directorio webroot de desafío para la renovación automática de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crea un Cron Job para renovar el SSL. Se ejecutará cada día para comprobar el certificado y renovarlo si es necesario. Para ello, primero, crea el archivo /etc/cron.daily/certbot-renew y ábrelo para editarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Pega el siguiente código.

#!/bin/sh
certbot renew --cert-name example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Cambia los permisos del archivo de la tarea para que sea ejecutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Paso 8 – Instalar y configurar Nginx

El siguiente paso es instalar el servidor Nginx.

$ sudo dnf install nginx

Crea el archivo de configuración de Nginx para Gitea.

$ sudo nano /etc/nginx/conf.d/gitea.conf

Pega en él el siguiente código.

server {
        listen 80;
    
        location ~ /\.well-known/acme-challenge {
                root /var/lib/letsencrypt/;
        }
    
        server_name yourdomain.com;
        return 301 https://$server_name$request_uri;
}
server {
        listen 443 ssl http2;
        server_name your_domain;
    
        client_max_body_size 50m;
    
        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
        ssl_session_tickets off;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20- POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
        ssl_prefer_server_ciphers off;
        ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
        ssl_stapling on;
        ssl_stapling_verify on;

        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
    
        proxy_read_timeout 720s;
        proxy_connect_timeout 720s;
        proxy_send_timeout 720s;
        
        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;
    
        location / {
                proxy_redirect off;
                proxy_pass http://127.0.0.1:3000;
     	}
        access_log /var/log/nginx/gitea.access.log;
        error_log /var/log/nginx/gitea.error.log;
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Comprueba si el archivo de configuración funciona correctamente.

$ sudo nginx -t

Reinicia el servidor Nginx.

$ sudo systemctl restart nginx

A continuación, cambia el dominio y la URL raíz de Gitea. Para ello, abre el archivo de configuración /etc/gitea/app.ini.

$ sudo nano /etc/gitea/app.ini

Cambia los siguientes valores.

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

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Reinicia el servicio Gitea.

$ sudo systemctl restart gitea

Paso 9 – Configurar las notificaciones por correo electrónico

Si quieres recibir notificaciones por correo electrónico, puedes habilitarlas a través de Sendmail o a través de un servicio de transacciones de correo electrónico de terceros, como Amazon SES, Postmark, Mailgun o Sendgrid.

Para habilitar las notificaciones, abre el archivo de configuración /etc/gitea/app.ini.

$ sudo nano /etc/gitea/app.ini

Edita la siguiente sección del archivo y añade el siguiente código.

[mailer]
ENABLED = true
FROM           = [email protected]
MAILER_TYPE    = smtp
HOST           = mail.mydomain.com:587
IS_TLS_ENABLED = true
USER           = [email protected]
PASSWD         = `password`

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Reinicia el servicio Gitea.

$ sudo systemctl restart gitea

Paso 10 – Actualizar Gitea

Actualizar Gitea implica descargar y sustituir el binario de Gitea.

Primero, detén el servicio Gitea.

$ sudo systemctl stop gitea

Descarga e instala el binario de Gitea.

$ GITEAVERSION=LATESTVERSION
$ wget -O gitea https://dl.gitea.io/gitea/${GITEAVERSION}/gitea-${GITEAVERSION}-linux-amd64
$ sudo mv gitea /usr/local/bin
$ sudo chmod +x /usr/local/bin/gitea

Reinicia el servicio Gitea.

$ sudo systemctl start gitea

Paso 11 – Cómo utilizar SSH

Para utilizar SSH, necesitamos añadir nuestra propia clave SSH a Gitea. Si no tienes una, puedes crearla utilizando el siguiente comando en tu sistema local.

$ ssh-keygen -N "yourpassphrase" -t ed25519 -C "gitea_key"

Esto creará una clave llamada id_ed25519 en el directorio ~/.ssh. Para añadir esta clave, copia el contenido del archivo ~/.ssh/id_ed25519.pub en tu portapapeles. A continuación, añade esta clave a tu página de configuración de Gitea, en la pestaña Claves SSH/GPG. Haz clic en el botón Añadir Clave, dale un nombre a la clave y pégala en la casilla.

Gitea SSH Añadir clave

Si tienes una lista de usuarios permitidos en el archivo de configuración sshd, tienes que añadirle git.

Abre el archivo de configuración de SSHD.

$ sudo nano /etc/ssh/sshd_config

Busca una línea parecida a la siguiente.

AllowUsers myuser myotheruser git

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Reinicia el servicio SSHD.

$ sudo systemctl restart ssh

Tienes que añadir la frase de contraseña de la clave que hemos creado a la herramienta ssh-agent de tu sistema local para que no te la pida repetidamente. Ejecuta los siguientes comandos para hacerlo.

$ eval $(ssh-agent)
Agent pid 46436
$ ssh-add ~/.ssh/id_ed25519

Puedes clonar tu repositorio para probar la conexión SSH.

$ git clone ssh://[email protected]/username/repo.git
Cloning into 'repo'...
The authenticity of host 'example.com (201.110.80.160)' can't be established.
ECDSA key fingerprint is SHA256:Kx9l19zpGhHfbb2wHtmWeC7/WWv8e5/T3Tcws2qwVEw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'example.com,201.110.80.160' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (5/5), 4.77 KiB | 977.00 KiB/s, done.

Conclusión

Con esto concluye el tutorial sobre la instalación y configuración del servicio de alojamiento de código Gitea en Fedora 34. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...