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.