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.
¿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 en222
. - 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 en9000
.
Primeros pasos tras el docker compose up
- 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. - Entra a Minio localhost:9001 (
droneuser/dronepass
), crea el bucketdrone-ci
. - Accede a Drone CI en localhost:8088 y termina setup.
- 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!