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

220 lines
5.9 KiB
Markdown

# Estructura inicial del proyecto
```bash
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
```bash
VAR=VALUE
...
```
## Archivo docker-compose.yml
Archivo principal para definir los servicios de tu aplicación.
Archivo: docker-compose.yml
```yaml
---
## 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
```yaml
---
## 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](https://docs.gitea.com/installation/install-with-docker#docker-shell-with-authorized_keys) - 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
```bash
mkdir -pv data/{gitea,postgres}
```
### Estructura actual (sugerida)
```bash
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](images/gitea-install.png)
## 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](images/gitea-register-account.png)
### Usuario logado - setting
![Account user - settings](images/gitea-account-settings.png)
#### Setting - copiar clave pública
![Account user - add key](images/gitea-add-key.png)
### 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](images/git-gitea-clone-w-http.png)
- `git clone git@almalinux9-docker:usrdevel1/repo-2.git`
![git clone ssh](images/git-gitea-clone-w-ssh.png)
## Otros comandos
- Ver los logs
```bash
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.