bolt Valebyte VPS desde $4/mes — NVMe, despliegue en 60s.

Obtener VPS arrow_forward
eco Principiante Tutorial/Cómo hacer

Instalación de Gitea en

calendar_month Jul 21, 2026 schedule 23 min de lectura visibility 31 vistas
info

¿Necesitas un servidor para esta guía? Ofrecemos servidores dedicados y VPS en más de 50 países con configuración instantánea.

¿Necesitas un VPS para esta guía?

Explore otras opciones de servidores dedicados en

Instalación de Gitea en un VPS: Servidor Git ligero autoalojado con Docker y SSL

TL;DR

En esta guía, configuraremos Gitea — un servidor Git autoalojado ligero y potente — en su VPS, utilizando Docker y la obtención automática de certificados SSL a través de Caddy. Obtendrá una plataforma completamente funcional para la gestión de repositorios, accesible a través de un nombre de dominio con HTTPS, lista para el desarrollo en equipo o proyectos personales.

  • Configuraremos un VPS moderno basado en Ubuntu 24.04 LTS con protección básica.
  • Instalaremos Docker y Docker Compose para una gestión cómoda de las aplicaciones.
  • Desplegaremos Gitea en un contenedor Docker, utilizando volúmenes persistentes para los datos.
  • Configuraremos Caddy como proxy inverso para Gitea, asegurando automáticamente HTTPS con Let's Encrypt.
  • Prepararemos un sistema de copia de seguridad para proteger sus datos.
  • Obtendremos control sobre nuestra propia infraestructura Git, completamente independiente de servicios de terceros.

Qué configuramos y por qué

En el mundo moderno del desarrollo, Git se ha convertido en el estándar de facto para el control de versiones de código. Sin embargo, depender de servicios de terceros como GitHub, GitLab.com o Bitbucket no siempre es óptimo. Muchas equipos y desarrolladores individuales necesitan su propio servidor Git, completamente controlado. Gitea resuelve precisamente esta tarea.

Gitea es un servicio Git ligero, de código abierto y autoalojado (self-hosted), escrito en Go. Ofrece una funcionalidad completa, similar a GitHub o GitLab, pero consume significativamente menos recursos, lo que lo convierte en una opción ideal para desplegar en un VPS o incluso en un mini-ordenador como Raspberry Pi. Obtendrá una interfaz web intuitiva para gestionar repositorios, usuarios, equipos, solicitudes de fusión (pull requests), seguimiento de tareas (issues) y mucho más.

Qué obtendrá el lector al final

Después de seguir esta guía, tendrá un servidor Git Gitea completamente configurado y en funcionamiento, accesible a través de su nombre de dominio con una conexión HTTPS segura. Podrá crear repositorios públicos y privados, invitar a colegas a colaborar, gestionar el acceso y utilizar todas las operaciones Git habituales a través de la interfaz web o la línea de comandos. Su infraestructura estará completamente bajo su control, garantizando confidencialidad e independencia.

Qué alternativas existen y por qué autoalojado en un VPS

Existen varios enfoques principales para el alojamiento de repositorios Git:

  • Servicios gestionados en la nube (GitHub, GitLab.com, Bitbucket): Esta es la opción más sencilla en términos de mantenimiento. Simplemente se registra y empieza a trabajar. Sin embargo, depende de la política y la infraestructura del proveedor, puede encontrarse con limitaciones en los planes gratuitos, así como con cuestiones de privacidad de los datos almacenados en servidores de terceros.
  • GitLab Community Edition (CE) autoalojado: GitLab CE es una solución potente que ofrece no solo alojamiento Git, sino también un ciclo DevOps completo: CI/CD, registro de contenedores, monitorización y mucho más. Sin embargo, GitLab CE requiere significativamente más recursos (mínimo 4 GB de RAM para un funcionamiento cómodo), lo que lo hace menos adecuado para VPS pequeños y equipos.
  • Gitea autoalojado: Gitea ocupa un nicho entre los servicios en la nube sencillos y el GitLab que consume muchos recursos. Ofrece una rica funcionalidad de alojamiento Git con un consumo mínimo de recursos. Es la opción ideal si necesita un servidor Git completo sin funciones adicionales y sin grandes costes de infraestructura. El despliegue en un VPS le da control total sobre los datos, la posibilidad de personalización e integración con su propio ecosistema. Además, Docker simplifica significativamente el despliegue y la gestión de Gitea, aislándolo del sistema principal y haciéndolo portable.

Elegir Gitea en un VPS permite combinar las ventajas del autoalojamiento (control, privacidad) con el uso eficiente de los recursos y la simplicidad de despliegue gracias a Docker.

Qué configuración de VPS se necesita para esta tarea

Para instalar Gitea en un VPS con Docker y Caddy, generalmente no se requieren recursos extremadamente potentes. Gitea está optimizado para funcionar en hardware modesto, pero la presencia de Docker y Caddy añade una pequeña sobrecarga. Es importante considerar cuántos usuarios trabajarán activamente con Gitea y cuántos repositorios se planea alojar.

