2.0 KiB
2.0 KiB
OpenCode Web UI
Este stack ejecuta OpenCode en un contenedor con aislamiento fuerte para exponerlo solo por HTTPS detras de Traefik + Authentik.
Objetivo
- Dominio:
https://ocode.sherlockhomeless.net - Acceso: solo usuarios autorizados en Authentik
- Aislamiento: sin privilegios, filesystem raiz de solo lectura y workspace dedicado
Archivos
- Compose:
opencode/docker-compose.yml - Variables:
opencode/.env(copiar desdeopencode/.env.example) - Middleware Traefik (inyecta
Authorization):/opt/traefik/dynamic/opencode-auth.yml
Despliegue en contenedor
cp opencode/.env.example opencode/.env
mkdir -p /opt/opencode/home /opt/opencode/config /opt/opencode/workspace
docker compose --env-file opencode/.env -f opencode/docker-compose.yml up -d
Para SSO directo (sin segundo login de OpenCode), crea tambien este middleware dinamico en Traefik:
http:
middlewares:
opencode-inject-auth:
headers:
customRequestHeaders:
Authorization: "Basic <base64(usuario:password-opencode)>"
El router sandboxed usa la cadena ths-authentik@docker,opencode-inject-auth@file, asi Authentik valida al usuario y Traefik pasa despues la cabecera Basic al backend.
Endurecimiento aplicado
user: 1000:1000cap_drop: [ALL]security_opt: [no-new-privileges:true]read_only: true/tmpentmpfsconexec, necesario para que Bun/OpenCode cargue librerias temporales- Home persistente aislada en
/opt/opencode/home - Workspace aislado en
/opt/opencode/workspace, montado dentro de la home como/home/opencode/workspace - Sin
docker.sockni montajes del host fuera de los paths definidos
Authentik (acceso solo a esta app)
En Authentik, ocode.sherlockhomeless.net necesita su propio Proxy Provider publicado en el authentik Embedded Outpost.
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.