Gitea es una solución de alojamiento de código de código abierto basada en la plataforma Git. Está escrito en el idioma Go. Incluye un editor de archivos de repositorio, seguimiento de problemas, solicitudes de incorporación de cambios, administración de usuarios, notificaciones, wiki integrado, compatibilidad con LFS, ganchos de Git y mucho más.
Es una aplicación ligera. Por lo tanto, se puede instalar en sistemas de baja potencia. Si está buscando una plataforma Git autohospedada con una plataforma de memoria más pequeña, debe consultar Gitea.
Este artículo cubrirá cómo instalar y configurar Gitea en Fedora 34 y cómo configurar su primer repositorio Git. Gitea se puede instalar desde fuente, binario, un paquete docker o un paquete. Para nuestro tutorial, lo instalaremos desde binario.
Requisitos
- Un servidor que ejecuta 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 Firewalld cortafuegos.
Compruebe si el cortafuegos se está ejecutando.
$ sudo firewall-cmd --state
Deberías obtener el siguiente resultado.
running
Verifique los servicios/puertos permitidos actualmente.
$ sudo firewall-cmd --permanent --list-services
Debería mostrar el siguiente resultado.
dhcpv6-client mdns ssh
Permitir puertos HTTP y HTTPS.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Vuelva a comprobar el estado del cortafuegos.
$ sudo firewall-cmd --permanent --list-services
Debería ver un resultado similar.
dhcpv6-client http https mdns ssh
Vuelva a cargar el cortafuegos.
$ sudo systemctl reload firewalld
Paso 2:instalar Git
El primer paso es instalar Git.
$ sudo dnf install git
Verifique la instalación comprobando la versión de Git.
$ git --version
git version 2.31.1
Configurar Git
Git se puede configurar con git config
dominio. Configure su 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]"
Puede verificar la configuración usando 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, usaremos PostgreSQL.
Instale e inicialice 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 el esquema de cifrado md5 para la autenticación de contraseña de forma predeterminada, lo que no es seguro. Debe cambiar a SCRAM-SHA-256
esquema. Y si se va a conectar a una base de datos PostgreSQL remota, debe configurarla para que escuche su dirección IP. Ambos se pueden cambiar editando /var/lib/pgsql/data/postgresql.conf
expediente. Ábralo para editarlo.
$ sudo nano /var/lib/pgsql/data/postgresql.conf
Edite las siguientes variables de la siguiente manera.
listen_addresses = 'localhost, 201.0.110.0'
password_encryption = scram-sha-256
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Reinicie PostgreSQL.
$ sudo systemctl restart postgresql
Inicie sesión en el shell de PostgreSQL.
$ sudo -u postgres psql
Cree un nuevo usuario SQL y una base de datos para Gitea. Elija una contraseña segura para el usuario de su 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';
Reemplace el nombre de usuario, el nombre de la base de datos y la contraseña según corresponda.
Salga del shell escribiendo \q
.
Permita que el usuario de la base de datos acceda a la base de datos creada anteriormente agregando la siguiente regla de autenticación a /var/lib/pgsql/data/pg_hba.conf
.
Si la base de datos es local, agregue esta línea.
local giteadb gitea scram-sha-256
Para una base de datos remota, use el siguiente código en su lugar.
host giteadb gitea 192.0.2.10/32 scram-sha-256
También deberá editar las siguientes líneas agregando el reemplazo ident
con 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
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Reinicie PostgreSQL.
$ sudo systemctl restart postgresql
También deberá agregar la siguiente regla en el firewall si desea habilitar las conexiones remotas.
$ sudo firewall-cmd --permanent--add-service=postgresql
$ sudo firewall-cmd --reload
Paso 4:crea un usuario de Git
Cree 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
Abra la página de descargas de Gitea y verifique el número de versión del último binario disponible. Al momento de escribir este tutorial, la última versión es 1.14.3. Si hay una versión más nueva, cámbiela en la VERSION
variable en el siguiente comando.
Usa el wget
utilidad para obtener el último binario de Gitea.
$ GITEAVERSION=1.14.3
$ wget -O gitea https://dl.gitea.io/gitea/${GITEAVERSION}/gitea-${GITEAVERSION}-linux-amd64
Mueva el binario descargado a /usr/local/bin
directorio.
$ sudo mv gitea /usr/local/bin
Haz el ejecutable binario.
$ sudo chmod +x /usr/local/bin/gitea
Ejecute 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 /etc/gitea
El directorio se establece en 770 para que el asistente de instalación cree el archivo de configuración. Una vez que se complete la instalación, estableceremos un permiso más restrictivo.
Crear un archivo de servicio de Systemd
Ejecutaremos Gitea como un servicio systemd. Para ello, cree un nuevo archivo de entrada systemd para Gitea.
$ sudo nano /etc/systemd/system/gitea.service
Pegue el siguiente código en él.
[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
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Como referencia, puede echar un vistazo al archivo systemd de muestra disponible en el repositorio de Gitea.
Vuelva a cargar el demonio systemd para habilitar el archivo que acabamos de crear.
$ sudo systemctl daemon-reload
Habilite e inicie el servicio de Gitea.
$ sudo systemctl enable --now gitea
Verifique 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, de manera predeterminada, escucha en el puerto 3000. Puede usar un puerto diferente o quedarse con el puerto predeterminado. Por lo tanto, también debemos abrir el puerto 3000.
$ sudo firewall-cmd --permanent --add-port=3000/tcp
$ sudo firewall-cmd --reload
Abra su navegador y escriba https://YOURIPADDRESS:3000
y serás recibido con el instalador de Gitea. Use los siguientes valores para configurar.
Configuración de la base de datos
- Tipo de base de datos: Elija PostgreSQL del menú desplegable
- Anfitrión: 127.0.0.1:5432
- Nombre de usuario: gitea
- Contraseña: tucontraseña
- Nombre de la base de datos: gitea
Configuración general
- Título del sitio: Ingrese el nombre de su organización
- Ruta raíz del repositorio: Deje la ruta predeterminada
- Ruta raíz de Git LFS: Deje la ruta predeterminada
- Ejecutar como nombre de usuario: git
- Dominio del servidor SSH: Introduzca su dirección IP
- Puerto de escucha HTTP: 3000 (puede cambiar el puerto aquí, pero deberá acceder a él a través del firewall).
- URL base de Gitea: http://TUDIRECCIÓNIP:3000
- Ruta de registro: Deje el valor predeterminado
Puede configurar los ajustes de correo electrónico y servidor en este punto, o puede cambiarlos más tarde. Sin embargo, debe completar la configuración de la cuenta de administrador.
Para iniciar la instalación, haga clic en Instalar Gitea* botón. Una vez completado, iniciará sesión automáticamente y será redirigido al panel de control de la cuenta.
La instalación creará el archivo de configuración de Gitea. Cambie su permiso a solo lectura.
$ sudo chmod 750 /etc/gitea
$ sudo chmod 640 /etc/gitea/app.ini
Eso es todo. Gitea ya está instalado en su servidor.
Paso 7:instale SSL con Let's Encrypt
Para instalar un certificado SSL usando Let's Encrypt, necesitamos descargar la herramienta Certbot usando el instalador del paquete Snapd incluido en Ubuntu 20.04.
Ejecute los siguientes comandos para instalar Certbot.
$ sudo dnf install certbot
Genere el certificado SSL.
$ sudo certbot certonly --standalone --preferred-challenges http -d example.com
El comando anterior descargará un certificado en /etc/letsencrypt/live/example.com
directorio en su servidor.
Cree un directorio webroot de desafío para la renovación automática de Let's Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Cree un trabajo cron para renovar el SSL. Se ejecutará todos los días para verificar el certificado y renovarlo si es necesario. Para eso, primero crea el archivo /etc/cron.daily/certbot-renew
y ábralo para editarlo.
$ sudo nano /etc/cron.daily/certbot-renew
Pegue el siguiente código.
#!/bin/sh
certbot renew --cert-name example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Cambie los permisos en el archivo de tareas 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
Cree el archivo de configuración de Nginx para Gitea.
$ sudo nano /etc/nginx/conf.d/gitea.conf
Pegue el siguiente código en él.
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;
}
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Verifique si el archivo de configuración funciona correctamente.
$ sudo nginx -t
Reinicie el servidor Nginx.
$ sudo systemctl restart nginx
A continuación, cambie el dominio de Gitea y la URL raíz. Para ello, abra el archivo de configuración /etc/gitea/app.ini
.
$ sudo nano /etc/gitea/app.ini
Cambie los siguientes valores.
[server]
SSH_DOMAIN = git.example.com
DOMAIN = git.example.com
ROOT_URL = https://git.example.com/
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Reinicie el servicio de Gitea.
$ sudo systemctl restart gitea
Paso 9:configuración de notificaciones por correo electrónico
Si desea recibir notificaciones por correo electrónico, puede habilitarlas a través de Sendmail o mediante un servicio de transacciones de correo electrónico de terceros, como Amazon SES, Postmark, Mailgun o Sendgrid.
Para habilitar las notificaciones, abra el archivo de configuración /etc/gitea/app.ini
.
$ sudo nano /etc/gitea/app.ini
Edite la siguiente sección en el archivo y agregue 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`
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Reinicie el servicio de Gitea.
$ sudo systemctl restart gitea
Paso 10 - Actualización de Gitea
Actualizar Gitea implica descargar y reemplazar el binario de Gitea.
Primero, detenga el servicio de 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
Reinicie el servicio de Gitea.
$ sudo systemctl start gitea
Paso 11 - Cómo usar SSH
Para usar SSH, debemos agregar nuestra propia clave SSH a Gitea. Si no tiene uno, puede crear uno usando el siguiente comando en su sistema local.
$ ssh-keygen -N "yourpassphrase" -t ed25519 -C "gitea_key"
Esto creará una clave llamada id_ed25519
en el ~/.ssh
directorio. Para agregar esta clave, copie el contenido del archivo ~/.ssh/id_ed25519.pub
a su portapapeles. Luego agregue esta clave a su página de configuración de Gitea en la pestaña Claves SSH/GPG . Haga clic en Agregar clave y asigne un nombre a la clave y péguelo en el cuadro.
Si tiene una lista de usuarios permitidos en el archivo de configuración de sshd, debe agregar git
a ella.
Abra el archivo de configuración de SSHD.
$ sudo nano /etc/ssh/sshd_config
Busque una línea que debería parecerse a la siguiente.
AllowUsers myuser myotheruser git
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Reinicie el servicio SSHD.
$ sudo systemctl restart ssh
Debe agregar la frase de contraseña para la clave que creamos en ssh-agent
herramienta en su sistema local para que no se le solicite repetidamente. Ejecute 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
Esto concluye el tutorial sobre la instalación y configuración del servicio de alojamiento de código de Gitea en Fedora 34. Si tiene alguna pregunta, publíquela en los comentarios a continuación.