Requisitos mínimos

  • CPU: 1 vCore (por ejemplo, Intel Xeon E3/E5 o AMD EPYC). Para equipos pequeños de hasta 5-10 personas, esto será suficiente.
  • RAM: 2 GB. Esto será suficiente para el sistema operativo, el demonio Docker, los contenedores de Gitea y Caddy. Si se planea un uso muy activo u otros servicios en el mismo VPS, es mejor considerar 4 GB.
  • Disco: 40-60 GB SSD. El SSD es crítico para el rendimiento de las operaciones Git. 40 GB serán suficientes para el SO, las imágenes Docker y varias decenas de repositorios. Si los repositorios son muy grandes o hay muchos, considere 80-100 GB.
  • Red: 100 Mbit/s. Para la mayoría de los escenarios, esto es más que suficiente. Más importante es la estabilidad del canal y la baja latencia.

Plan de VPS específico para la tarea (válido para 2026)

Para un funcionamiento cómodo de Gitea con Docker y Caddy para un equipo de hasta 10-20 desarrolladores y decenas de repositorios, se recomienda la siguiente configuración de VPS:

  • CPU: 2 vCore (por ejemplo, Intel Xeon E5-2690v4 o AMD EPYC 7002 series).
  • RAM: 4 GB DDR4.
  • Disco: 80 GB NVMe SSD. NVMe garantizará la máxima velocidad de las operaciones de disco, lo cual es importante para Git.
  • Red: Puerto de 1 Gbit/s con tráfico ilimitado o gran volumen.

Esta configuración de VPS garantizará un excelente rendimiento y una reserva para el futuro. Por ejemplo, puede obtener un VPS con las características indicadas.

Cuándo se necesita un dedicado y no un VPS

Un servidor dedicado debe considerarse si:

  • Equipo muy grande: Más de 50-100 usuarios activos.
  • Repositorios extremadamente grandes: Repositorios con gigabytes de archivos binarios (LFS).
  • Requisitos críticos de rendimiento: Alta carga en operaciones Git en modo 24/7.
  • Requisitos estrictos de seguridad/aislamiento: Aislamiento completo de los "vecinos" del hipervisor.
  • Se planean muchos otros servicios: Además de Gitea, en el servidor funcionarán agentes CI/CD, bases de datos, servidores web para otros proyectos, etc.

Para la mayoría de las tareas de Gitea, especialmente para startups, equipos pequeños y proyectos personales, un VPS será una solución óptima y económicamente ventajosa.

Ubicación: en qué influye

La elección de la ubicación del VPS es importante para:

  • Latencia: Cuanto más cerca esté el servidor de su equipo y usuarios principales, menor será la latencia al realizar operaciones Git y trabajar con la interfaz web. Esto es especialmente crítico para los desarrolladores que se encuentran lejos del servidor.
  • Cumplimiento legal: En algunos casos, especialmente para empresas, puede haber requisitos para el almacenamiento de datos en una jurisdicción específica.
  • Disponibilidad: Elija una ubicación con una infraestructura de red fiable y buenos canales de comunicación.

Lo ideal es elegir un centro de datos ubicado geográficamente cerca de la mayoría de sus usuarios.

Preparación del servidor

Antes de proceder con la instalación de Gitea, es necesario realizar una configuración básica de su VPS. Utilizaremos Ubuntu Server 24.04 LTS, ya que es una versión actual y estable del sistema operativo para el año 2026.

Configuración mínima después del aprovisionamiento

Después de obtener acceso a su VPS (normalmente a través de SSH como usuario root), lo primero es actualizar el sistema y crear un nuevo usuario con permisos sudo.


# Actualización de la lista de paquetes y su actualización a las últimas versiones
sudo apt update && sudo apt upgrade -y

# Creación de un nuevo usuario (reemplace 'ваш_пользователь' por el nombre deseado)
sudo adduser ваш_пользователь

# Adición del usuario al grupo sudo para obtener permisos administrativos
sudo usermod -aG sudo ваш_пользователь

Salga de la sesión root y entre con el nuevo usuario:


exit
# Luego, inicie sesión de nuevo con su_usuario
ssh ваш_пользователь@ваш_ip_сервера

Configuración de claves SSH (recomendado)

Para mejorar la seguridad, se recomienda utilizar claves SSH en lugar de contraseñas. Genere una clave en su máquina local (si aún no tiene una):


# En su máquina local
ssh-keygen -t ed25519 -C "ваш[email protected]"

Copie la clave pública al servidor:


# En su máquina local
ssh-copy-id ваш_пользователь@ваш_ip_сервера

Después de esto, desactive el inicio de sesión con contraseña para SSH (archivo /etc/ssh/sshd_config):


# En el servidor
sudo nano /etc/ssh/sshd_config

Encuentre y modifique las siguientes líneas:


# /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
PermitRootLogin no

Reinicie el servidor SSH:


sudo systemctl restart sshd

Instalación de Fail2Ban

Fail2Ban protege su servidor de ataques de fuerza bruta, bloqueando las direcciones IP desde las que se producen numerosos intentos fallidos de inicio de sesión.


# Instalación de Fail2Ban
sudo apt install fail2ban -y

