Alojando mi propio servidor git con Forgejo: una guía completa para la soberanía de tu código

En la era digital actual, el código es el activo más valioso para cualquier desarrollador, equipo o empresa tecnológica. La gestión de versiones, la colaboración eficiente y la seguridad de este código fuente son pilares fundamentales del desarrollo de software. Si bien plataformas populares como GitHub o GitLab SaaS ofrecen soluciones robustas y convenientes, cada vez más profesionales y organizaciones están descubriendo el valor inmenso de la soberanía de sus datos. ¿Qué sucede si las políticas de una plataforma cambian? ¿Y si la seguridad de un tercero se ve comprometida? ¿O si simplemente deseamos un control más granular sobre cada aspecto de nuestro entorno de desarrollo? Aquí es donde entra en juego la auto-hospedaje, y con ello, herramientas como Forgejo, que se presentan como una alternativa poderosa y éticamente alineada para gestionar nuestro código Git.

Imaginen tener la capacidad de ejecutar un servicio Git completo, con todas las características que esperarían —repositorios, gestión de usuarios, issues, wikis, pulls y merges— en su propia infraestructura. Esto no es solo una cuestión de preferencia técnica; es una declaración de independencia y un paso hacia una mayor resiliencia. En este artículo, exploraremos en profundidad por qué alojar nuestro propio servidor Git es una decisión estratégica inteligente y cómo Forgejo, una bifurcación de Gitea impulsada por la comunidad, nos ofrece una plataforma excepcional para lograrlo. Desde la planificación inicial hasta la implementación y el mantenimiento, desglosaremos los pasos esenciales para que puedan tomar el control total de su ecosistema de desarrollo de software. Prepárense para embarcarse en un viaje que no solo les brindará un servidor Git funcional, sino también una comprensión más profunda de la infraestructura que sustenta su trabajo diario.

¿Por qué alojar tu propio servidor git?

Eyeglasses reflecting computer code on a monitor, ideal for technology and programming themes.

La decisión de hospedar un servidor Git propio, en lugar de depender de servicios en la nube de terceros, surge de una serie de motivaciones clave que resuenan profundamente con la filosofía de control y autonomía. No se trata simplemente de replicar una funcionalidad existente, sino de construir un ecosistema de desarrollo que se ajuste con precisión a nuestras necesidades y principios.

Control y soberanía de los datos

Este es, quizás, el argumento más potente. Al alojar nuestro propio servidor, tenemos el control absoluto sobre dónde residen nuestros datos, quién puede acceder a ellos y cómo se gestionan. Para proyectos sensibles, código propietario o datos que están sujetos a estrictas regulaciones (como GDPR u otras normativas locales), tener los repositorios en una infraestructura propia elimina la dependencia de las políticas de privacidad y seguridad de terceros. En un mundo donde la información es poder, asegurar la soberanía de nuestro código fuente es fundamental. Personalmente, encuentro una tranquilidad invaluable al saber que mis proyectos más importantes no están sujetos a las decisiones o incidentes de terceros proveedores.

Seguridad y privacidad

Cuando usamos un servicio en la nube, depositamos nuestra confianza en su modelo de seguridad. Si bien los proveedores grandes invierten enormemente en esto, no están exentos de brechas o vulnerabilidades. Al auto-hospedar, podemos implementar nuestras propias políticas de seguridad, configurar firewalls a medida, gestionar el acceso a nivel de red y aplicar parches y actualizaciones en nuestros propios términos. Esto es especialmente crítico para organizaciones que manejan secretos comerciales o información altamente confidencial. La privacidad también se refuerza, ya que los datos nunca salen de nuestro control directo, minimizando la exposición a terceros.

Personalización y flexibilidad

Las plataformas en la nube, por su naturaleza, ofrecen una experiencia estandarizada. Aunque suelen ser muy configurables, hay límites. Con un servidor auto-hospedado, podemos adaptar el entorno a nuestras necesidades específicas. Desde la integración con herramientas de CI/CD internas, hasta la configuración de hooks personalizados, pasando por la gestión de usuarios y grupos de una manera que se alinee perfectamente con la estructura de nuestra organización. La flexibilidad es casi ilimitada, permitiendo una adaptabilidad que los servicios externos rara vez pueden igualar.

Reducción de costes a largo plazo

