fix(opencode): retire legacy host route

This commit is contained in:
Eduardo David Paredes Vara
2026-07-25 11:22:13 +00:00
parent aaf50e5af7
commit 10d2a301e0
8 changed files with 21 additions and 164 deletions
+3 -57
View File
@@ -4,8 +4,7 @@ Este stack ejecuta OpenCode en un contenedor con aislamiento fuerte para exponer
## Objetivo
- Dominio sandboxed: `https://ocode.sherlockhomeless.net`
- Dominio clasico host/systemd: `https://opencode.sherlockhomeless.net`
- Dominio: `https://ocode.sherlockhomeless.net`
- Acceso: solo usuarios autorizados en Authentik
- Aislamiento: sin privilegios, filesystem raiz de solo lectura y workspace dedicado
@@ -14,7 +13,6 @@ Este stack ejecuta OpenCode en un contenedor con aislamiento fuerte para exponer
- Compose: `opencode/docker-compose.yml`
- Variables: `opencode/.env` (copiar desde `opencode/.env.example`)
- Middleware Traefik (inyecta `Authorization`): `/opt/traefik/dynamic/opencode-auth.yml`
- Config de legado host/systemd: `opencode/systemd/` y `opencode/traefik/opencode.yml`
## Despliegue en contenedor
@@ -50,58 +48,6 @@ El router sandboxed usa la cadena `ths-authentik@docker,opencode-inject-auth@fil
## Authentik (acceso solo a esta app)
En Authentik, cada dominio necesita su propio `Proxy Provider` publicado en el `authentik Embedded Outpost`:
En Authentik, `ocode.sherlockhomeless.net` necesita su propio `Proxy Provider` publicado en el `authentik Embedded Outpost`.
1. Provider/app para `ocode.sherlockhomeless.net` (sandboxed).
2. Provider/app independiente para `opencode.sherlockhomeless.net` (clasico).
3. Ambos providers deben estar anadidos al `authentik Embedded Outpost`.
4. Para aislar el acceso sandboxed, crea un grupo exclusivo, por ejemplo `opencode-ocode-users`.
5. Crea una `Policy Binding` para la app sandboxed que permita solo ese grupo.
6. Crea el usuario del colega y anadelo solo a `opencode-ocode-users`.
7. No lo anadas a grupos con acceso a otras aplicaciones.
Si el clasico devuelve una pagina `Not Found` de Authentik, normalmente significa que el provider de `opencode.sherlockhomeless.net` no esta asociado al outpost o fue sustituido por el provider de `ocode.sherlockhomeless.net`.
## Arquitectura de modelos LLM
Hay dos instancias de OpenCode con modelos distintos:
| Instancia | Tipo | Modelos |
|-------------------------------|-------------- |----------------------------|
| `opencode.sherlockhomeless.net` | Host (systemd) | DeepSeek + **Gemma 4** (Ollama) |
| `ocode.sherlockhomeless.net` | Contenedor | Solo DeepSeek (colega) |
El contenedor sandboxed (`ocode`) **no** usa Ollama ni Gemma 4. Sus modelos ya estan configurados via `DEEPSEEK_API_KEY` en su `.env`.
### Modelos Gemma 4 via Ollama (para el host OpenCode)
Ollama corre en contenedor expuesto en `127.0.0.1:11434` (solo localhost).
```bash
cp ollama/.env.example ollama/.env
mkdir -p /opt/ollama/data
docker compose --env-file ollama/.env -f ollama/docker-compose.yml up -d
```
Pull de modelos:
```bash
docker exec -it ollama ollama pull gemma4:e2b # modelo principal
docker exec -it ollama ollama pull gemma4:e4b # opcional si e2b no basta
```
Activar provider en el OpenCode del host:
```bash
sudo install -m 0644 opencode/opencode.json.example /home/felidae/.config/opencode/opencode.json
sudo systemctl restart opencode-web
```
Modelos recomendados para este VPS (8 vCPU, 22 GiB RAM, sin GPU):
| Modelo | RAM aprox | Uso |
|------------- |---------- |--------------------- |
| `gemma4:e2b` | ~3-4 GiB | Modelo principal |
| `gemma4:e4b` | ~5-6 GiB | Solo si e2b no basta |
| `gemma4:26b` | ~16 GiB | No recomendable |
| `gemma4:31b` | ~20 GiB | No recomendable |
Para aislar el acceso, crea un grupo exclusivo, por ejemplo `opencode-ocode-users`, y una `Policy Binding` que permita solo ese grupo. El contenedor usa los modelos configurados mediante `DEEPSEEK_API_KEY` en su `.env`.