Tutorial

Alojar Forgejo en su VPS: guía completa 2025

Autoalojamiento9 min de lectura6 pasos

Forgejo es la forja Git libre y autoalojable que surgió como alternativa comunitaria a Gitea. Ligera, compatible con GitHub Actions y respetuosa con sus datos, se instala en menos de una hora en un VPS. Esta guía recorre todo el camino: dimensionamiento del servidor, despliegue con Docker, configuración SSL, runners CI/CD, endurecimiento posterior a la instalación y actualización sin cortes.

Contenido· Por qué elegir Forgejo para su forja Git autoalojada1/11
  1. 01Por qué elegir Forgejo para su forja Git autoalojada
  2. 02Beneficios concretos de un Forgejo autoalojado
  3. 03Requisitos de hardware y software, con cifras
  4. 04Desplegar Forgejo con Docker y SSL
  5. 05Escribir sus primeros workflows de Forgejo Actions
  6. 06Seguridad posterior a la instalación: los ajustes esenciales
  7. 07Actualizar Forgejo sin interrupción
  8. 08Migrar desde Gitea en cinco minutos
  9. 09Resolución de problemas: los errores más frecuentes
  10. 10Federación ActivityPub: lo que Forgejo prepara
  11. 11Forgejo vs Gitea vs GitLab CE: elegir su forja

Por qué elegir Forgejo para su forja Git autoalojada

Forgejo nació en 2022 de un fork de Gitea, motivado por las inquietudes sobre la gobernanza del proyecto. Su desarrollo es enteramente comunitario, bajo licencia MIT, sin dependencia de ninguna empresa comercial. Para los equipos que quieren controlar su código fuente, su pipeline CI/CD y sus artefactos sin pasar por GitHub, GitLab o Bitbucket, Forgejo representa la solución más ligera del mercado. La interfaz resulta familiar para cualquier desarrollador que haya usado GitHub, la migración desde Gitea es transparente y la compatibilidad con las GitHub Actions simplifica la adopción.

Beneficios concretos de un Forgejo autoalojado

  • Soberanía total: su código nunca sale de su infraestructura
  • Compatible con GitHub Actions vía Forgejo Actions — reutilice sus workflows existentes
  • Huella de memoria muy baja (256 MB de RAM para un equipo pequeño)
  • Registro de paquetes integrado: npm, PyPI, Maven, Helm, contenedor OCI
  • Sin límite en el número de repositorios privados ni de colaboradores
  • Federación ActivityPub en proceso de estandarización — interoperabilidad futura con otras forjas
  • Licencia OSS, auditable, sin sorpresas en la tarificación
  • Actualizaciones controladas: usted decide cuándo migrar

Requisitos de hardware y software, con cifras

Antes de lanzar Forgejo, dimensione su VPS según el tamaño real de su equipo. Para 1 a 5 desarrolladores con algunas decenas de repositorios, 1 vCPU y 1 GB de RAM bastan; Forgejo en reposo consume unos 80 MB. Para 5 a 20 desarrolladores con CI/CD activa, prevea 2 vCPU y 2 GB de RAM. Por encima de 20 desarrolladores o para repositorios de gran tamaño (monorepos, binarios), 4 vCPU y 4 GB de RAM garantizan una experiencia fluida. En cuanto al almacenamiento, cuente el volumen de sus repositorios Git más un 20 % de margen para los artefactos y las copias de seguridad.