Aunque la inversión inicial en hardware o en la configuración de un servidor virtual puede parecer un coste, a menudo resulta más económico a largo plazo, especialmente para equipos en crecimiento o proyectos con un gran volumen de repositorios y usuarios. Los modelos de precios de las plataformas en la nube pueden escalar rápidamente, y tener la capacidad de reutilizar hardware existente o aprovechar tarifas planas de infraestructura propia puede generar ahorros significativos a medida que el proyecto o la empresa crece.

¿Por qué Forgejo? Más allá de Gitea

En el espacio de los servidores Git auto-hospedados, Gitea se ha consolidado como una opción popular y ligera. Sin embargo, para aquellos que buscan un enfoque aún más comunitario, abierto y con una gobernanza sólida, Forgejo emerge como una alternativa sumamente atractiva. Nace como una bifurcación (fork) de Gitea, impulsada por la FSF (Free Software Foundation) y el ecosistema Codeberg, con la visión de asegurar que el proyecto se mantenga firmemente arraigado en los principios del software libre y de código abierto.

La filosofía de Forgejo

Forgejo representa un compromiso con el software libre. Su desarrollo está guiado por la comunidad y busca evitar las preocupaciones que surgieron en torno a la dirección de Gitea, especialmente en lo que respecta a la gobernanza y la posible influencia comercial. El objetivo es proporcionar una plataforma de alojamiento de Git que sea verdaderamente de código abierto, desarrollada de forma transparente y con una gobernanza que priorice los intereses de los usuarios y colaboradores. Personalmente, valoro muchísimo este enfoque, ya que garantiza que la herramienta evolucionará de una manera que beneficie a todos, sin agendas ocultas.

Características principales

Forgejo hereda la mayoría de las fantásticas características de Gitea, lo que significa que es una solución completa para la gestión de repositorios Git. Esto incluye:

  • Repositorios Git: Soporte completo para todas las operaciones Git.
  • Gestión de usuarios y equipos: Roles, permisos y organización clara.
  • Issues y solicitudes de extracción (Pull Requests): Herramientas colaborativas esenciales para el seguimiento de tareas y la revisión de código.
  • Wikis: Documentación integrada para cada proyecto.
  • Gestión de proyectos y tableros Kanban: Para una planificación y seguimiento visual del trabajo.
  • Integración con CI/CD: Facilidad para conectar con herramientas de integración continua y despliegue continuo.
  • Marcadores (Releases): Para gestionar las versiones del software.
  • Ligero y eficiente: Escrito en Go, Forgejo es notablemente eficiente en el uso de recursos, lo que lo hace ideal para ejecutarse en hardware modesto o máquinas virtuales con recursos limitados.

Comunidad y desarrollo

La fuerza de Forgejo radica en su comunidad. Al ser un proyecto impulsado por la comunidad de software libre, se beneficia de un desarrollo activo y transparente. La hoja de ruta se define de manera colaborativa, y las contribuciones son bienvenidas de una amplia gama de desarrolladores. Esto no solo asegura la longevidad del proyecto, sino también su adaptación a las necesidades cambiantes de los usuarios. Apoyar a Forgejo es apoyar un modelo de desarrollo que creemos que es crucial para el futuro del software. Pueden explorar más sobre el proyecto en su sitio oficial: Forgejo.org.

Planificación previa: requisitos y consideraciones

Antes de sumergirnos en la instalación de Forgejo, es fundamental realizar una planificación detallada. Una buena preparación puede ahorrar horas de frustración y asegurar una implementación fluida y estable.

Hardware o máquina virtual

Forgejo es ligero, pero aún necesita recursos. Para un equipo pequeño o uso personal, una máquina virtual con 1-2 GB de RAM y 1-2 núcleos de CPU suele ser suficiente. Para equipos más grandes o múltiples repositorios activos, se recomienda aumentar estos recursos, quizás a 4 GB de RAM y 4 núcleos. El almacenamiento dependerá del tamaño de sus repositorios; un disco SSD es altamente recomendable para un rendimiento óptimo.

Sistema operativo (Linux recomendado)

Aunque Forgejo puede ejecutarse en varios sistemas operativos, Linux es la opción predilecta debido a su estabilidad, seguridad y la vasta cantidad de recursos y documentación disponibles. Distribuciones como Debian, Ubuntu, CentOS o Fedora son excelentes candidatas.

Base de datos (PostgreSQL o MySQL)

Forgejo soporta varias bases de datos, incluyendo SQLite3, PostgreSQL y MySQL/MariaDB. Para despliegues de producción, se recomienda PostgreSQL o MySQL/MariaDB por su rendimiento y robustez. SQLite3 es adecuado para usos muy ligeros o pruebas. Yo, personalmente, me inclino por PostgreSQL por su solidez y capacidades avanzadas.

