Cómo instalar la plataforma de alojamiento de código Gitea con HTTPS en CentOS 8

Gitea es una aplicación web de alojamiento de código escrita en Go. Como su nombre indica, está diseñada para ser utilizada con el popular programa de control de fuentes Git, de forma similar a Gitlab y Github. Esta guía explicará la instalación de Gitea en CentOS 8 con un proxy inverso Nginx HTTPS.

Requisitos

  • Un sistema CentOS 8 en el que tengas privilegios de root.
  • Un nombre de dominio registrado que apunte a tu servidor.
  • La variable de entorno $EDITOR debe estar configurada con tu editor de texto preferido.
  • Acceso a un servidor SMTP para las notificaciones por correo electrónico (opcional).

Asegúrate de que tu (sub)dominio apunta a la dirección IPv4 de tu servidor con un registro A . Opcionalmente, crea un registro AAAA que apunte a la dirección IPv6 de tu servidor.

NOTA: Esta guía asume que SELinux está configurado como deshabilitado o permisivo.

Paso 1: Preparar el sistema

Comienza instalando las actualizaciones disponibles y reiniciando el sistema:

dnf update -y
reboot

Para esta configuración, se necesitan varios componentes de software:

  • Git, una dependencia de Gitea.
  • PostgreSQL, ya que Gitea requiere una base de datos.
  • Nginx, que se utilizará como proxy inverso.
  • Sudo, para ejecutar comandos como el usuario del sistema postgres .
  • Wget
  • Certbot, una utilidad para obtener certificados SSL de Let’s Encrypt. Certbot se instalará por separado, ya que no está disponible en los repositorios de software de CentOS.

Instálalos de la siguiente manera:

dnf install -y git postgresql postgresql-server nginx sudo wget

Certbot-auto es un script que gestiona la instalación de Certbot. Descárgalo:

wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto

Asegúrate de que se han establecido los permisos correctos:

chmod 0755 /usr/local/bin/certbot-auto

Ejecuta lo siguiente para instalar certbot. El gestor de paquetes te pedirá que confirmes la instalación de las dependencias, responde «y».

certbot-auto --install-only

A continuación, crea un usuario para ejecutar Gitea:

useradd --system --shell /bin/bash --create-home --home-dir /home/gitea gitea

A continuación, crea la estructura de directorios para Gitea:

mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea

Y establece la propiedad y los permisos como se indica a continuación:

chown -R gitea:gitea /var/lib/gitea
chown -R gitea:gitea /var/run/gitea
chown -R root:gitea /etc/gitea
chmod -R 750 /var/lib/gitea
chmod 770 /etc/gitea

Los permisos en /etc/gitea son temporales y se ajustarán después de ejecutar el instalador web.

Habilita el tráfico a los puertos 80 y 443 de forma permanente:

firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanent
firewall-cmd --reload

El acceso al puerto 3000 sólo es necesario temporalmente para la configuración inicial, ya que configuraremos gitea para que utilice un socket Unix en su lugar.

firewall-cmd --add-port 3000/tcp

Paso 2: Configuración de la base de datos

Inicializa Postgres:

postgresql-setup --initdb --unit postgresql

Asegúrate de que está activado y en funcionamiento:

systemctl enable --now postgresql.service

Entra en Postgres:

sudo -u postgres psql

A continuación, crea un rol de usuario y una base de datos que utilizará Gitea:

postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password';
postgres=# CREATE DATABASE gitea;
postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;
postgres=# \q

Abre el archivo de configuración de autenticación de clientes de Postgres:

$EDITOR /var/lib/pgsql/data/pg_hba.conf

Añade la siguiente línea justo después de # conexiones locales IPv4 :

# IPv4 local connections:
host	gitea		gitea		127.0.0.1/32		md5

Guarda el archivo y reinicia Postgres:

systemctl restart postgresql.service

Paso 3: Instalación de Gitea

Descarga la versión binaria linux-amd64 de Gitea desde la página de descargas de Gitea. Por ejemplo:

wget https://dl.gitea.io/gitea/master/gitea-master-linux-amd64 -O /usr/local/bin/gitea

Establece los permisos correctos en el binario descargado:

chmod 755 /usr/local/bin/gitea

A continuación, crea un archivo de unidad systemd:

$EDITOR /etc/systemd/system/gitea.service

E introduce lo siguiente:

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
Requires=postgresql.service
[Service]
Type=simple
User=gitea
Group=gitea
WorkingDirectory=/var/lib/gitea/
RuntimeDirectory=gitea
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target

Asegúrate de que la nueva unidad está cargada:

systemctl daemon-reload

A continuación, ordena a systemd que inicie Gitea en el arranque:

systemctl enable gitea.service

Paso 4: Configurar Gitea

Para la configuración inicial, utilizaremos el instalador web incluido. Primero, inicia Gitea:

systemctl start gitea.service