En el plano de red, deben abrirse tres puertos en su cortafuegos: el puerto 80 (HTTP, para la validación de Let's Encrypt), el puerto 443 (HTTPS, tráfico web) y el puerto 2222 (SSH Git, para evitar el conflicto con el SSH de administración en el 22). En cuanto al software, necesita Docker Engine ≥ 24, Docker Compose v2 y un nombre de dominio que apunte a su VPS.

Desplegar Forgejo con Docker y SSL

  1. Preparar el entorno

    Cree los directorios que persistirán los datos fuera del contenedor:

    mkdir -p /opt/forgejo/{data,config,db}
    chown -R 1000:1000 /opt/forgejo

    Cree el archivo /opt/forgejo/.env con sus valores:

    FORGEJO_DOMAIN=git.mondomaine.com
    FORGEJO_SSH_PORT=2222
    POSTGRES_PASSWORD=changez_ce_mot_de_passe
  2. Crear el docker-compose.yml

    services:
      forgejo:
        image: codeberg.org/forgejo/forgejo:latest
        restart: unless-stopped
        environment:
          - USER_UID=1000
          - USER_GID=1000
          - FORGEJO__database__DB_TYPE=postgres
          - FORGEJO__database__HOST=db:5432
          - FORGEJO__database__NAME=forgejo
          - FORGEJO__database__USER=forgejo
          - FORGEJO__database__PASSWD=${POSTGRES_PASSWORD}
        volumes:
          - /opt/forgejo/data:/data
        ports:
          - "3000:3000"
          - "${FORGEJO_SSH_PORT:-2222}:22"
        depends_on:
          - db
    
      db:
        image: postgres:16-alpine
        restart: unless-stopped
        environment:
          - POSTGRES_DB=forgejo
          - POSTGRES_USER=forgejo
          - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
        volumes:
          - /opt/forgejo/db:/var/lib/postgresql/data
  3. Iniciar los servicios

    cd /opt/forgejo
    docker compose up -d
    docker compose logs -f forgejo

    Espere a que aparezca la línea Listen on :3000. Forgejo ejecuta sus migraciones de esquema automáticamente en el primer arranque.

  4. Configurar el reverse proxy y SSL con Caddy

    Caddy es la opción más sencilla para obtener un certificado Let's Encrypt automático. Instálelo y después cree /etc/caddy/Caddyfile:

    git.mondomaine.com {
      reverse_proxy localhost:3000
    }

    Inicie Caddy: systemctl enable --now caddy. El certificado TLS se emite y se renueva automáticamente. Si prefiere nginx, configure un bloque proxy_pass http://127.0.0.1:3000; clásico con Certbot.

  5. Finalizar la configuración de la instancia

    Abra https://git.mondomaine.com en su navegador. El asistente de configuración aparece una sola vez. Indique el dominio, la URL SSH (ssh://git.mondomaine.com:2222), la dirección de correo del administrador y desactive el registro público ya en esa pantalla si su forja es de uso privado. Una vez validado el asistente, la configuración queda bloqueada en /opt/forgejo/data/gitea/conf/app.ini.

  6. Instalar un runner de Forgejo Actions

    En el mismo servidor o en una máquina dedicada, recupere el token en *Administración del sitio → Runners*. Despliegue el runner mediante Docker:

    services:
      runner:
        image: code.forgejo.org/forgejo/act_runner:latest
        restart: unless-stopped
        environment:
          - FORGEJO_INSTANCE_URL=https://git.mondomaine.com
          - FORGEJO_RUNNER_TOKEN=votre_token
          - FORGEJO_RUNNER_NAME=runner-principal
          - FORGEJO_RUNNER_LABELS=ubuntu-latest:docker://node:20,docker:docker://docker:dind
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock

    El runner aparece en la interfaz en menos de un minuto. Puede ejecutar jobs en modo Docker (aislamiento completo, recomendado), Process (sin Docker, para tareas de shell ligeras) o Auto (detecta según la etiqueta del workflow).

Escribir sus primeros workflows de Forgejo Actions

La compatibilidad con la sintaxis de GitHub Actions es muy amplia. Cree el archivo .forgejo/workflows/ci.yml en la raíz de su repositorio:

on:
  push:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run tests
        run: |
          npm ci
          npm test

Las etiquetas runs-on corresponden a las etiquetas declaradas al registrar el runner. Puede definir varios runners con etiquetas diferentes (p. ej. arm64, gpu, high-memory) y apuntar al entorno adecuado en cada job. Los artefactos y la caché funcionan con las mismas actions oficiales que en GitHub.

Seguridad posterior a la instalación: los ajustes esenciales

Un Forgejo recién instalado es funcional, pero no está endurecido. Estos son los seis puntos que hay que tratar sin falta antes de abrir la forja a su equipo.

Desactivar el registro público. En *Administración del sitio → Configuración → Usuarios*, desmarque «Permitir el registro de usuarios». En una forja interna, nadie debe poder crear una cuenta sin invitación.

Activar la 2FA para los administradores. Cada cuenta de administrador debe activar la autenticación de doble factor en *Configuración → Seguridad*. Imponga la 2FA al conjunto de los usuarios mediante el parámetro REQUIRE_SIGNIN_VIEW y las políticas de seguridad de la organización.

SSH solo por clave. Desactive la autenticación por contraseña en el /etc/ssh/sshd_config del servidor anfitrión (PasswordAuthentication no). Para el SSH Git (puerto 2222), Forgejo solo acepta las claves públicas registradas en los perfiles de usuario: es su comportamiento por defecto.

Secretos de los webhooks. Al crear cada webhook (hacia su CI externa, Slack, etc.), rellene siempre el campo *Secret*. Forgejo firma la carga útil con HMAC-SHA256; su receptor debe verificar esa firma antes de procesar el evento.

Paquetes privados. Si utiliza el registro de paquetes integrado, configure la visibilidad por defecto en *Privado* en los ajustes de la organización. Los tokens de acceso para publicar deben tener un alcance mínimo (packages:write únicamente, nunca un token de administrador global).

Cortafuegos. Cierre todos los puertos salvo el 80, el 443 y el 2222. El puerto 3000 (Forgejo interno) nunca debe exponerse directamente; solo lo consume el reverse proxy en loopback.

Actualizar Forgejo sin interrupción

El procedimiento de actualización con Docker es sencillo y solo exige unos segundos de indisponibilidad.

cd /opt/forgejo
# 1. Tirer la nouvelle image
docker compose pull forgejo

# 2. Sauvegarder la base avant toute migration
docker compose exec db pg_dump -U forgejo forgejo > backup-$(date +%Y%m%d).sql

# 3. Redémarrer le service
docker compose up -d forgejo

# 4. Vérifier les migrations de schéma
docker compose logs forgejo | grep -i migrat

Forgejo ejecuta sus migraciones automáticamente al arrancar. Compruebe que la línea Finished successfully aparece en los logs. Si se produce un error de migración, restaure la copia de seguridad SQL y comunique el problema en el tracker de Forgejo. Consulte las notas de versión antes de cada salto de versión mayor — las migraciones entre versiones mayores pueden exigir un paso intermedio.

Migrar desde Gitea en cinco minutos

Forgejo es un fork directo de Gitea: su esquema de base de datos es compatible hasta la versión 1.21. Para migrar, detenga Gitea, copie su directorio de datos (/data o /opt/gitea) a /opt/forgejo/data, sustituya la imagen en su docker-compose y reinicie. Forgejo detecta automáticamente el esquema de Gitea y aplica sus propias migraciones. Sus repositorios, usuarios, claves SSH, webhooks e issues se conservan íntegramente. Para las versiones de Gitea más recientes, consulte la matriz de compatibilidad en el wiki de Forgejo antes de migrar.

Resolución de problemas: los errores más frecuentes

Conexión SSH rechazada en el puerto 2222. Compruebe primero que Docker publica efectivamente el puerto (docker compose ps → columna Ports). Después, pruebe desde el cliente: ssh -p 2222 [email protected]. Si la respuesta es PTY allocation request failed, la conexión funciona: Forgejo responde Hi <utilisateur>! You've successfully authenticated. Si obtiene Connection refused, el cortafuegos bloquea el puerto: ufw allow 2222/tcp.

Runner mostrado como offline en la interfaz. El runner contacta con Forgejo por HTTPS saliente. Compruebe que el contenedor del runner puede resolver y alcanzar git.mondomaine.com. Un certificado autofirmado exige montar su CA dentro del contenedor. Reinicie el runner después de corregir la conectividad: docker compose restart runner.

Push rechazado por un hook pre-receive. Forgejo puede rechazar un push si hay activo un hook de protección de rama (revisión de código obligatoria, tests de CI obligatorios) o si se supera una regla de tamaño de archivo. El mensaje de error de git contiene el detalle. Para los binarios grandes (> 100 MB), utilice Git LFS: Forgejo admite el protocolo LFS de forma nativa.

Interfaz lenta al cabo de varios meses. Lance el recolector de basura de Git sobre los repositorios activos desde la administración: *Administración → Repositorios → Git Repositories → Run Git GC*. Para automatizarlo, configure la tarea programada en app.ini bajo [cron.run_task].

Federación ActivityPub: lo que Forgejo prepara

Forgejo es el primer proyecto de forja Git que implementa la federación mediante el protocolo ActivityPub (el mismo que Mastodon). En la versión 1.20+, ya puede seguir un repositorio remoto alojado en otra instancia Forgejo federada y recibir las notificaciones de issues y de pull requests en su timeline local. La federación completa — fork entre instancias, pull request entre forjas — está en proceso de estandarización dentro del grupo ForgeFed. Si sus colaboradores están en forjas diferentes, esta evolución permitirá con el tiempo contribuir sin crear una cuenta en cada instancia.

Forgejo vs Gitea vs GitLab CE: elegir su forja

Desplace la tabla

CriterioForgejoGiteaGitLab CE
GobernanzaComunidad (Codeberg e.V.)Empresa comercial (Gitea Ltd)Empresa comercial (GitLab Inc)
RAM mínima~80 MB~80 MB~4 GB
Compatibilidad con GitHub ActionsSí (Forgejo Actions)Sí (Gitea Act)No (CI propietaria)
Registro de paquetesSí (multiformato)
Federación ActivityPubEn curso (ForgeFed)NoNo
Migración desde GitHubSí (espejo + importación)
Interfaz de administraciónSimple, integradaSimple, integradaCompleta pero pesada
LicenciaMITMITMIT (CE) / EE (de pago)
Frecuencia de releasesMensualMensualMensual

Su forja Git soberana en un VPS ServOrbit

Con un VPS Cloud equipado con Debian y Docker, despliegue Forgejo, su servicio Actions y su registro de paquetes en unos minutos. Recursos dedicados, IPv4 incluida, sin recursos compartidos.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva