Tené el control total de tu código: Cómo desplegar Gitea
Si querés tener el control total de tu código y montar una solución on-premise o en la nube, que sea liviana, gratuita y que tengan muchas funcionalidades. Gitea y este artículo es para vos.
Algunas veces, por preferencias personales, corporativas o simplemente para tener el 100% de control sobre nuestro código, podemos elegir tener un servidor GIT propio, ya sea hosteado en nuestras premisas o en la nube.
Hay varias opciones en la vuelta, pero hoy te voy a mostrar cómo desplegar una en particular. Esta solución se llama Gitea, es un proyecto que particularmente creo que esta muy bueno, es una solución muy pero muy liviana y creo que no tiene nada que envidiarle al resto de las soluciones.
Haceme un té
Podríamos decir que Gitea se puede desplegar de dos maneras, una, que involucra solo su instalación y aloja todo en una base de datos SQLite u otra sumando una base de datos "externa", como PostgreSQL. Una u otra va a depender del tamaño de tus repositorios, usuarios, configuraciones, etc.
Para este caso, voy a recomendar ir con la solución en donde desplegamos Gitea con PostgreSQL, no porque no confíe en SQLite, sino que al tener una base de datos "externa" podemos ir escalando en uso sin tener que preocuparnos por la base de datos embebida que puede o no romperse, además que resultaría mucho más sencillo hacer backup de esa base de datos.
Primero, vamos a crear una red para que tanto PostgreSQL y Gitea puedan verse y comunicarse.
$ docker network create gitea
La terminal nos va a responder con algo como esto:
6963d2e8668347660a98d5958a68c6d6371f176e419b8ece1825ffc8a061dfaf
Luego, vamos a usar este archivo docker-compose.yml, al que debemos modificar de acuerdo a nuestras preferencias, en mi caso, quedó más o menos así:
version: "3"
services:
server:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- DB_TYPE=postgres
- DB_HOST=db:5432
- DB_NAME=gitea
- DB_USER=gitea
- DB_PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- db
db:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea
- POSTGRES_DB=gitea
networks:
- gitea
volumes:
- ./postgres:/var/lib/postgresql/data
networks:
gitea:
external: true
En este caso, fijense que vamos a crear el servidor de Gitea, en donde le pasamos algunas variables de entorno para que apuntemos a la base de datos para no tener que configurarla manualmente después, montamos ciertos volúmenes también, uno para salvar la data que genere la aplicación. Otra cosa importante es la publicación de puertos, Gitea trabaja con el 3000, podemos exponer ese u otro, pero siempre hay que mapearla al 3000. Lo mismo con el puerto SSH.
Del lado del PostgreSQL, no necesitamos exponer hacia afuera un puerto ya que solo vamos a consumir de esa base desde adentro, si lo que tenemos que especificar es un volumen para no perder la data de la base y las variables de entorno para que nos cree la base de datos, usuario y contraseña.
Algo importante para tener en cuenta es que estamos especificando lo siguiente:
depends_on:
- db
Esto, se usa para esperar a que la base de datos arranque antes de arrancar la aplicación. No solo se usa en esta solución, también podemos usar el depends_on para cualquier aplicación que dependa de otra para funcionar.
Una vez que tenemos definido todo, vamos a guardar el docker-compose.yml y vamos a correr:
$ docker-compose up -d
Si no tenés las imágenes, descargadas, se van a descargar desde Docker Hub y cuando se crea todo, se va a ver algo así:
Pulling db (postgres:latest)...
latest: Pulling from library/postgres
bb79b6b2107f: Already exists
e3dc51fa2b56: Pull complete
f213b6f96d81: Pull complete
2780ac832fde: Pull complete
ae5cee1a3f12: Pull complete
95db3c06319e: Pull complete
475ca72764d5: Pull complete
8d602872ecae: Pull complete
c4fca31f2e3d: Pull complete
a00c442835e0: Pull complete
2e2305af3390: Pull complete
6cff852bb872: Pull complete
25bb0be11543: Pull complete
4738c099c4ad: Pull complete
Digest: sha256:8f7c3c9b61d82a4a021da5d9618faf056633e089302a726d619fa467c73609e4
Status: Downloaded newer image for postgres:latest
Pulling server (gitea/gitea:latest)...
latest: Pulling from gitea/gitea
df20fa9351a1: Already exists
5d82165d8bd6: Pull complete
fe5e827ead58: Pull complete
3b57e94f7927: Pull complete
b538d45de661: Pull complete
7e1e9d6de25a: Pull complete
Digest: sha256:25bbd604f2f6257b278d6492bd9c02d830d5e511ba8ad517b2b5b0f940a16a41
Status: Downloaded newer image for gitea/gitea:latest
Creating gitea_db_1 ... done
Creating gitea ... done
Si corremos un docker ps, vamos a ver que nuestros contenedores están corriendo:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
472a7e1c4b4b gitea/gitea:latest "/usr/bin/entrypoint…" 21 seconds ago Up 20 seconds 0.0.0.0:3000->3000/tcp, 0.0.0.0:222->22/tcp gitea
9c72d0d9849e postgres:latest "docker-entrypoint.s…" 21 seconds ago Up 20 seconds 5432/tcp gitea_db_1
Vamos a apuntar nuestros browsers a localhost:3000 o a la IP de vuestro Docker host:3000 y veremos la pantalla de instalación de Gitea.
Noten que ya tiene toda la configuración pre cargada, ahora solo debemos darle un click en Instalar Gitea, va a hacer una magia y lo próximo que veremos será la pantalla de Login con una bienvenida:
Ahora bien, seguramente te preguntarás, cuál es el usuario y contraseña por defecto y mi respuesta es, no hay. Lo que hay que hacer es darle un clic a Registro y registrar una nueva cuenta. Esto es mucho muy importante porque el primero que se registre será administrador de Gitea, así que mucho cuidado si esto lo estás montando en algún Cloud Provider.
Una vez creada la cuenta, veremos nuestro Gitea en todo su esplendor:
Para ir cerrando
Como pudiste ver, no es para nada difícil la implementación. Espero que este tutorial te haya gustado y servido para conocer una alternativa para alojar y tener el control total de tu código.
Como siempre, cualquier duda o consulta, no duden en dejar un comentario.