Monta tu Plataforma de Desarrollo Colaborativo: Gitea + Drone + Minio en Docker Compose

Monta tu Propio GitHub: Plataforma de Desarrollo Colaborativo con Gitea, Drone CI y Minio usando Docker Compose

¿Has soñado alguna vez con tener tu propia plataforma tipo GitHub, pero además con integración continua y almacenamiento de artefactos, todo bajo tu control y fácil de desplegar en tu VPS? Hoy vamos a montar un stack completo con Gitea (repositorios Git con interfaz web), Drone CI (automatización de pipelines) y Minio (compatible con S3 para almacenar tus binarios y backups). Todo self-hosted, seguro, práctico… ¡y en unos minutos gracias a Docker Compose!

¿Para qué sirve este stack?

  • Gitea: la alternativa ligera a GitHub, para gestión de repositorios, issues y code reviews.
  • Drone: automatiza tests, builds y despliegues con pipelines YAML.
  • Minio: crea tu propio “Amazon S3”, para guardar artefactos de CI, imágenes, backups, lo que quieras.

Gitea
Drone
Minio

¿Por qué Docker Compose?

Docker Compose te permite lanzar y gestionar aplicaciones multicontenedor de manera declarativa, rápida y reproducible, desde desarrollo hasta producción. Es la clave para tener el stack listo en minutos y gestionarlo cómodamente en tu VPS o servidor casero.
¡Un comando y a programar!

El docker-compose.yml definitivo 🧩

Crea un directorio, guarda el siguiente contenido en un archivo docker-compose.yml y modifícalo a tu gusto (ajusta contraseñas y secretos):


version: '3.8'
services:

  gitea:
    image: gitea/gitea:1.22.0
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - DB_TYPE=sqlite3
    restart: always
    volumes:
      - ./gitea-data:/data
    ports:
      - "3000:3000"
      - "222:22"
    depends_on:
      - minio

  drone-server:
    image: drone/drone:2.21.0
    container_name: drone-server
    environment:
      - DRONE_GITEA_SERVER=http://gitea:3000
      - DRONE_GITEA_CLIENT_ID=gitea-client-id       # Reemplaza tras crear OAuth app
      - DRONE_GITEA_CLIENT_SECRET=supersecret       # Reemplaza tras crear OAuth app
      - DRONE_RPC_SECRET=ultrasecretorandom
      - DRONE_SERVER_HOST=drone.yourdomain.com
      - DRONE_SERVER_PROTO=http
      - DRONE_LOGS_PRETTY=true
      - DRONE_USER_CREATE=username:admin,admin:true
      - DRONE_MINIO_ENDPOINT=minio:9000
      - DRONE_MINIO_BUCKET=drone-ci
      - DRONE_MINIO_ACCESS_KEY=droneuser
      - DRONE_MINIO_SECRET_KEY=dronepass
    ports:
      - "8088:80"
    depends_on:
      - gitea
      - minio
    volumes:
      - ./drone-data:/data

  drone-runner:
    image: drone/drone-runner-docker:1.8.3
    container_name: drone-runner
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=drone-server:80
      - DRONE_RPC_SECRET=ultrasecretorandom
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RUNNER_NAME=runner1
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - drone-server

  minio:
    image: minio/minio:RELEASE.2024-07-30T00-00-00Z
    container_name: minio
    command: server /data
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      - MINIO_ROOT_USER=droneuser
      - MINIO_ROOT_PASSWORD=dronepass
    volumes:
      - ./minio-data:/data

¿Qué hace cada servicio?

  • gitea: expone la web en localhost:3000 y el SSH git en 222.
  • drone-server: la web de CI está en 8088 (puedes poner HTTPS con un proxy).
  • drone-runner: ejecuta los pipelines usando Docker.
  • minio: S3 web UI en 9001 y API S3 en 9000.

Primeros pasos tras el docker compose up

  1. Accede a Gitea, crea un usuario admin y después una OAuth app para Drone. Ajusta la DRONE_GITEA_CLIENT_ID y _SECRET en tu compose.
  2. Entra a Minio localhost:9001 (droneuser/dronepass), crea el bucket drone-ci.
  3. Accede a Drone CI en localhost:8088 y termina setup.
  4. Haz git push a Gitea y disfruta de CI y almacenamiento privado.

Consejos y troubleshooting

  • Proxy Reverso: Protege con HTTPS usando Nginx Proxy Manager u otro proxy. Redirige los puertos públicos.
  • Persistencia: Todos los datos (repos, builds, artefactos) persisten en carpetas. ¡Haz backups!
  • Actualizaciones: Actualiza imágenes periódicamente (docker compose pull && docker compose up -d).
  • Errores típicos: Si Drone no enlaza con Gitea, verifica las URLs, los secretos y que Gitea acepte callbacks.
  • Recursos: Está probado en VPS básicos desde 2GB RAM y 2vCPU. Puedes ajustar la capacidad del runner.

¡Ya está! 🚀

En menos de 20 minutos tienes tu propia plataforma de desarrollo profesional, con todo el flujo moderno: código, CI/CD y almacenamiento de artefactos privado. ¡Ideal para equipos pequeños, proyectos personales o makers que adoran el control total y el software libre!

¿Te animas a tunearlo? ¡Cuéntame cómo lo usarías en los comentarios!

Avatar

Por Mid