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

27 feb 2021 6 min di lettura
Cómo instalar la plataforma de alojamiento de código Gitea con HTTPS en CentOS 8
Indice dei contenuti

Introducción

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 fuente Git, similar a Gitlab y Github. Esta guía lo guiará a través de la instalación de Gitea en CentOS 8 con un proxy inverso Nginx HTTPS.

Prerrequisitos

  • Un sistema CentOS 8 en el que tiene privilegios de root.
  • Un nombre de dominio registrado que apunta a su servidor.
  • Acceso a un servidor SMTP para notificaciones por correo electrónico (opcional).

Asegúrese de que su (sub) dominio apunte a la dirección IPv4 de su servidor con un registro A Opcionalmente, cree un AAAA que apunte a la dirección IPv6 del servidor.

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

Preparación del sistema

Empiece por instalar todas las actualizaciones disponibles y reinicie:

sudo dnf update -y
sudo reboot

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

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

Ejecute estos comandos para continuar con la instalación del software requerido:

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

Certbot-auto es un script que gestiona la instalación de certbot. Descargalo:

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

Asegúrese de que estén configurados los permisos correctos:

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

Haga lo siguiente para instalar certbot. El administrador de paquetes le pedirá que confirme la instalación de las dependencias, responda y.

sudo /usr/local/bin/certbot-auto --install-only

Luego, cree un usuario para ejecutar Gitea:

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

Luego crea la estructura de directorio para Gitea:

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

Y configure las propiedades y los permisos de la siguiente manera:

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

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

Habilite permanentemente el tráfico a los puertos 80 y 443:

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

El acceso al puerto 3000 solo se requiere temporalmente para la configuración inicial, ya que configuraremos gitea para usar un socket Unix.

sudo firewall-cmd --add-port 3000/tcp

Instalar la base de datos

Inicializar Postgres:

sudo postgresql-setup --initdb --unit postgresql

Asegúrese de que esté habilitado y en ejecución:

sudo systemctl enable --now postgresql.service

Inicie sesión en Postgres:

sudo -u postgres psql

Luego cree un rol de usuario y una base de datos que será utilizada por Gitea:

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

Abra el archivo de configuración de autenticación del cliente de Postgres:

sudo vi /var/lib/pgsql/data/pg_hba.conf

Agregue la siguiente línea justo después de las conexiones #IPv4

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

Guarde el archivo y reinicie Postgres:

sudo systemctl restart postgresql.service

Instalar Gitea

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

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

Establezca los permisos correctos en el binario descargado:

sudo chmod 755 /usr/local/bin/gitea

Luego, cree un archivo de unidad systemd:

sudo vi /etc/systemd/system/gitea.service

E ingrese 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úrese de que la nueva unidad esté cargada:

sudo systemctl daemon-reload

Luego dígale a systemd que inicie Gitea en el inicio:

sudo systemctl enable gitea.service

Configurar Gitea

Para la configuración inicial, usaremos el instalador web incluido. Primero, inicie Gitea:

sudo systemctl start gitea.service

Luego vaya a http://your_domain:3000/install y complete los parámetros requeridos de la siguiente manera:

  • Tipo de base de datos: PostgreSQL
  • Anfitrión: 127.0.0.1:5432
  • Nombre de usuario: gitea
  • Contraseña: ingrese la contraseña que eligió al crear el rol de Postgres.
  • Nombre de la base de datos: gitea
  • SSL: deshabilitar
  • Título del sitio: título de su elección.
  • Ruta raíz del repositorio: /var /lib /gitea /data /repositories
  • Ruta raíz de Git LFS: /var /lib /gitea /data /lfs
  • Ejecutar como nombre de usuario: gitea
  • Dominio del servidor SSH: su_dominio
  • Puerto del servidor SSH: 22
  • Publicación de escucha HTTP de Gitea: 3000
  • URL base de Gitea: https: //tu_dominio /
  • Ruta de registro: /var /lib /gitea /log

Configure el correo electrónico y la configuración restantes según lo considere apropiado, luego haga clic en "Instalar Gitea". Será redirigido 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 predeterminado.

Detenga Gitea antes de continuar:

sudo systemctl stop gitea.service

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

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

Abra su archivo de configuración:

sudo vi /etc/gitea/app.ini

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

HTTP_PORT = 3000

Y agregue las siguientes líneas en la sección del servidor:

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

Configurar el proxy inverso

Detenga Nginx si se está ejecutando, para permitir que certbot acceda al puerto 80:

sudo systemctl stop nginx.service

Utilice el siguiente comando para obtener un certificado para el dominio:

sudo /usr/local/bin/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. El certificado, la cadena y la clave privada se almacenarán en /etc/letsencrypt/live/your_domain/.

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

sudo vi /etc/nginx/conf.d/gitea.conf

E ingrese 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 del servidor es simplemente redirigir todas las solicitudes HTTP a través de HTTPS. El segundo bloque escucha las conexiones HTTPS y las reenvía al socket Unix en el que hemos configurado Gitea para escuchar.

Después de guardar la configuración anterior, verifique si hay errores de sintaxis y cambie la configuración si es necesario:

sudo nginx -t

Finalmente, inicie Nginx y Gitea:

sudo systemctl start nginx.service gitea.service

Su instancia de Gitea ahora debería funcionar bien. Inicie sesión en https://your_domain.

Pasos opcionales

De forma predeterminada, Gitea registra los mensajes de información de nivel de gravedad y superior. Lo más probable es que desee cambiarlo a Warn o Error. Para hacer esto, abra /etc/gitea/app.ini y cambie el parámetro LEVEL en la [log] a uno de: trace, debug, info, warn, error, critic, fatal, none. Por ejemplo, para registrar Warn mensajes de gravedad y posteriormente, utilizar:

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

Reinicie Gitea para que los cambios surtan efecto:

sudo systemctl restart gitea.service

Servidor SSH independiente

Gitea puede utilizar alternativamente su propio servidor SSH. Para habilitarlo, agregue la siguiente línea a la sección de configuración [server]

START_SSH_SERVER = true

Y cambie el puerto SSH a cualquier número por encima de 1024, por ejemplo:

SSH_PORT = 2222

Luego reinicie Gitea para aplicar los cambios y habilitar el tráfico en el puerto elegido:

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

Conclusión

En este tutorial hemos visto cómo instalar Gitea Code Hosting Platform con HTTPS en CentOS 8.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.