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
- 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
- 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.
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.
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.
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.