Introducción
Gitea es un repositorio de código fuente basado en el sistema de control de versiones Git. Si bien existen varias soluciones autohospedadas disponibles como GitLab y Gogs, Gitea tiene la ventaja de ser liviano, lo que significa que puede ejecutarse en un servidor relativamente pequeño.
Sin embargo, tener un servidor pequeño, especialmente en el ámbito de los VPS, a menudo significa estar limitado en espacio. Afortunadamente, muchos proveedores de alojamiento también ofrecen almacenamiento adicional en forma de volúmenes externos, almacenamiento de bloques o almacenamiento de archivos en red (NFS). Esto brinda a los usuarios la opción de ahorrar dinero en hosts de VPS más pequeños para sus aplicaciones sin sacrificar el almacenamiento.
Con Gitea y la capacidad de decidir dónde se almacena su código fuente, puede asegurarse de que sus proyectos y archivos tengan espacio para expandirse. En este tutorial, montará un volumen de almacenamiento externo en un punto de montaje y se asegurará de que Gitea esté leyendo la información apropiada desde ese volumen. Al final, tendrá una instalación de Gitea que almacena repositorios y otra información importante en un volumen de almacenamiento separado.
Prerrequisitos
Antes de comenzar, necesitará lo siguiente:
- Un servidor Ubuntu 20.04 configurado según nuestra guía de configuración inicial del servidor para Ubuntu 20.04, con un usuario no root con privilegios sudo y un firewall habilitado.
- Un volumen externo como un volumen de almacenamiento NFS o de bloques. Si desea configurar un Volumen de Almacenamiento de Bloques de DigitalOcean, siga nuestra documentación del producto.
- Una instalación de Gitea en ese servidor accesible a través de un nombre de dominio. Esta guía asume que ha instalado Gitea en Docker, como se describe en nuestro tutorial sobre Cómo Instalar Gitea en Ubuntu 20.04. Tenga en cuenta que esto requerirá que tenga Docker y Docker Compose instalados en su servidor. Puede instalar estas herramientas siguiendo los pasos en estos tutoriales:
- Pasos 1 y 2 de Cómo Instalar y Usar Docker en Ubuntu 20.04
- Paso 1 de Cómo Instalar y Usar Docker Compose en Ubuntu 20.04
Tenga en cuenta que si instaló Gitea utilizando un método diferente al que se describe en estos requisitos previos, los nombres y ubicaciones de ciertos archivos y directorios en su sistema pueden diferir de lo que esta guía menciona en los ejemplos. Sin embargo, los conceptos descritos en este tutorial deberían ser aplicables a cualquier instalación de Gitea.
Paso 1 — Montar un Volumen de Almacenamiento en Bloques
A volume can take many different forms. It could be an NFS volume, which is storage available on the network provided via a file share. Another possibility is that it takes the form of block storage via a service such as DigitalOcean’s Volumes. In both cases, storage is mounted on a system using the mount
command.
Los volúmenes como estos serán visibles como archivos de dispositivo almacenados dentro de /dev
. Estos archivos son cómo el kernel se comunica con los dispositivos de almacenamiento en sí; los archivos no se utilizan realmente para el almacenamiento. Para poder almacenar archivos en el dispositivo de almacenamiento, deberá montar usando el comando mount
.
Primero, deberá crear un punto de montaje — es decir, una carpeta que se asociará con el dispositivo, de modo que los datos almacenados dentro de ella se almacenen en ese dispositivo. Los puntos de montaje para dispositivos de almacenamiento como este generalmente residen en el directorio /mnt
.
Cree un punto de montaje llamado gitea
como lo haría para crear un directorio normal usando el comando mkdir
:
Desde aquí, puedes montar el dispositivo en ese directorio para usarlo y acceder a ese espacio de almacenamiento. Utiliza el comando mount
para montar el dispositivo:
La opción de cadena ext4
especifica el tipo de sistema de archivos, en este caso ext4, aunque dependiendo del tipo de sistema de archivos de tu volumen, podría ser algo como xfs
o nfs
; para verificar qué tipo de sistema de archivos utiliza tu volumen, ejecuta el comando mount
sin opciones:
Esto te proporcionará una línea de salida por cada sistema de archivos montado. Dado que acabas de montar el tuyo, probablemente será el último de la lista:
Output. . .
/dev/sda on /mnt/gitea type ext4 (rw,noatime,discard)
Esto muestra que el tipo de sistema de archivos es ext4
.
Este comando monta el dispositivo especificado por su ID en /mnt/gitea
. La opción -o
especifica las opciones utilizadas al montar. En este caso, estás utilizando las opciones predeterminadas que permiten montar un sistema de archivos de lectura/escritura, y la opción noatime
especifica que el kernel no debe actualizar la última hora de acceso de los archivos y directorios en el dispositivo para ser más eficiente.
Ahora que has montado tu dispositivo, permanecerá montado mientras el sistema esté en funcionamiento. Sin embargo, tan pronto como se reinicie el sistema, ya no estará montado (aunque los datos permanecerán en el volumen), así que necesitarás indicarle al sistema que monte el volumen tan pronto como inicie utilizando el archivo /etc/fstab
(‘tabla de sistemas de archivos’). Este archivo lista los sistemas de archivos disponibles y sus puntos de montaje en un formato delimitado por tabulaciones.
Usando echo
y tee
, agrega una nueva línea al final de /etc/fstab
:
Este comando agrega la cadena /dev/disk/by-uid/tu_id_de_disco
al archivo fstab
y la imprime en tu pantalla. Al igual que el comando mount
anterior, monta el dispositivo en el punto de montaje utilizando las opciones defaults
, nofail
y noatime
. Una vez que se hayan realizado los cambios en /etc/fstab
, el kernel montará tu volumen durante el arranque.
Nota: Los dispositivos de almacenamiento en Linux son muy flexibles y vienen en diferentes tipos, desde un sistema de archivos en red (NFS) hasta un simple disco duro. Para obtener más información sobre almacenamiento de bloques y dispositivos en Linux, puedes leer más sobre conceptos de almacenamiento en nuestra Introducción a la Terminología y Conceptos de Almacenamiento en Linux.
Paso 2 — Configuración de Gitea para Almacenar Datos en un Volumen de Almacenamiento de Bloques
Gitea mantiene todos sus repositorios en una ubicación central. Esto incluye repositorios de todos los usuarios y organizaciones. A menos que se configure de otra manera, toda la información se mantiene en un único directorio. Este directorio se llama data
en las instalaciones predeterminadas. Para los propósitos de este tutorial, estaremos utilizando una versión de Gitea que se ejecuta en Docker como en el tutorial vinculado anteriormente.
Primero, obtengamos una idea de lo que contiene este directorio de datos. Puede hacer esto moviéndose al directorio de datos y ejecutando el comando ls
. Usar el formato -l
nos proporcionará más información sobre los archivos:
Esto proporcionará una lista como la siguiente:
Outputtotal 20
drwxr-xr-x 5 root root 4096 Jun 23 22:34 ./
drwxrwxr-x 3 sammy sammy 4096 Jun 26 22:35 ../
drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
drwxr-xr-x 12 git git 4096 Jun 26 22:35 gitea/
drwx------ 2 root root 4096 Jun 23 22:34 ssh/
Desglosemos la salida de este comando. Enumera un archivo o directorio por línea. En este caso, enumera cinco directorios. La entrada para .
es una entrada especial que simplemente significa el directorio actual, y ..
representa el directorio un nivel arriba. Esta salida muestra que el directorio actual es propiedad del usuario root, que es el caso en esta instancia porque Docker se ejecuta como un usuario privilegiado, y el directorio un nivel arriba es propiedad de sammy.
El directorio git
es importante para nosotros porque contiene todos los repositorios que podríamos querer almacenar en un volumen separado. Enumere el contenido del directorio:
Esto proporcionará la lista larga del directorio:
Outputtotal 24
drwxr-xr-x 5 git git 4096 Jun 23 22:42 ./
drwxr-xr-x 6 root root 4096 Jun 27 14:21 ../
-rw-r--r-- 1 git git 190 Jun 23 22:42 .gitconfig
drwxr-xr-x 2 root root 4096 Jun 23 22:34 .ssh/
drwxr-xr-x 2 git git 4096 Jun 23 22:42 lfs/
drwxr-xr-x 5 git git 4096 Jun 30 20:03 repositories/
Dentro de él hay dos directorios de interés: el directorio repositories
que contiene los repositorios de git administrados por Gitea ordenados por usuario/organización, y el directorio lfs
que contiene datos para la funcionalidad de Almacenamiento de Archivos Grandes de Git. El directorio gitea
contiene información que Gitea utiliza en segundo plano, incluidos archivos de repositorios antiguos, así como la base de datos que contiene información como usuarios e información de repositorio utilizada por el servicio web. El directorio ssh
contiene varios pares de claves SSH que utiliza Gitea.
Dado que toda la información almacenada en este directorio es importante, querrás incluir el contenido completo del directorio en nuestro volumen adjunto.
Hay dos caminos a seguir a partir de este punto, dependiendo de si estás trabajando con una nueva instalación de Gitea y completando este tutorial durante el proceso de instalación. En el primer camino, podrás especificar ubicaciones antes de finalizar la instalación, y en el segundo, aprenderás cómo mover una instalación existente.
Configuración de una Nueva Instalación de Gitea
Si estás comenzando con una instalación completamente nueva de Gitea, puedes especificar dónde se almacena toda tu información durante el proceso de configuración. Por ejemplo, si estás configurando Gitea usando Docker Compose, puedes asignar los volúmenes a tu volumen adjunto.
Abre el archivo docker-compose.yml
con tu editor de texto preferido. El siguiente ejemplo utiliza nano
:
Una vez que tengas el archivo abierto, busca la entrada de volumes
en el archivo de composición y modifica el mapeo en el lado izquierdo de los dos puntos (:
) para que apunte a ubicaciones apropiadas en tu volumen de almacenamiento de bloques para el directorio de datos de Gitea
Cuando hayas terminado de configurar la información, guarda y cierra el archivo. Si estás usando nano
, puedes hacer esto presionando CTRL + X
, Y
y luego ENTER
.
Advertencia: Los servidores SSH buscan el directorio .ssh
en el directorio principal del usuario Git (git, en este caso). Este directorio contiene todas las claves SSH que utilizará Gitea, por lo que no se recomienda mover el montaje para este volumen de Docker. Para tener esta ubicación respaldada en su volumen, sería mejor utilizar otra solución como un trabajo de cron
para hacer una copia de seguridad del directorio. Para obtener más información, consulta este tutorial sobre cómo usar cron
para administrar tareas programadas.
Cuando ejecutas docker-compose
e instala Gitea, utilizará tu volumen de almacenamiento en bloque para almacenar sus datos.
Si no estás utilizando volúmenes de Docker para gestionar las ubicaciones de tus datos, por ejemplo, si estás instalando Gitea en tu servidor a través de las versiones binarias según estas instrucciones de Gitea, entonces deberás modificar las ubicaciones dentro del archivo de configuración (generalmente /etc/gitea/app.ini
) cuando establezcas todos los valores y antes de realizar los pasos finales de instalación en el navegador. Por ejemplo, podrías establecerlos de la siguiente manera:
Nota: Asegúrese de que su usuario de git tenga acceso de escritura a esta ubicación. Puede leer sobre los permisos de Linux aquí.
Moviendo una Instalación Existente de Gitea
Si ya tiene una instancia de Gitea instalada y en funcionamiento, aún podrá almacenar sus datos en un volumen separado, pero requerirá cierto cuidado para asegurarse de que todos sus datos sigan estando tanto seguros como accesibles para Gitea.
Nota: Como con cualquier operación que implique sus datos, es importante asegurarse de tener una copia de seguridad actualizada de todo. En este caso, esto significa una copia de seguridad de todos los archivos en su directorio de datos (los archivos SSH, los directorios gitea-repositories
y lfs
, la base de datos, y así sucesivamente) en una ubicación segura.
Hay dos opciones para mover tus datos a un nuevo volumen. La primera forma es copiar tus datos de Gitea a una ubicación secundaria, luego convertir la ubicación original en un punto de montaje para tu volumen. Cuando copies tus datos de vuelta a esa ubicación, los estarás copiando en ese volumen, y no se requerirán cambios dentro de Gitea en sí; simplemente continuará como lo hacía antes. Sin embargo, si no deseas montar todo el dispositivo en esa ubicación (por ejemplo, si tus datos de Gitea no serán lo único en ese volumen), entonces una segunda opción es mover todos tus datos de Gitea a una nueva ubicación en ese volumen e indicarle a Gitea que use esa ubicación.
No importa qué opción elijas, primero detén el servicio web de Gitea.
Si instalaste Gitea a través de Docker Compose, usa docker-compose
para detener el servicio. Mientras estés dentro del mismo directorio que contiene el archivo docker-compose.yml
, ejecuta:
Si lo has instalado como un servicio de systemd, usa el comando systemctl
:
Una vez que Gitea se haya detenido, mueve todo el contenido del directorio de datos al punto de montaje creado en el Paso 1:
Asegúrate de que todos los archivos se hayan movido listando el contenido del directorio actual:
Esto solo devolverá las entradas del directorio actual y el directorio principal:
total 8
drwxrwxr-x 2 sammy sammy 4096 Jun 27 13:56 ./
drwxr-xr-x 7 sammy sammy 4096 Jun 27 13:56 ../
Una vez que todos los datos se hayan movido, cambia al nuevo directorio de datos:
Usando ls
, asegúrate de que todo se vea correcto:
Esto mostrará el contenido del directorio:
Outputtotal 36
drwxr-xr-x 6 root root 4096 Jun 27 14:21 ./
drwxr-xr-x 3 root root 4096 Jun 27 14:21 ../
drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
drwxr-xr-x 13 git git 4096 Jul 11 08:25 gitea/
drwx------ 2 root root 16384 Jun 27 03:46 lost+found/
drwx------ 2 root root 4096 Jun 23 22:34 ssh/
Como antes, debería contener los directorios ssh
, git
y gitea
. Si estás utilizando SQLite como base de datos para administrar Gitea, también contendrá un archivo llamado gitea.db
en el directorio gitea
.
Cuando estés seguro de que todos los datos se han movido, es hora de montar el volumen en el directorio de datos.
Primero, muévete al directorio padre del directorio de datos en el que estabas previamente. En este ejemplo, utilizando una instalación de Gitea con Docker Compose como se describe en el tutorial vinculado en los requisitos previos, este es el directorio que contiene tu archivo docker-compose.yml
.
Como antes, usa el comando mount
, pero esta vez, usa el directorio que acabas de vaciar como destino:
Ahora, al listar el contenido de ese directorio, todos tus archivos deberían estar en su lugar:
Este comando mostrará la información esperada. Ten en cuenta que, dependiendo del tipo de sistema de archivos de tu volumen, es posible que encuentres un directorio adicional llamado lost+found
; esto es normal y parte del uso cotidiano del sistema de archivos:
total 36
drwxr-xr-x 6 root root 4096 Jun 27 13:58 ./
drwxrwxr-x 3 sammy sammy 4096 Jun 27 02:23 ../
drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
drwxr-xr-x 12 git git 4096 Jun 27 00:00 gitea/
drwx------ 2 root root 16384 Jun 27 03:46 lost+found/
drwx------ 2 root root 4096 Jun 23 22:34 ssh/
Como se mencionó, si deseas que Gitea utilice un directorio dentro del volumen de almacenamiento en bloque, hay un paso adicional que debes completar antes de volver a levantar Gitea. Por ejemplo, digamos que quieres usar una carpeta llamada scm
en tu volumen montado en /mnt/gitea
. Después de mover todos tus datos de Gitea a /mnt/gitea/scm
, necesitarás crear un enlace simbólico desde tu antiguo directorio de datos al nuevo. Para esto, utilizarás el comando ln
:
En este punto, puedes reiniciar Gitea. Si estás utilizando Gitea como un servicio systemd, ejecuta:
Si estás ejecutando Gitea como un contenedor Docker usando Docker Compose, ejecuta:
Ahora que todo está funcionando, visita tu instancia de Gitea en el navegador y asegúrate de que todo funcione como se espera. Deberías poder crear nuevos objetos en Gitea como repositorios, problemas, y más. Si configuraste Gitea con un complemento SSH, también deberías poder clonar y enviar cambios a repositorios usando git clone
y git push
.
Conclusión
En este tutorial, trasladaste todos tus datos de Gitea a un volumen de almacenamiento de bloques. Los volúmenes como estos son muy flexibles y proporcionan muchos beneficios, como permitirte almacenar todos tus datos en discos más grandes, volúmenes RAID, sistemas de archivos en red, o usar almacenamiento de bloques como DigitalOcean Volumes para reducir gastos de almacenamiento. También te permite tomar instantáneas de discos enteros para realizar copias de seguridad, de modo que puedas restaurar su contenido en caso de un fallo catastrófico.