# Copia de la configuración estándar para su ajuste
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# Apertura del archivo para edición (opcional, para una configuración más fina)
sudo nano /etc/fail2ban/jail.local

Normalmente, la configuración predeterminada es suficiente, pero puede cambiar bantime, findtime y maxretry. Asegúrese de que la sección [sshd] esté habilitada.


# Ejemplo del contenido de jail.local (asegúrese de que enabled = true)
[DEFAULT]
bantime  = 1d
findtime = 10m
maxretry = 5

[sshd]
enabled = true
mode   = aggressive
port     = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

# Reinicio de Fail2Ban para aplicar los cambios
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Configuración del Firewall (UFW)

Uncomplicated Firewall (UFW) es una interfaz fácil de usar para iptables. Lo configuraremos para permitir solo los puertos necesarios.


# Instalación de UFW
sudo apt install ufw -y

# Permitir SSH (puerto 22 por defecto)
sudo ufw allow ssh

# Permitir HTTP (puerto 80) y HTTPS (puerto 443) para el servidor web (Caddy)
sudo ufw allow http
sudo ufw allow https

# Habilitar UFW
sudo ufw enable

Confirme la habilitación pulsando y. Puede verificar el estado del firewall con el comando sudo ufw status verbose.

Ahora su servidor está listo para la instalación de Docker y Gitea.

Instalación de software — paso a paso

Utilizaremos Docker y Docker Compose para desplegar Gitea. Esto garantiza el aislamiento de la aplicación, simplifica la gestión de dependencias y facilita las actualizaciones.

1. Instalación de Docker Engine

Para instalar Docker Engine en Ubuntu 24.04 LTS (Noble Numbat), siga las recomendaciones oficiales, válidas para el año 2026.


# Удаление старых версий Docker, если они есть
for pkg in docker.io docker-doc docker-compose docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; do sudo apt remove $pkg; done

# Обновление списка пакетов
sudo apt update

# Установка необходимых пакетов для работы с репозиториями
sudo apt install ca-certificates curl gnupg -y

# Добавление официального GPG-ключа Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Добавление репозитория Docker в APT-источники
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Обновление списка пакетов после добавления репозитория Docker
sudo apt update

# Установка Docker Engine, Docker CLI, containerd и Docker Compose плагина
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

Verificación de la instalación de Docker:


# Проверка версии Docker
docker --version

# Проверка статуса Docker-сервиса
sudo systemctl status docker

# Запуск тестового контейнера 'hello-world'
sudo docker run hello-world

Añada su usuario al grupo docker para no tener que usar sudo en cada comando de Docker:


# Добавление пользователя в группу docker
sudo usermod -aG docker ваш_пользователь

# Примените изменения группы (выйдите и войдите заново или перезагрузите систему)
newgrp docker

2. Creación de la estructura de directorios para Gitea

Crearemos directorios para almacenar los datos de Gitea y la configuración de Docker Compose. Esto garantizará la persistencia de los datos y una estructura limpia.


# Создание корневой директории для проекта Gitea
mkdir -p ~/gitea

# Переход в созданную директорию
cd ~/gitea

# Создание директории для хранения постоянных данных Gitea
mkdir -p ./data

3. Creación del archivo docker-compose.yml para Gitea y Caddy

Este archivo definirá los servicios de Gitea y Caddy, sus dependencias, volúmenes y configuraciones de red. Utilizaremos SQLite como base de datos por simplicidad, lo cual es ideal para instalaciones pequeñas. Para proyectos más grandes, considere PostgreSQL o MySQL.

Cree el archivo docker-compose.yml en el directorio ~/gitea:


# Создание файла docker-compose.yml
nano docker-compose.yml

Pegue el siguiente contenido, reemplazando your.domain.com con su dominio real:


# docker-compose.yml
version: "3.8"

