Cómo instalar la plataforma de alojamiento de código Gitea con HTTPS en Debian 10
Gitea es una aplicación web de alojamiento de código escrita en Go y bifurcada de Gogs. 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á cómo instalar Gitea en Debian 10 detrás de un proxy inverso HTTPS (Nginx).
Requisitos
- Un sistema Debian 10 en el que tengas privilegios de root.
- Un nombre de dominio registrado que apunte a tu servidor.
- La variable de entorno $EDITOR debe estar activada.
- 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.
Paso 1: Preparar el sistema
Empieza por actualizar tu índice de paquetes e instala las actualizaciones disponibles:
apt update apt upgrade -y reboot
Para esta configuración, se necesitan varios paquetes de software:
- Git, una dependencia de Gitea.
- PostgreSQL, ya que Gitea requiere una base de datos.
- Nginx, que se utilizará como proxy inverso.
- Certbot, una utilidad para obtener certificados SSL de Let’s Encrypt.
- Sudo, para ejecutar comandos como el usuario del sistema postgres.
Instálalos de la siguiente manera:
apt install -y git nginx certbot postgresql sudo
A continuación, crea un usuario para ejecutar Gitea:
adduser --system --disabled-password --group --shell /bin/bash --home /home/gitea gitea
Luego 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 de la siguiente manera
chown -R gitea:gitea /var/lib/gitea chown -R gitea:gitea /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.
Paso 2: Configuración de la base de datos
Asegúrate de que Postgres está habilitado y funcionando:
systemctl enable --now [email protected]
A continuación, crea un rol de usuario y una base de datos para que la utilice Gitea:
sudo -u postgres psql postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password'; postgres=# CREATE DATABASE gitea; postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea; postgres=# exit;
Paso 3: Instalación de Gitea
Descarga el último binariolinux-amd64 de 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 chmod 755 /usr/local/bin/gitea
A continuación, crea un archivo de unidad systemd para Gitea:
$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, indica a systemd que inicie Gitea al arrancar el sistema:
systemctl enable gitea.service
Paso 4: Configurar Gitea
Para la configuración inicial, utilizaremos el script de instalación 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 de acceso al 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 cualquiera 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
Remove the following line from the [server] section:
HTTP_PORT = 3000
And add the following lines to the [server] section:
HTTP_ADDR = /run/gitea/gitea.sock PROTOCOL = unix UNIX_SOCKET_PERMISSION = 666
Paso 5: Configurar el proxy inverso
Stop Nginx if it is running, as certbot will need to bind to port 80:
systemctl stop nginx.service
Utiliza el siguiente comando para obtener un certificado para tu dominio:
certbot 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/sites-available/gitea
E introduce la siguiente configuración:
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 del 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, ejecuta lo siguiente para activarla:
ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled
Comprueba si hay algún error de sintaxis con y edita tu configuración en consecuencia:
nginx -t
Por último, inicia Nginx y Gitea:
systemctl start nginx.service gitea.service
Tu instancia de Gitea debería ejecutarse ahora con éxito. Si no has creado una cuenta de administrador con el instalador web inicial, el primer usuario que se registre recibirá el rol de administrador.
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 /etc/gitea/app.ini y cambia el parámetro NIVEL en la sección [log ] a 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 1000, por ejemplo:
SSH_PORT = 2222
Luego reinicia Gitea para aplicar los cambios.