Dominio y SSL

Para acceder a su servidor Forgejo desde internet de forma profesional y segura, necesitarán un nombre de dominio (ej. git.midominio.com) y un certificado SSL/TLS. Let's Encrypt ofrece certificados gratuitos y fáciles de renovar, lo cual es una excelente opción. Asegúrense de que su dominio apunte a la IP pública de su servidor.

Conectividad de red

El servidor debe tener una dirección IP pública y los puertos necesarios abiertos en su firewall (típicamente 80 para HTTP y 443 para HTTPS, además del 22 si planean usar SSH para Git). Si están detrás de un router, necesitarán configurar el redireccionamiento de puertos (port forwarding).

Guía de instalación de Forgejo

Ahora que tenemos una base sólida de planificación, pasemos a los pasos prácticos para instalar Forgejo en un servidor Linux (usaremos Ubuntu Server como ejemplo, con PostgreSQL y Nginx).

Preparación del sistema

  1. Actualización del sistema: Asegúrense de que su sistema esté actualizado.
    sudo apt update && sudo apt upgrade -y
    
  2. Instalación de dependencias:
    • Git: Forgejo necesita Git instalado en el servidor.
      sudo apt install git -y
      
    • PostgreSQL: Instalen el servidor de base de datos.
      sudo apt install postgresql postgresql-contrib -y
      
    • Nginx (o Caddy): Como proxy inverso para Forgejo.
      sudo apt install nginx -y
      
    • Certbot: Para obtener certificados Let's Encrypt.
      sudo apt install certbot python3-certbot-nginx -y
      

Creación de usuario para Forgejo

Es una buena práctica ejecutar Forgejo bajo un usuario dedicado para mejorar la seguridad.

sudo adduser --system --group --shell /bin/bash --home /var/lib/forgejo forgejo

Configuración de la base de datos

  1. Crear un usuario y base de datos para Forgejo en PostgreSQL:
    sudo -u postgres psql
    
    Dentro de la consola psql:
    CREATE USER forgejo WITH PASSWORD 'su_password_segura';
    CREATE DATABASE forgejo OWNER forgejo;
    \q
    
    Asegúrense de reemplazar su_password_segura con una contraseña fuerte.

Descarga y configuración de Forgejo

  1. Obtener el binario de Forgejo: Visiten la página de descargas de Forgejo para obtener la última versión.
    # Ejemplo, ajusten la versión según la última disponible
    FORGEJO_VERSION="1.21.3-0" # Reemplacen con la versión actual
    wget https://codeberg.org/forgejo/forgejo/releases/download/v${FORGEJO_VERSION}/forgejo-${FORGEJO_VERSION}-linux-amd64
    sudo mv forgejo-${FORGEJO_VERSION}-linux-amd64 /usr/local/bin/forgejo
    sudo chmod +x /usr/local/bin/forgejo
    
  2. Crear directorios necesarios:
    sudo mkdir -p /etc/forgejo /var/lib/forgejo/data /var/lib/forgejo/log
    sudo chown -R forgejo:forgejo /etc/forgejo /var/lib/forgejo
    
  3. Configuración inicial (app.ini): Aunque la configuración se puede hacer a través de la interfaz web inicial, podemos crear un app.ini básico.
    sudo nano /etc/forgejo/app.ini
    
    Contenido básico (ajusten DOMAIN y HOST con su dominio):
    [server]
    DOMAIN = git.midominio.com
    HTTP_PORT = 3000
    ROOT_URL = https://git.midominio.com/
    PROTOCOL = http
    
    [database]
    DB_TYPE = postgres
    HOST = 127.0.0.1:5432
    NAME = forgejo
    USER = forgejo
    PASSWD = su_password_segura
    SSL_MODE = disable
    
    Guarden y cierren el archivo.

Integración con un servidor web (Nginx como proxy inverso)