services:
  gitea:
    image: gitea/gitea:1.22.0 # Актуальная версия на 2026 год, проверьте https://dl.gitea.io/gitea/
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__DATABASE__DB_TYPE=sqlite3 # Используем SQLite для простоты
      - GITEA__DATABASE__PATH=/data/gitea.db # Путь к файлу базы данных SQLite
      - GITEA__SERVER__DOMAIN=your.domain.com # Ваш домен
      - GITEA__SERVER__SSH_DOMAIN=your.domain.com # Домен для SSH-доступа
      - GITEA__SERVER__HTTP_PORT=3000 # Внутренний порт Gitea
      - GITEA__SERVER__APP_DATA_PATH=/data # Путь для данных Gitea внутри контейнера
      - GITEA__SERVER__ROOT_URL=https://your.domain.com/ # Базовый URL для Gitea
      - GITEA__SECURITY__INSTALL_LOCK=true # Блокировка страницы установки после первой настройки
      - GITEA__SERVICE__DISABLE_REGISTRATION=false # Разрешить регистрацию новых пользователей (true для приватного сервера)
      - GITEA__SERVICE__REQUIRE_SIGNIN_VIEW=false # Требовать вход для просмотра репозиториев (true для приватного сервера)
      - GITEA__SESSION__PROVIDER=db # Используем базу данных для сессий
      - GITEA__CACHE__ADAPTER=redis # Рекомендуется для производительности
      - GITEA__CACHE__HOST=redis:6379 # Хост Redis
      - GITEA__QUEUE__TYPE=redis # Очередь задач через Redis
      - GITEA__QUEUE__CONN_STR=redis://redis:6379/0 # Строка подключения к Redis
    restart: always
    volumes:
      - ./data:/data # Маппинг локальной директории данных к контейнеру
      - /etc/timezone:/etc/timezone:ro # Синхронизация часового пояса
      - /etc/localtime:/etc/localtime:ro # Синхронизация локального времени
    ports:
      - "3000:3000" # Внутренний HTTP-порт Gitea (для Caddy)
      - "2222:22" # SSH-порт Gitea (маппим на 2222, чтобы не конфликтовать с хостом)
    networks:
      - gitea-network

  caddy:
    image: caddy:2.7.5 # Актуальная версия Caddy на 2026 год
    container_name: caddy
    restart: always
    ports:
      - "80:80" # HTTP для Let's Encrypt challenge и перенаправления
      - "443:443" # HTTPS
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile # Файл конфигурации Caddy
      - ./caddy_data:/data # Хранилище Caddy для сертификатов и состояния
    environment:
      - GITEA_DOMAIN=your.domain.com # Передача домена в Caddyfile через переменную
    networks:
      - gitea-network
    depends_on:
      - gitea # Caddy зависит от Gitea

  redis:
    image: redis:7.2-alpine # Легковесная версия Redis
    container_name: redis
    restart: always
    volumes:
      - ./redis_data:/data # Хранилище данных Redis
    networks:
      - gitea-network
    command: redis-server --appendonly yes # Включение персистентности данных

networks:
  gitea-network:
    driver: bridge

Importante: Reemplace your.domain.com con su dominio real. Asegúrese de que para su dominio (por ejemplo, gitea.example.com) se haya creado un registro A que apunte a la dirección IP de su VPS.

Nota sobre las versiones: Las versiones gitea/gitea:1.22.0, caddy:2.7.5 y redis:7.2-alpine se indican como actuales para el año 2026. Siempre verifique los repositorios oficiales de Docker Hub para obtener las versiones más recientes y estables.

4. Creación del archivo Caddyfile para Caddy

Caddy gestiona automáticamente los certificados SSL a través de Let's Encrypt. Cree el archivo Caddyfile en el mismo directorio ~/gitea:


# Создание файла Caddyfile
nano Caddyfile

Pegue el siguiente contenido:


# Caddyfile
{env.GITEA_DOMAIN} {
    # Автоматическое HTTPS
    tls {
        # Используем Let's Encrypt
        acme_challenge http
    }

    # Обратный прокси для Gitea
    reverse_proxy gitea:3000 {
        # Проксируем заголовки, необходимые Gitea
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-Proto {scheme}
        header_up X-Forwarded-For {remote_ip}
    }

    # Настройки для больших файлов (Git LFS)
    # Gitea сам обрабатывает LFS, но Caddy должен пропускать большие запросы
    # Если у вас будут очень большие LFS файлы, может потребоваться увеличение body_size
    # (по умолчанию Caddy обрабатывает до 10MB)
    # Для Gitea это обычно не требуется, так как он сам принимает данные
}

La variable {env.GITEA_DOMAIN} se reemplazará automáticamente con el valor de docker-compose.yml.

5. Inicio de Gitea y Caddy con Docker Compose

Una vez creados ambos archivos, está listo para iniciar Gitea.


# Переход в директорию с файлами
cd ~/gitea

# Запуск всех сервисов в фоновом режиме
docker compose up -d

Este comando descargará las imágenes Docker necesarias (Gitea, Caddy, Redis), creará los contenedores y los iniciará. El primer inicio puede tardar un tiempo mientras se descargan las imágenes.

Puede verificar el estado de los contenedores en ejecución con el comando:


# Проверка статуса контейнеров
docker compose ps

Debería ver que todos los contenedores (gitea, caddy, redis) están en estado running.

En este punto, la instalación de los componentes principales ha finalizado. Ahora pasemos a la configuración final.

Configuración

Después de iniciar correctamente los contenedores de Gitea y Caddy, deberá realizar la configuración inicial de Gitea a través de la interfaz web y asegurarse de que todos los parámetros cumplen con sus requisitos.

1. Configuración inicial de Gitea a través de la interfaz web

