docker-dev/gitea/gitea.md
2024-11-22 01:04:15 +01:00

5.9 KiB

Estructura inicial del proyecto

gitea $ tree -a
.
├── docker-compose.override.yml
├── docker-compose.yml
└── .env  

Nota autor: algunos de los datos quizas son ofuscados/ocultos en este reporte. Este documento es solo a modo de referencia para despliegue de esta aplicación docker aquí compartida.

Definicion de los contenedores Docker

En este despliegue se utiliza junto a la definición del docker-compose.yml, el fichero .env y docker-compose.override.yml para que se permita el despliegue de la misma aplicación en diferentes entornos (ejemplo: entorno desarrollo, pruebas, producción, etc).

Archivo .env

Variables de entorno referenciadas en los archivos YAML. Archivo: .env

VAR=VALUE
...

Archivo docker-compose.yml

Archivo principal para definir los servicios de tu aplicación. Archivo: docker-compose.yml

---
## version: '3.9'

networks:
  my_net:
    external: false

services:
  my_service:
    image: ${GITEA_IMAGE}
    container_name: ${CONTAINER_NAME}
    restart: always
    networks:
      - my_net
    volumes:
      - ${TIMEZONE_FILE}:${TIMEZONE_FILE_CONTAINER}
      - ${LOCALTIME_FILE}:${LOCALTIME_FILE_CONTAINER}
    ports:
      - "${GITEA_HTTP_EXPOSE}:${GITEA_HTTP_CONTAINER}"
    depends_on:
      - my_db

  my_db:
    image: ${RDBMS_IMAGE}
    restart: always

    networks:
      - my_net

Archivo docker-compose.override.yml

Útil para ajustar configuraciones según el entorno (desarrollo, prueba, producción). Archivo: docker-compose.override.yml

---
## version: '3.9'
services:
  my_service:
    environment:
      - USER_UID=${GITEA_UID}
      - USER_GID=${GITEA_GID}
      - GITEA__database__DB_TYPE=${RDBMS}
      - GITEA__database__HOST=my_db:${RDBMS_PORT}
      - GITEA__database__NAME=${DB_NAME}
      - GITEA__database__USER=${DB_USER}
      - GITEA__database__PASSWD=${DB_PASSWD}
    volumes:
      - ${GITEA_PATH_HOST}:${GITEA_PATH_CONTAINER}
      - .../.ssh/:${GITEA_SSH_PATH_CONTAINER}

    ports:
      - "${GITEA_SSH_EXPOSE}:${GITEA_SSH_CONTAINER}"
      - "${GITEA_IP_SSH_EXPOSE}:${GITEA_SSH_CONTAINER}"

  my_db:
    environment:
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWD}
      - POSTGRES_DB=${DB_NAME}
    volumes:
      - ${POSTGRES_VOL_PATH_HOST}:${POSTGRES_PATH_CONTAINER}

Ejecución y configuración

Configuración autenticación ssh - Docker Shell (with authorized_keys)

Referencia principal: Installation with Docker - Docker Shell (with authorized_keys).

Configuración usario para el contenedor Gitea

En el host motor de Docker se realizan las siguientes tareas de configuración. Estas son:

source .env 
export CONTAINER_NAME GITEA_ACCOUNT GITEA_UID GITEA_GID
sudo groupadd -g ${GITEA_UID} ${GITEA_ACCOUNT} 
sudo useradd -u ${GITEA_UID} -g ${GITEA_GID} -G docker -d /home/${GITEA_ACCOUNT} ${GITEA_ACCOUNT}
#sudo usermod -G docker -a ${GITEA_ACCOUNT}
sudo -u ${GITEA_ACCOUNT} ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"

sudo -u ${GITEA_ACCOUNT} cat /home/${GITEA_ACCOUNT}/.ssh/id_rsa.pub | sudo -u ${GITEA_ACCOUNT} tee -a /home/${GITEA_ACCOUNT}/.ssh/authorized_keys
sudo -u ${GITEA_ACCOUNT} chmod 600 /home/${GITEA_ACCOUNT}/.ssh/authorized_keys

cat <<EOF | sudo tee /home/${GITEA_ACCOUNT}/docker-shell
#!/bin/sh
/usr/bin/docker exec -i -u ${GITEA_ACCOUNT} --env SSH_ORIGINAL_COMMAND="\$SSH_ORIGINAL_COMMAND" ${CONTAINER_NAME} sh "\$@"
EOF
sudo chmod +x /home/${GITEA_ACCOUNT}/docker-shell
sudo usermod -s /home/${GITEA_ACCOUNT}/docker-shell ${GITEA_ACCOUNT}

# id ${GITEA_ACCOUNT} # <-- el usuario git sobre el host anfitrion debe poder ejecutar docker para esta configuración funcione (es el usuario que redirecciona la conexión ssh al propio contenedor de Gitea).
##$ id  ${GITEA_ACCOUNT}
##  uid=...(git) gid=...(git) groups=...(git),...(docker)

Revisar/ajustar estructura

mkdir -pv data/{gitea,postgres}

Estructura actual (sugerida)

gitea]$ tree -a
.
├── data                # Carpeta para los volúmenes persistentes
│   ├── gitea
│   └── postgres
├── docker-compose.override.yml
├── docker-compose.yml
├── .env
└── gitea.md

Iniciar los contenedores

docker compose up -d

Instalar Gitea

Acceder a: http://localhost:<$GITEA_HTTP_PORT_EXTERNAL> e instalar Gitea

Gitea - instalación

Registrar usuario y copiar credenciales

En esta sección se registra un usuario y se copia su clave pública.

Registrar usuario

Gitea - registrar usuario

Usuario logado - setting

Account user - settings

Setting - copiar clave pública

Account user - add key

Utilización de Gitea

En las siguientes capturas se muestran ejemplo como copiar/clonar dos repositorios que el usuario userdevel1. Uno mediante el URL sobre http y el otro mediante ssh.

  • git clone http://almalinux9-docker:3000/usrdevel1/repositorio1.git

git clone http

  • git clone git@almalinux9-docker:usrdevel1/repo-2.git

git clone ssh

Otros comandos

  • Ver los logs
docker-compose logs -f

Resumen: explicación de la configuración

  • .env

    • Centraliza las credenciales y configuraciones sensibles.
  • docker-compose.yml

    • Define los servicios principales, como Postgres y Gitea (Nginx), con configuraciones básicas, en contenedores separados.
  • docker-compose.override.yml

    • Extiende o reemplaza configuraciones para propósitos específicos, como desarrollo o debug.
  • Volúmenes

    • La base de datos de Postgres en ubica en ...data/postgres.
    • El servicio o aplicación Gitea se persiste en ...data/gitea.
    • También se utilizan otros volumenes, como el de las credenciales.