A continuación, navega a http://your_domain:3000/install y rellena los parámetros necesarios de la siguiente manera

  • Tipo de base de datos: PostgreSQL
  • Host: 127.0.0.1:5432
  • Nombre de usuario: gitea
  • Contraseña: Introduce la contraseña que elegiste durante la creación del rol Postgres.
  • Nombre de la base de datos: gitea
  • SSL: Desactivado
  • Título del sitio: Título de tu elección.
  • Ruta raíz del repositorio: /var/lib/gitea/data/repositorios
  • Ruta raíz de Git LFS: /var/lib/gitea/data/lfs
  • Ejecutar como nombre de usuario: gitea
  • Dominio del servidor SSH: tu_dominio
  • Puerto del servidor SSH: 22
  • Puesto de escucha HTTP de Gitea: 3000
  • URL base de Gitea: https://your_domain/
  • Ruta de registro: /var/lib/gitea/log

Configura el correo electrónico y el resto de ajustes como consideres oportuno, y luego haz clic en «Instalar Gitea». Se te redirigirá a una URL defectuosa. Esto es normal, ya que aún no hemos configurado Nginx o HTTPS. Por razones de rendimiento, ahora configuraremos Gitea para que escuche en un socket unix en lugar del puerto TCP por defecto.

Detén a Gitea antes de continuar:

systemctl stop gitea.service

Aprieta los permisos en /etc/gitea como se muestra a continuación. Esto evita que cualquier persona que no esté en el grupo gitea pueda leer app.ini , que contiene información sensible, incluidas las credenciales de la base de datos.

chmod 750 /etc/gitea
chown root:gitea /etc/gitea/app.ini
chmod 640 /etc/gitea/app.ini

Abre su archivo de configuración:

$EDITOR /etc/gitea/app.ini

Elimina la siguiente línea de la sección del servidor:

HTTP_PORT = 3000

Y añade las siguientes líneas en la sección del servidor:

HTTP_ADDR        = /run/gitea/gitea.sock
PROTOCOL         = unix
UNIX_SOCKET_PERMISSION = 666

Paso 5: Configuración del proxy inverso

Detén Nginx si se está ejecutando, para permitir que certbot escuche en el puerto 80:

systemctl stop nginx.service

Utiliza el siguiente comando para obtener un certificado para tu dominio:

certbot-auto certonly --standalone --agree-tos -m [email protected] -d your_domain

Let’s Encrypt verificará la propiedad del dominio antes de emitir el certificado. Tu certificado, la cadena y la clave privada se almacenarán en /etc/letsencrypt/live/tu_dominio/ .

Ahora podemos configurar Nginx. Crea un nuevo archivo de configuración:

$EDITOR /etc/nginx/conf.d/gitea.conf

E introduce los siguientes bloques de servidor:

server {
        listen 80;
        listen [::]:80;
        server_name your_domain;
        return 301 https://$server_name$request_uri;
	access_log /var/log/nginx/gitea-proxy_access.log;
	error_log /var/log/nginx/gitea-proxy_error.log;
}
server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name your_domain;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
        location / {
                proxy_pass http://unix:/var/run/gitea/gitea.sock;
	}
	access_log /var/log/nginx/gitea-proxy_access.log;
	error_log /var/log/nginx/gitea-proxy_error.log;
}

El primer bloque de servidor simplemente sirve para redirigir todas las peticiones HTTP a HTTPS. El segundo bloque escucha las conexiones HTTPS y las desvía al socket Unix en el que hemos configurado que escuche Gitea.

Una vez que hayas guardado la configuración anterior, comprueba si hay algún error de sintaxis y edita la configuración si es necesario:

nginx -t

Por último, inicia Nginx y Gitea:

systemctl start nginx.service gitea.service

Tu instancia de Gitea debería ejecutarse ahora con éxito. Accede a ella en https://your_domain

Pasos opcionales

Configuración del registro

Por defecto, Gitea registra los mensajes de nivel de gravedad Info y superior. Lo más probable es que quieras cambiarlo a Advertencia o Error . Para ello, abre el archivo /etc/gitea/app.ini y cambia el parámetro NIVEL de la sección [ log ] por uno de los siguientes: trace, debug, info, warn, error, critical, fatal, none. Por ejemplo, para registrar mensajes de gravedad Warn y superiores, utiliza

[log]
MODE = file
LEVEL = warn
ROOT_PATH = /var/lib/gitea/log

Reinicia Gitea para que los cambios surtan efecto:

systemctl restart gitea.service

Servidor SSH independiente

Gitea puede utilizar alternativamente su propio servidor SSH. Para activarlo, añade la siguiente línea a la sección de configuración [ servidor] :

START_SSH_SERVER = true

Y cambia el puerto SSH a cualquier número superior a 1024, por ejemplo:

SSH_PORT = 2222

A continuación, reinicia Gitea para aplicar los cambios y habilitar el tráfico hacia el puerto elegido:

firewall-cmd --add-port 2222/tcp --permanent
firewall-cmd --reload

También te podría gustar...