Abra su dominio (por ejemplo, https://your.domain.com) en un navegador web. Debería ver la página de configuración inicial de Gitea.

En esta página, verifique y, si es necesario, modifique los siguientes parámetros:

  • Configuración de la base de datos:
    • Tipo de base de datos: SQLite3 (debería estar seleccionado por defecto).
    • Ruta al archivo de la base de datos: /data/gitea.db (debería estar configurado a partir de las variables de entorno).
  • Configuración de los parámetros generales de la aplicación:
    • Dominio: your.domain.com (configurado a partir de las variables de entorno).
    • URL base: https://your.domain.com/ (configurado a partir de las variables de entorno).
    • Ruta al directorio raíz de Gitea: /data (configurado a partir de las variables de entorno).
    • Puerto para el servidor SSH: 2222 (configurado a partir de las variables de entorno).
    • Ruta a los logs de Gitea: /data/log.
  • Configuración del administrador:

    Cree el primer usuario administrativo. Introduzca un nombre de usuario, contraseña y dirección de correo electrónico. Esta será la cuenta principal para gestionar Gitea.

  • Configuración del servidor de correo (SMTP): Si desea que Gitea envíe notificaciones (por ejemplo, de registro, restablecimiento de contraseña, menciones), configure un servidor SMTP.
    
    # Ejemplo de configuración SMTP para Gitea (en la interfaz web)
    [mailer]
    ENABLED = true
    HOST = smtp.yourprovider.com:587
    FROM = [email protected]
    USER = [email protected]
    PASSWD = ваш_пароль_smtp
    PROTOCOL = smtps # o smtp+tls
    

Después de verificar todos los parámetros, haga clic en el botón "Instalar Gitea". Si todo ha ido bien, será redirigido a la página de inicio de sesión.

2. Archivo de configuración app.ini

La mayoría de las configuraciones de Gitea se pueden cambiar a través de la interfaz web del administrador, pero algunos parámetros se almacenan en el archivo app.ini dentro del contenedor. Este archivo se encuentra en la ruta /data/gitea/conf/app.ini. Dado que hemos montado ./data en /data, puede acceder a él desde el host:


# Acceso a app.ini en el host
nano ~/gitea/data/gitea/conf/app.ini

Después de la instalación inicial, Gitea rellenará automáticamente este archivo. Aquí hay algunas secciones importantes que quizás desee verificar o modificar:


# app.ini (ejemplo de secciones importantes)
[server]
DOMAIN = your.domain.com
SSH_DOMAIN = your.domain.com
HTTP_PORT = 3000
ROOT_URL = https://your.domain.com/
DISABLE_SSH = false
SSH_PORT = 2222 # Puerto interno de Gitea para SSH
LFS_START_SERVER = true
LFS_HTTP_HOST = https://your.domain.com/ # URL para Git LFS

[database]
DB_TYPE = sqlite3
PATH = /data/gitea.db

[repository]
ROOT = /data/git/repositories # Ruta para almacenar repositorios
DEFAULT_BRANCH = main # Rama por defecto para nuevos repositorios

[service]
REGISTER_EMAIL_ACTIVE = false # ¿Se requiere activación por email al registrarse?
DISABLE_REGISTRATION = false # ¿Permitir el registro? (true para servidor privado)
REQUIRE_SIGNIN_VIEW = false # ¿Requerir inicio de sesión para ver repositorios? (true para servidor privado)
NO_REPLY_ADDRESS = [email protected] # Dirección para commits "no-reply"

[session]
PROVIDER = db

[cache]
ADAPTER = redis
HOST = redis:6379

[queue]
TYPE = redis
CONN_STR = redis://redis:6379/0

[security]
INSTALL_LOCK = true # Importante: después de la instalación debe ser true
SECRET_KEY = ваш_сгенерированный_ключ # Se genera automáticamente

Si realiza cambios en app.ini manualmente, no olvide reiniciar el contenedor de Gitea:


# Reiniciar el contenedor de Gitea
docker compose restart gitea

3. TLS/HTTPS a través de Caddy

Caddy ha obtenido y configurado automáticamente los certificados SSL para su dominio. Esto se confirma por el hecho de que pudo acceder a Gitea a través de HTTPS. Caddy renovará automáticamente los certificados antes de su fecha de caducidad.

Puede verificar el estado de los certificados de Caddy:


# Ver logs de Caddy para verificar el estado de los certificados
docker compose logs caddy | grep -i "certificate"

Debería ver entradas sobre la obtención y/o renovación de certificados de Let's Encrypt.

4. Verificación de funcionamiento

Asegúrese de que Gitea es completamente funcional:

  • Acceso por HTTPS: Abra https://your.domain.com en el navegador. Asegúrese de que la conexión es segura (candado verde).
  • Inicio de sesión y creación de repositorio: Inicie sesión con el administrador creado, cree un nuevo repositorio.
  • Clonación por HTTPS: Intente clonar un repositorio a través de HTTPS desde su máquina local:
    
    git clone https://your.domain.com/ваш_пользователь/ваш_репозиторий.git
    

    Se le pedirá que introduzca el nombre de usuario y la contraseña de Gitea.

  • Acceso SSH: Gitea utiliza el puerto 2222 para SSH. Para configurar el acceso SSH, debe añadir la clave pública SSH de su usuario de Gitea a través de la interfaz web (Configuración del perfil -> Claves SSH/GPG). Luego puede clonar el repositorio por SSH:
    
    git clone ssh://[email protected]:2222/ваш_пользователь/ваш_репозиторий.git
    

    Importante: Asegúrese de que el puerto 2222 está abierto en su cortafuegos en el VPS. Si usa UFW:

    
    sudo ufw allow 2222/tcp
    sudo ufw reload
    
  • Healthcheck: Verifique el estado de los contenedores:
    
    docker compose ps
    

    Todo debería estar running y healthy.

¡Felicidades! Su servidor Gitea está completamente configurado y listo para funcionar.

Copias de seguridad y mantenimiento

Tener un servidor Git en funcionamiento es solo la mitad del trabajo. Es crucial tener una estrategia de copia de seguridad fiable y un plan de mantenimiento para garantizar la estabilidad y seguridad a largo plazo de sus datos.

Qué respaldar

Para Gitea, es necesario respaldar tres componentes principales:

  1. Base de datos de Gitea: En nuestro caso, es el archivo gitea.db. Contiene toda la información sobre usuarios, repositorios, issues, pull requests, comentarios, etc.
  2. Archivos de repositorios Git: Los propios repositorios Git, incluyendo los objetos LFS. Se almacenan en /data/git/repositories.
  3. Archivo de configuración app.ini: Contiene todas las configuraciones de Gitea. Se encuentra en /data/gitea/conf/app.ini.
  4. Claves SSH de Gitea: Si Gitea genera sus propias claves SSH para operaciones internas o para acceso SSH, también se encuentran en /data/gitea/.ssh.
  5. Datos de Caddy: Los certificados Let's Encrypt y otras configuraciones de Caddy se almacenan en ./caddy_data. Aunque se pueden restaurar automáticamente, su copia de seguridad acelerará la recuperación.

Todos estos datos se encuentran en los directorios ~/gitea/data y ~/gitea/caddy_data en su host.

Script simple de copia de seguridad automática

Crearemos un script simple que creará un archivo con los datos necesarios. Para SQLite, basta con copiar el archivo de la base de datos, pero Gitea también proporciona la utilidad gitea dump, que crea un volcado completo de todos los datos en un solo archivo.

Cree el archivo backup_gitea.sh en el directorio de inicio:


# Creación del script de copia de seguridad
nano ~/backup_gitea.sh

Pegue el siguiente contenido:


#!/bin/bash

# Configuración
BACKUP_DIR="/var/backups/gitea"
GITEA_DIR="/home/ваш_пользователь/gitea" # Ruta al directorio con docker-compose.yml
DATE=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/gitea_backup_${DATE}.zip"

# Creación del directorio para copias de seguridad, si no existe
mkdir -p ${BACKUP_DIR}

echo "--- Iniciando copia de seguridad de Gitea (${DATE}) ---"

# 1. Volcado de Gitea usando la utilidad incorporada (dentro del contenedor)
# Esto creará un archivo zip en /tmp dentro del contenedor de Gitea
echo "Creando volcado de Gitea..."
docker exec gitea gitea dump -c /data/gitea/conf/app.ini

# 2. Copia del volcado creado del contenedor al host
echo "Copiando volcado al host..."
DUMP_CONTAINER_PATH=$(docker exec gitea find /tmp -name "gitea-dump-.zip" -print -quit)
if [ -z "$DUMP_CONTAINER_PATH" ]; then
    echo "Error: Volcado de Gitea no encontrado en el contenedor."
    exit 1
fi
docker cp gitea:${DUMP_CONTAINER_PATH} ${BACKUP_FILE}

# 3. Eliminación del volcado del contenedor
echo "Eliminando volcado temporal del contenedor..."
docker exec gitea rm ${DUMP_CONTAINER_PATH}

# 4. Copia de los datos de Caddy (certificados)
echo "Copiando datos de Caddy..."
tar -czf ${BACKUP_DIR}/caddy_data_backup_${DATE}.tar.gz -C ${GITEA_DIR}/caddy_data .

echo "Copia de seguridad completada: ${BACKUP_FILE} y ${BACKUP_DIR}/caddy_data_backup_${DATE}.tar.gz"

# Limpieza de copias de seguridad antiguas (por ejemplo, mantener los últimos 7 días)
echo "Limpiando copias de seguridad antiguas..."
find ${BACKUP_DIR} -type f -name "gitea_backup_.zip" -mtime +7 -delete
find ${BACKUP_DIR} -type f -name "caddy_data_backup_.tar.gz" -mtime +7 -delete

echo "--- Copia de seguridad de Gitea completada ---"

Haga que el script sea ejecutable:


chmod +x ~/backup_gitea.sh

Ahora puede añadir este script a cron para su ejecución diaria o semanal:


# Abrir crontab para editar
crontab -e

Añada la siguiente línea para una copia de seguridad diaria a las 03:00 de la madrugada:


# Copia de seguridad diaria de Gitea a las 03:00
0 3    /home/ваш_пользователь/backup_gitea.sh >> /var/log/gitea_backup.log 2>&1

Dónde almacenar las copias de seguridad

Almacenar las copias de seguridad en el mismo servidor que el servicio principal es extremadamente arriesgado. Si el VPS falla o se ve comprometido, perderá tanto los datos como las copias de seguridad. Se recomienda utilizar almacenamiento externo:

  • Almacenamiento compatible con S3: Almacenamientos en la nube como Amazon S3, DigitalOcean Spaces, Backblaze B2. Esta es una opción económica y fiable. Puede utilizar utilidades como s3cmd, rclone o restic para la sincronización automática de copias de seguridad.
  • VPS separado: Un VPS pequeño y económico, ubicado en otro centro de datos, puede servir como almacenamiento para copias de seguridad, donde copiará los archivos por SCP/RSYNC.
  • Almacenamiento local: Para proyectos muy pequeños, puede almacenar temporalmente las copias de seguridad localmente y descargarlas manualmente a su máquina.

Para el envío automático a S3, puede integrar rclone en su script:


# Ejemplo de adición de rclone al script backup_gitea.sh
# ... (después de crear la copia de seguridad)
echo "Enviando copia de seguridad a S3..."
/usr/bin/rclone copy ${BACKUP_FILE} my-s3-remote:gitea-backups/
/usr/bin/rclone copy ${BACKUP_DIR}/caddy_data_backup_${DATE}.tar.gz my-s3-remote:gitea-backups/caddy-data/

# ... (limpieza de copias de seguridad antiguas en S3, si está configurado en rclone o a través de políticas de S3)

No olvide configurar rclone con sus credenciales S3 usando el comando rclone config.

Actualizaciones: rolling vs maintenance window

Las actualizaciones regulares son críticas para la seguridad y para obtener nuevas funciones.

  • Actualización del sistema operativo: Ejecute regularmente sudo apt update && sudo apt upgrade -y. Esto se puede hacer mensualmente o cuando se publiquen parches de seguridad importantes.
  • Actualización de imágenes Docker (Gitea, Caddy, Redis):

    Para los contenedores Docker, se recomienda utilizar una estrategia de "ventana de mantenimiento" (maintenance window) en lugar de "actualización continua" (rolling update), ya que los cambios pueden ser sustanciales.

    1. Antes de actualizar, realice una copia de seguridad reciente.
    2. Detenga los servicios de Gitea: docker compose down
    3. Descargue las nuevas imágenes: docker compose pull
    4. Inicie los servicios: docker compose up -d

    Siempre revise el changelog de Gitea en busca de cambios importantes (breaking changes) antes de actualizar a una nueva versión mayor. Por ejemplo, si actualiza de 1.21.x a 1.22.x, asegúrese de que no haya instrucciones especiales para la migración de la base de datos.

  • Actualización de Docker Engine: También requiere precaución. Por lo general, es suficiente actualizar Docker Engine cada pocos meses, o cuando sea necesario para solucionar vulnerabilidades. Después de actualizar Docker Engine, será necesario reiniciar el servidor para que todos los contenedores se inicien correctamente.

Siempre pruebe las actualizaciones en un servidor de prueba, si es posible, antes de aplicarlas al entorno de producción.

Solución de problemas + Preguntas frecuentes

Incluso con la configuración más cuidadosa, pueden surgir problemas. Aquí hay una lista de preguntas y problemas típicos que puede encontrar al desplegar Gitea con Docker y Caddy.

¿Qué configuración mínima de VPS es adecuada?

Para una instalación básica de Gitea (sin Docker) para un pequeño número de usuarios (1-5), se puede usar 1 vCore CPU, 1 GB de RAM y 20-30 GB de SSD. Sin embargo, si utiliza Docker y Caddy, y planea hasta 10-15 usuarios, se recomienda un mínimo de 2 vCore CPU, 2 GB de RAM y 40 GB de SSD. Esto garantizará un funcionamiento estable y un margen suficiente de recursos para el sistema operativo, el demonio de Docker y todos los contenedores.

¿Qué elegir: VPS o dedicado para esta tarea?

Para la mayoría de los escenarios de uso de Gitea (proyectos personales, equipos de hasta 50 personas, un número moderado de repositorios), un VPS es la opción óptima. Ofrece suficiente rendimiento, flexibilidad y es significativamente más económico que un servidor dedicado. Un servidor dedicado solo debe considerarse en casos de carga muy alta (cientos de usuarios, miles de repositorios), requisitos estrictos de aislamiento o la necesidad de ejecutar muchos otros servicios que consumen muchos recursos en la misma máquina.

Gitea no se inicia o el contenedor se reinicia constantemente. ¿Qué hacer?

Primero, verifique los registros del contenedor de Gitea: docker compose logs gitea. Causas comunes:

  • Conflicto de puertos: Asegúrese de que el puerto 3000 (puerto interno de Gitea) no esté ocupado por otro proceso dentro del contenedor o en el host (aunque en nuestra configuración no está abierto directamente al exterior).
  • Problemas con la base de datos: Si Gitea no puede conectarse a Redis o el archivo SQLite está dañado. Verifique los registros de Gitea en busca de errores relacionados con database o cache.
  • Permisos de archivo incorrectos: Asegúrese de que el usuario de Docker dentro del contenedor (UID/GID 1000) tenga permisos de escritura en el directorio ./data. Puede verificar los permisos en el host: ls -la ~/gitea/data.
  • app.ini incorrecto: Errores de sintaxis o valores incorrectos en el archivo de configuración de Gitea.

Caddy no obtiene el certificado SSL o no redirige el tráfico.

Verifique los registros de Caddy: docker compose logs caddy. Posibles causas:

  • Problemas de DNS: Asegúrese de que el registro A de su dominio (por ejemplo, your.domain.com) apunte correctamente a la dirección IP de su VPS. Esto se puede verificar con dig your.domain.com.
  • El firewall bloquea los puertos 80/443: Asegúrese de que UFW (u otro firewall) permita las conexiones entrantes en los puertos 80 y 443. Verifique sudo ufw status.
  • Otro proceso ocupa los puertos 80/443 en el host: Asegúrese de que no haya otro servidor web (Apache, Nginx) u otro Caddy ejecutándose en el host y utilizando estos puertos.
  • Caddyfile incorrecto: Errores de sintaxis o configuraciones de proxy incorrectas.
  • Límites de Let's Encrypt: Si ha intentado obtener un certificado del mismo dominio varias veces en poco tiempo, es posible que haya alcanzado el límite de Let's Encrypt. Espere unas horas.

El acceso SSH a los repositorios de Gitea no funciona.

Verifique lo siguiente:

  • El puerto 2222 está abierto en el firewall: sudo ufw status debe mostrar el permiso para el puerto 2222.
  • La clave SSH se ha añadido a Gitea: Asegúrese de que su clave pública SSH se haya añadido a la configuración de su perfil de Gitea a través de la interfaz web.
  • Comando de clonación correcto: Use git clone ssh://[email protected]:2222/su_usuario/su_repositorio.git. Preste atención a git@ y al puerto :2222.
  • El servidor SSH de Gitea está en ejecución: Verifique los registros de Gitea en busca de errores relacionados con SSH.

Después de actualizar las imágenes de Docker, Gitea no se inicia.

Esto puede deberse a cambios en la nueva versión de Gitea o Docker. Siempre verifique los changelogs oficiales. Si Gitea requiere una migración de base de datos, generalmente se realiza automáticamente en el primer inicio. Si no, verifique los registros. Es posible que deba revertir a una versión anterior de la imagen (por ejemplo, gitea/gitea:1.21.10 en lugar de gitea/gitea:1.22.0) y estudiar las instrucciones de migración.

¿Cómo actualizar Gitea?

Para actualizar Gitea (y otros contenedores), siga los siguientes pasos en el directorio ~/gitea:


# 1. ¡Haga una copia de seguridad! Esto es críticamente importante.
# 2. Detener los contenedores actuales
docker compose down
# 3. Actualizar las imágenes de Docker a las últimas versiones especificadas en docker-compose.yml
#    Si desea actualizar a una versión más reciente, cambie la etiqueta de la imagen en docker-compose.yml
docker compose pull
# 4. Iniciar los contenedores actualizados
docker compose up -d

Después de iniciar, verifique los registros y la interfaz web.

¿Cómo cambiar la configuración de Gitea después de la instalación inicial?

La mayoría de las configuraciones se pueden cambiar a través de la interfaz web, iniciando sesión como administrador: "Panel de administración" -> "Configuración del sitio". Algunas configuraciones específicas pueden requerir la edición manual del archivo ~/gitea/data/gitea/conf/app.ini y el posterior reinicio del contenedor de Gitea (docker compose restart gitea).

Conclusiones y próximos pasos

Ha configurado y desplegado con éxito su propio servidor Git Gitea en su VPS, utilizando Docker y Caddy para la obtención automática de certificados SSL. Ahora tiene una plataforma totalmente controlada y segura para gestionar sus repositorios, que garantiza la privacidad y la independencia de los servicios de terceros. Este servidor Git autoalojado es una herramienta potente para desarrolladores individuales, equipos y startups, proporcionando una funcionalidad similar a la de los grandes proveedores de Git, con un coste de recursos significativamente menor.

Próximos pasos

Después de la configuración básica de Gitea, puede considerar los siguientes pasos para expandir su funcionalidad e integrarlo en su flujo de trabajo:

  1. Integración con CI/CD: Configure la integración de Gitea con sistemas de integración continua/entrega continua (CI/CD), como Drone CI, Jenkins, GitLab CI (usando Gitea como fuente de código) o scripts personalizados. Esto permitirá probar y desplegar automáticamente su código en cada commit.
  2. Monitoreo y registro: Implemente sistemas de monitoreo (por ejemplo, Prometheus + Grafana) para rastrear el estado de su VPS y los contenedores de Gitea/Caddy/Redis. Configure el registro centralizado (por ejemplo, ELK Stack o Loki + Promtail) para un análisis conveniente de los registros de todos los servicios.
  3. Escalado y optimización: Si su equipo crece o el número de repositorios aumenta, considere cambiar de SQLite a PostgreSQL o MySQL para la base de datos de Gitea, así como optimizar los recursos del VPS. Para instalaciones muy grandes, se puede considerar la asignación de Gitea, la base de datos y la caché a servidores separados.
  4. Funciones adicionales de Gitea: Explore la rica funcionalidad de Gitea, como la wiki integrada, el seguimiento del tiempo, las etiquetas, los proyectos, el gestor de paquetes (Gitea Packages) y las integraciones con servicios externos a través de webhooks.

¿Te fue útil esta guía?

Tus comentarios nos ayudan a mejorar nuestras guías.

Compartir esta publicación:

Envía esta guía a alguien a quien pueda resultarle útil.

Telegram VKVK WhatsApp Facebook LinkedIn XX

Instalación de Gitea en VPS: servidor Git autoalojado ligero
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.