Skip to content

OneDev

OneDev proporciona una excelente opción como servidor Git auto-hospedado (self-hosted) con CI/CD integrado, tablero Kanban, registro de problemas (issues) y repositorio de paquetes (similar a GitLab pero más ligero y open-source). Se ejecuta fácilmente en contenedores de Docker, usando una base de datos embebida por defecto (H2 database).

Requisitos previos

  • Docker y Docker Compose instalados.
  • Recursos: OneDev corre bien en máquina con 2 cores + 2-4 GB RAM.
  • Puertos: Abre en el firewall los siguientes puertos...
    • 6610 (HTTP principal, web UI)
    • 6611 (HTTPS, opcional pero recomendado)
    • 2222 (SSH para git clone)
  • DNS: Crea un subdominio como git.domain.co con un A record apuntando a tu IP (por ejemplo, usando Cloudflare).

git.domain.co representa un subdomiio de ejemplo basado en domain.co, el cuál correspondería a tu dominio (debes reemplazarlo)

Para preparar el sistema, instala Docker estable y plugin para Docker Compose:

bash
curl -fsSL https://get.docker.com | sudo CHANNEL=stable sh
sudo usermod -aG docker $USER
newgrp docker

Para definir puertos admitidos para el firewall, ejecuta:

bash
sudo ufw allow 6610

Si cuentas con certificados verídicos usa: sudo ufw allow 6610,6611/tcp

Insatalación y configuración con Docker Compose

Paso 1: Crear un directorio o carpeta asociado a OneDev

bash
sudo mkdir -p /opt/onedev
cd /opt/onedev

Paso 2: Crear el contenedor

Basados en la documenación oficial, copia y pega lo siguiente:

yaml
docker run -d -p 6610:6610 -p 6611:6611 \
  --name onedev \
  --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /opt/onedev/data:/opt/onedev \
  1dev/server:latest

Podríamos agregar otro puerto usando -p 2222:22 si queremos usar clonación vía ssh.

Aquí es importante sustituir el volumen correspondiente y usar Docker, es decir:

  • Volumen /opt/onedev/data guarda todo (repositorios, CI artifacts, base de datos H2 embebida por defecto).
  • El socket de Docker permite que OneDev ejecute jobs CI/CD en contenedores.

Paso 3: Comprueba el contenedor de OneDev

Podemos ejecutar el siguiente comando para verificar el estado del contenedor:

bash
docker ps -f name=onedev

También puedes listar la ubicación de los datos con: ls /opt/onedev/data/

Paso 4: Accede por primera vez a OneDev

  • Abre en navegador: http://IP:6610 o http://git.domain.co:6610 (o HTTPS si configuraste 6611).
  • Sigue el paso a paso (wizard) de la página de configuración (setup) inicial:
    • Crea la cuenta de administrador suministrando: Login Name, Password (fuerte), Full Name, Email Address.
    • Configura servidor SMTP: SMTP host = mail.domain.co, puerto 587 (submission), STARTTLS, usuario/contraseña de un mailbox.
    • Server URL: pon https://git.domain.co (o con puerto si no usas proxy inverso).

Dónde IP corresponde a la dirección del servidor en internet.
git.domain.co representa un subdomiio de ejemplo basado en domain.co, el cuál correspondería a tu dominio (debes reemplazarlo)

Paso 5: Configura HTTPS

TypeNameContentTTL
AgitIPAuto

Dónde IP corresponde a la dirección del servidor en internet.

Podría usarse Cloudflared (como veremos avanzado) para git.domain.co apuntando a tu IP:6610 (o 6611). Sino, conviene agregar un proxy inverso (como Caddy, Traefik, Nginx) para manejar certificados con Let's Encrypt.

Opciones avanzadas

Considera algunas ideas para mejorar las posibilidades de uso de OneDev. Entre otras, que veremos avanzando, podemos citar:

  • Base de datos externa: Podría agregarse PostgreSQL (mejor para producción) en otro contenedor.
  • SSH git: Puedes definir otro puerto para ssh si otro servicio usa 22 (ej. - "2222:22").
  • Proxy inverso anexo: En lugar de usar el puerto 6610 se puede delegar a un proxy (como Caddy, Traefik, Nginx)

Exponiendo con Cloudflare Tunnel (Cloudflared)

Para usar cloudflared (el cliente de Cloudflare Tunnel), primero debemos instalarlo ejecutando lo siguiente:

bash
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

Para limpiar el archivo después de instalado usa: rm cloudflared-linux-amd64.deb

Una vez instalado, puedes ejecutar los siguientes comandos para autenticarte, crear el túnel, configurarlo y ejecutarlo:

bash
cloudflared tunnel login
cloudflared tunnel create onedev
cloudflared tunnel route dns onedev git.onmind.co
cloudflared tunnel run onedev

Cambia onedev por el nombre de tu preferencia, y git.domain.co por tu subdominio.
Si habías creado el subdominio con el mismo propósito, recuerda borrarlo para usarlo acá.

Para configurar con archivo de configuración (config.yml) puedes usar un contenido como el siguiente:

yml
tunnel: onedev
credentials-file: /home/you/.cloudflared/YOUR_UUID.json

ingress:
  - hostname: git.domain.co
    service: http://localhost:6610

  - service: http_status:404

YOUR_UUID.json se refiere al id dado por cloudflare para el túnel con el comando cloudflared tunnel create onedev

Luego, en lugar del comando cloudflared tunnel run onedev, podrías ejecutar:

bash
cloudflared tunnel --config config.yml run &

Sin embargo, estableceremos el contenedor de cloudflared ejecutando:

bash
docker run -d \
  --name cloudflared \
  --restart unless-stopped \
  --network host \
  -v ~/wsinit:/root/.cloudflared \
  cloudflare/cloudflared:latest \
  tunnel --no-autoupdate run --token YOUR_TOKEN

Donde YOUR_TOKEN es el token que copias desde el dashboard de Cloudflare Zero Trust, para el túnel respectivo (en Tunnels), con la opción Configure.

Integración con Mailcow

  • Podrías usar el email de Mailcow para notificaciones en OneDev.
  • Si quieres SSO o algo avanzado, OneDev soporta OAuth2/LDAP, pero no es necesario al inicio.

Así tendrás OneDev corriendo. Prueba crear un proyecto de prueba y un pipeline CI/CD simple.