Forgejo se ejecutará en el puerto 3000 internamente. Nginx actuará como proxy inverso para manejar el tráfico HTTP/HTTPS en los puertos estándar (80/443).

  1. Crear archivo de configuración de Nginx:
    sudo nano /etc/nginx/sites-available/forgejo
    
    Contenido:
    server {
        listen 80;
        server_name git.midominio.com;
    
        location / {
            proxy_pass http://localhost:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
  2. Activar la configuración y recargar Nginx:
    sudo ln -s /etc/nginx/sites-available/forgejo /etc/nginx/sites-enabled/
    sudo nginx -t
    sudo systemctl restart nginx
    
  3. Obtener certificados SSL con Certbot:
    sudo certbot --nginx -d git.midominio.com
    
    Sigan las instrucciones. Esto modificará automáticamente la configuración de Nginx para usar HTTPS.

Puesta en marcha y acceso inicial

  1. Creación del servicio Systemd: Para gestionar Forgejo como un servicio.
    sudo nano /etc/systemd/system/forgejo.service
    
    Contenido:
    [Unit]
    Description=Forgejo Git Server
    After=syslog.target network.target postgresql.service
    
    [Service]
    Type=simple
    User=forgejo
    Group=forgejo
    WorkingDirectory=/var/lib/forgejo
    ExecStart=/usr/local/bin/forgejo web --config /etc/forgejo/app.ini
    Restart=always
    Environment=USER=forgejo HOME=/var/lib/forgejo
    
    [Install]
    WantedBy=multi-user.target
    
  2. Habilitar e iniciar el servicio:
    sudo systemctl enable forgejo
    sudo systemctl start forgejo
    sudo systemctl status forgejo
    
    Verifiquen que el servicio esté activo y funcionando. Pueden consultar los logs con journalctl -u forgejo.service.
  3. Acceso al navegador y configuración web: Ahora, abran su navegador y naveguen a https://git.midominio.com. Deberían ver la página de configuración inicial de Forgejo. Rellenen los datos de la base de datos (que ya definimos), creen la cuenta de administrador principal y configuren los ajustes generales del sitio. Asegúrense de que la URL raíz (ROOT_URL) esté correctamente configurada con https://git.midominio.com/.

Mantenimiento y buenas prácticas

Una vez que Forgejo esté en marcha, el trabajo no termina. El mantenimiento regular es crucial para garantizar la seguridad, el rendimiento y la disponibilidad de su servidor.

Copias de seguridad

Establecer una estrategia de copias de seguridad robusta es primordial. Deben respaldar la base de datos de PostgreSQL y los repositorios Git (que residen en el directorio de datos de Forgejo, /var/lib/forgejo/data/gitea-repositories). La herramienta forgejo dump es excelente para esto. Pueden automatizar este proceso con scripts y cron jobs. Guarden las copias de seguridad en una ubicación segura y, idealmente, fuera del mismo servidor. Nunca está de más recordar que una copia de seguridad no existe hasta que se ha probado su restauración.

Actualizaciones de Forgejo

Mantener Forgejo actualizado es esencial para beneficiarse de nuevas características, mejoras de rendimiento y, lo más importante, parches de seguridad. El proceso de actualización suele ser sencillo: descargar el nuevo binario, detener el servicio de Forgejo, reemplazar el binario antiguo por el nuevo, y reiniciar el servicio. Siempre consulten la documentación oficial de Forgejo para los pasos de actualización específicos de su versión.

Monitorización

Configuren herramientas de monitorización para vigilar el estado de su servidor (CPU, RAM, disco) y el servicio de Forgejo. Esto les permitirá detectar problemas de rendimiento o fallos antes de que afecten a los usuarios. Herramientas como Prometheus y Grafana son excelentes para esto.

Seguridad adicional

  • Firewall: Mantengan solo los puertos esenciales abiertos (80, 443, 22 si es necesario para SSH).
  • Actualizaciones del sistema operativo: Mantengan su sistema operativo al día con los últimos parches de seguridad.
  • Contraseñas fuertes: Impongan políticas de contraseñas fuertes para los usuarios de Forgejo y del sistema.
  • Auditoría de logs: Revisen los logs del sistema y de Forgejo regularmente para detectar actividades sospechosas.
  • Fail2ban: Consideren instalar Fail2ban para proteger su servidor SSH y Nginx contra ataques de fuerza bruta.

Consideraciones avanzadas y mi opinión personal

La auto-hospedaje de Forgejo abre un abanico de posibilidades que van más allá de un simple servidor Git.

Integración con CI/CD (Drone, Jenkins)

Uno de los mayores beneficios de tener control sobre su servidor Git es la facilidad de integración con herramientas de Integración Continua y Despliegue Continuo (CI/CD). Plataformas como Drone CI (que tiene una excelente integración con Forgejo/Gitea) o Jenkins pueden configurarse para escuchar los eventos de los repositorios de Forgejo y automatizar la construcción, prue

Diario Tecnología