Complete documentation for future sessions

- CLAUDE.md for AI agents to understand the codebase
- GITEA-GUIDE.md centralizes all Gitea operations (API, Registry, Auth)
- DEVELOPMENT-WORKFLOW.md explains complete dev process
- ROADMAP.md, NEXT-SESSION.md for planning
- QUICK-REFERENCE.md, TROUBLESHOOTING.md for daily use
- 40+ detailed docs in /docs folder
- Backend as submodule from Gitea

Everything documented for autonomous operation.

Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hector Ros
2026-01-20 00:36:53 +01:00
commit db71705842
49 changed files with 19162 additions and 0 deletions

313
docs/CONTAINER-REGISTRY.md Normal file
View File

@@ -0,0 +1,313 @@
# Gitea Container Registry - Guía de Uso
El Container Registry de Gitea está habilitado y listo para usar.
---
## 🔐 Credenciales
**Registry URL**: `git.fuq.tv`
**Usuario**: `admin`
**Token**: `7401126cfb56ab2aebba17755bdc968c20768c27`
---
## 🐳 Uso con Docker
### Login
```bash
docker login git.fuq.tv -u admin -p 7401126cfb56ab2aebba17755bdc968c20768c27
# O de forma segura
echo "7401126cfb56ab2aebba17755bdc968c20768c27" | docker login git.fuq.tv -u admin --password-stdin
```
### Formato de Imágenes
```
git.fuq.tv/<owner>/<package-name>:<tag>
```
Ejemplos:
- `git.fuq.tv/admin/aiworker-backend:v1.0.0`
- `git.fuq.tv/admin/aiworker-frontend:latest`
- `git.fuq.tv/aiworker/my-app:v2.1.0`
### Build y Push
```bash
# 1. Build imagen
docker build -t git.fuq.tv/admin/aiworker-backend:v1.0.0 .
# 2. Push al registry
docker push git.fuq.tv/admin/aiworker-backend:v1.0.0
# 3. También tag como latest
docker tag git.fuq.tv/admin/aiworker-backend:v1.0.0 git.fuq.tv/admin/aiworker-backend:latest
docker push git.fuq.tv/admin/aiworker-backend:latest
```
### Pull
```bash
docker pull git.fuq.tv/admin/aiworker-backend:v1.0.0
```
---
## ☸️ Uso en Kubernetes
### Opción 1: Usar ImagePullSecrets (Recomendado)
El secret ya está creado en los namespaces `control-plane` y `agents`:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: aiworker-backend
namespace: control-plane
spec:
template:
spec:
imagePullSecrets:
- name: gitea-registry
containers:
- name: backend
image: git.fuq.tv/admin/aiworker-backend:v1.0.0
```
### Opción 2: Service Account con ImagePullSecrets
```bash
# Patch del service account default
kubectl patch serviceaccount default -n control-plane \
-p '{"imagePullSecrets": [{"name": "gitea-registry"}]}'
# Ahora todos los pods usarán automáticamente el secret
```
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: aiworker-backend
namespace: control-plane
spec:
template:
spec:
# No need to specify imagePullSecrets, uses SA default
containers:
- name: backend
image: git.fuq.tv/admin/aiworker-backend:v1.0.0
```
### Crear Secret en Otros Namespaces
```bash
kubectl create secret docker-registry gitea-registry \
--docker-server=git.fuq.tv \
--docker-username=admin \
--docker-password=7401126cfb56ab2aebba17755bdc968c20768c27 \
-n <namespace>
```
---
## 📦 Ver Packages en Gitea UI
1. Ve a https://git.fuq.tv
2. Login (admin / admin123)
3. Click en tu perfil → **Packages**
4. Verás todas las imágenes subidas
---
## 🚀 CI/CD con Gitea Actions
### Ejemplo .gitea/workflows/build.yml
```yaml
name: Build and Push Docker Image
on:
push:
branches: [main]
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Gitea Registry
uses: docker/login-action@v3
with:
registry: git.fuq.tv
username: admin
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: git.fuq.tv/admin/aiworker-backend
tags: |
type=ref,event=branch
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=sha,prefix={{branch}}-
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=registry,ref=git.fuq.tv/admin/aiworker-backend:buildcache
cache-to: type=registry,ref=git.fuq.tv/admin/aiworker-backend:buildcache,mode=max
```
---
## 🔨 Build Manual (sin Docker daemon)
Si no tienes Docker corriendo localmente, puedes usar **buildah** o **podman**:
```bash
# Con buildah
buildah bud -t git.fuq.tv/admin/myapp:v1.0.0 .
buildah push git.fuq.tv/admin/myapp:v1.0.0
# Con podman
podman build -t git.fuq.tv/admin/myapp:v1.0.0 .
podman push git.fuq.tv/admin/myapp:v1.0.0
```
---
## 🧪 Ejemplo Completo: Backend de AiWorker
### Dockerfile
```dockerfile
FROM oven/bun:1.3.6-alpine
WORKDIR /app
# Dependencies
COPY package.json bun.lockb ./
RUN bun install --production
# Source
COPY src ./src
COPY drizzle ./drizzle
# Run
EXPOSE 3000
CMD ["bun", "src/index.ts"]
```
### Build y Push
```bash
# Build
docker build -t git.fuq.tv/admin/aiworker-backend:v1.0.0 .
# Push
docker push git.fuq.tv/admin/aiworker-backend:v1.0.0
# Tag latest
docker tag git.fuq.tv/admin/aiworker-backend:v1.0.0 git.fuq.tv/admin/aiworker-backend:latest
docker push git.fuq.tv/admin/aiworker-backend:latest
```
### Deploy en K8s
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
namespace: control-plane
spec:
replicas: 2
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
imagePullSecrets:
- name: gitea-registry
containers:
- name: backend
image: git.fuq.tv/admin/aiworker-backend:v1.0.0
ports:
- containerPort: 3000
env:
- name: DB_HOST
value: mariadb.control-plane.svc.cluster.local
- name: REDIS_HOST
value: redis.control-plane.svc.cluster.local
```
---
## 🔄 Actualizar Deployment con Nueva Imagen
```bash
# Opción 1: Set image
kubectl set image deployment/backend backend=git.fuq.tv/admin/aiworker-backend:v1.1.0 -n control-plane
# Opción 2: Rollout restart (usa :latest)
kubectl rollout restart deployment/backend -n control-plane
# Ver progreso
kubectl rollout status deployment/backend -n control-plane
```
---
## 🗑️ Cleanup de Imágenes Viejas
Desde la UI de Gitea:
1. Packages → Select package
2. Versions → Delete old versions
O vía API:
```bash
curl -X DELETE "https://git.fuq.tv/api/v1/packages/admin/container/aiworker-backend/v1.0.0" \
-H "Authorization: token 7401126cfb56ab2aebba17755bdc968c20768c27"
```
---
## 📊 Ventajas del Registry en Gitea
**Integrado** - Mismo sistema que Git
**Autenticación única** - Mismos usuarios
**Sin costos extra** - Ya está incluido
**Storage HA** - Longhorn con 3 réplicas
**TLS automático** - Cert-Manager
**Privado** - No público como Docker Hub
---
## 🎯 Resumen
**Registry**: `git.fuq.tv`
**Login**: `admin / 7401126cfb56ab2aebba17755bdc968c20768c27`
**Formato**: `git.fuq.tv/<owner>/<image>:<tag>`
**K8s Secret**: `gitea-registry` (en control-plane y agents)
**Próximos pasos:**
1. Crear Dockerfile para backend
2. Build imagen
3. Push a `git.fuq.tv/admin/aiworker-backend:v1.0.0`
4. Deploy en K8s