Skip to content

CH 27 · Opciones de despliegue

Recuento de palabras~4,210 palabrasTiempo~25 minRequisitosCH 03, CH 05NivelReproducible

Objetivo del capítulo

Has estado usando dsh web localmente para ejecutar dsh — esa es la forma más común, pero no la única. dsh tiene principalmente cuatro formas de ejecutarse, cada una adecuada para diferentes escenarios:

  • Web UI local: lo que los tutoriales anteriores han estado demostrando
  • CLI headless: no necesita interfaz, un solo comando ejecuta una tarea y sale, adecuado para scripts y CI
  • Python SDK: incrusta dsh en tu propio programa Python, el Agent se convierte en una llamada a función en tu código
  • Docker containerizado: instala dsh en un contenedor ejecutándose en un servidor, adecuado para compartir en equipo — este capítulo ofrece un tutorial completo de despliegue

Después de leer sabrás: qué forma usar según tus necesidades, en lugar de conocer solo dsh web.

Primero aclarar: por qué dsh tiene múltiples formas

Volviendo al "todo es un plugin" del CH 08 — el núcleo de dsh es @deepseek-ai/dsh-base (adaptador de modelos, herramientas, persistencia, sandbox, aprobación, etc., capacidades de bajo nivel), y apilando diferentes bundles encima se convierte en diferentes formas:

Bundle apiladoSe convierte enCómo iniciar
@deepseek-ai/dsh-web-appWeb UI con interfaz de navegadordsh web
@deepseek-ai/dsh-headlessSin interfaz, línea de comandos ejecutar-y-salirdsh --profile headless "task"
Wrapper del Python SDKIncrustar en programas Pythonpip install deepseek-harness-sdk
Cualquiera de los anteriores contenedorizadoEjecutándose de forma prolongada en un servidordocker compose up -d

Misma base, cuatro formas de llevarla puesto. Esto es "todo es un plugin" una vez más — la forma en sí misma es una combinación de bundles.

Forma uno: Web UI local

Lo que CH 03 a CH 04 han estado demostrando es esto. dsh web para iniciar, el navegador abre http://127.0.0.1:3080, las sesiones, plugins y claves se almacenan localmente.

Adecuado para uso personal diario, depuración de plugins, principiantes. La limitación es que el ordenador debe estar encendido para usarlo — apaga el ordenador y el Agent se detiene, no es adecuado para escenarios que necesiten estar en línea 24/7 o que otros accedan en cualquier momento.

Forma dos: CLI headless

CH 05 ya lo cubrió en la práctica. Sin interfaz, das una tarea, la ejecuta, muestra el resultado, sale.

powershell
dsh --profile headless "Resume el README del directorio actual en tres frases"

Adecuado para scripts, CI/CD, tareas programadas (la del CH 15 que hace scraping de temas candentes de IA cada día usa esto), procesamiento por lotes. No adecuado para escenarios que necesiten diálogo multi-turno.

Un límite: cada llamada headless es una sesión independiente, termina cuando termina. Para reutilizar contexto necesitas el Python SDK, o escribir un traspaso basado en archivos.

Forma tres: Python SDK

Convierte dsh en una librería en código Python, el Agent es una llamada a función. pip install deepseek-harness-sdk para instalar, el SDK viene con un runtime de Node, la máquina objetivo no necesita instalar Node por separado.

python
from deepseek_harness_sdk import DeepSeekHarness

dsh = DeepSeekHarness()
result = dsh.run("Lista los archivos del directorio actual, omite node_modules")
print(result.last_message)

Adecuado para incrustar el Agent en tu propio producto, necesitando control de sesión de grano fino (reutilización, escucha de eventos, salida en streaming), tareas por lotes compartiendo contexto. No adecuado si solo quieres ejecutar rápidamente una tarea (un comando headless es suficiente).

Un detalle: el SDK y la Web UI son dos instancias independientes, no pueden compartir una Web UI en ejecución, cada una tiene su propio DSH_HOME.

Forma cuatro: contenedor Docker (tutorial completo de despliegue)

Instala dsh en un contenedor Docker, ejecutándose en un servidor, adecuado para ejecución prolongada y compartir en equipo.

Antes de ir al servidor, unas palabras: si no tienes servidor, las actividades para nuevos usuarios de Tencent Cloud a menudo tienen servidores ligeros de aplicaciones de bajo costo, apenas más de 100 yuanes al año, más que suficiente para dsh. Además Tencent Cloud ahora admite seleccionar la imagen de DeepSeek Harness directamente al crear instancias, a los que les gusta trastear pueden estudiarla por su cuenta. A continuación se demuestra el flujo completo de despliegue usando un proyecto maduro de código abierto de la comunidad.

deepseek-harness-web-docker empaqueta dsh + Caddy (proxy inverso + autenticación Basic Auth) en un solo contenedor, listo para usar, datos persistidos y auto health-check.

Qué problema resuelve este proyecto

Tres puntos de dolor al usar el dsh web oficial directamente en un servidor:

  1. Sin autenticación — la Web UI de dsh no tiene mecanismo de inicio de sesión por defecto, desplegar en público equivale a correr desnudo
  2. Solo escucha en loopback — por defecto 127.0.0.1, hay que cambiar la configuración para permitir acceso externo
  3. La gestión del entorno es molesta — la versión de Node, las dependencias, los directorios de datos hay que gestionarlos tú mismo

Este proyecto usa Caddy como proxy inverso, añade Basic Auth (inicio de sesión con usuario/contraseña), dsh solo escucha en loopback dentro del contenedor, las peticiones externas deben pasar por la autenticación de Caddy para entrar. Los datos están todos montados en el directorio ./data del host, borra el contenedor y no se pierden datos.

Paso 1: preparar

Un servidor Linux (2 núcleos 2G como mínimo), con el panel BaoTa (BT) instalado. BaoTa AI necesita tener el modelo configurado primero para usarlo — ve al menú izquierdo AI → arriba Settings → haz clic en Add Custom Model, rellena tu API Key del modelo.

Panel BaoTa añadir modelo personalizado

Tras configurar el modelo, BaoTa AI puede ayudarte a ejecutar comandos.

Paso 2: despliegue con un clic de BaoTa AI

Haz clic en AI en el menú izquierdo del panel BaoTa, envíale el siguiente prompt:

text
Ayúdame a desplegar DeepSeek Harness Web Docker, haz esto en orden:
1. Confirma que Docker y Docker Compose estén instalados, instálalos si no
2. La dirección del proyecto es https://github.com/Xidong-AI/deepseek-harness-web-docker
3. Entra en el directorio del proyecto, cp .env.example .env
4. Edita .env: DSH_AUTH_USER=admin, DSH_AUTH_PASSWORD establece una contraseña fuerte, DEEPSEEK_API_KEY etc. dime la ruta del archivo antes de iniciar, lo rellenaré yo mismo
5. docker compose up -d para iniciar
6. Dame un resumen tras la verificación

BaoTa AI te ayudará. Cuando llegue al paso 4, configurará todo en el archivo .env excepto la API Key, y luego te dirá la ruta del archivo para que rellenes DEEPSEEK_API_KEY tú mismo:

BaoTa AI pide rellenar la API Key del .env

Tras rellenarla, responde "Done", y la IA continuará con docker compose up -d para iniciar, luego hará la verificación de salud y finalmente te dará un resumen completo:

BaoTa AI verifica el éxito del despliegue

Cuando el estado del contenedor sea healthy y Basic Auth esté en vigor (devuelve 401 sin credenciales), el despliegue es exitoso.

Paso 3: acceso

Abre http://IP-del-servidor:3080 en el navegador, aparecerá un cuadro de inicio de sesión de Basic Auth, introduce el usuario y contraseña que estableciste en .env, y podrás entrar en la Web UI de dsh.

Fíjate que arriba a la izquierda en el navegador aparecerá "Not Secure" — esto es porque el protocolo actual es HTTP, sin certificado SSL, no es un problema de dsh en sí. El despliegue en producción debe vincular un dominio + HTTPS (siguiente paso).

El navegador muestra no seguro

Tras entrar, es igual que usar dsh localmente — elige un workspace, envía mensajes.

Paso 4: vincular un dominio + HTTPS

Los entornos de producción deben vincular un dominio + HTTPS para funcionar correctamente. Si accedes directamente vía http://IP-del-servidor, obtendrás este error al elegir un workspace:

Error crypto.randomUUID al elegir workspace

La razón es que crypto.randomUUID() es una Web API del navegador; el estándar dice que solo está disponible en un contexto seguro — es decir, páginas https://, o localhost/127.0.0.1. Acceder vía http://IP es un contexto inseguro, esta función es undefined, el front-end lanza crypto.randomUUID is not a function en el momento en que crea una sesión o elige un workspace.

Así que vincular un dominio + HTTPS no es una optimización opcional, es obligatorio.

Requisito previo: primero ve a la consola de gestión de tu dominio (Tencent Cloud DNSPod, Alibaba Cloud Wanwang, etc.), añade un registro A para tu dominio, apuntando a la IP pública de tu servidor. Espera unos minutos a que la resolución surta efecto.

Continúa la conversación que acabas de tener (no hace falta iniciar una nueva), envía lo siguiente a BaoTa AI:

text
Ayúdame a vincular un dominio al dsh que acabo de desplegar y solicítale un certificado SSL y configúralo por mí
1. El dominio es tu-dominio, ya está resuelto a este servidor
2. Verifica que https://tu-dominio sea accesible, dime el resultado

BaoTa AI modificará automáticamente la configuración de Caddy, abrirá puertos, reiniciará el contenedor y solicitará el certificado. Tras completar, visita https://tu-dominio, arriba a la izquierda en el navegador aparecerá el icono del candado, ya no "Not Secure".

El certificado lo emite Let's Encrypt, Caddy lo renovará automáticamente, sin gestión manual.

Mantenimiento continuo

Tras el despliegue, para preguntas diarias simplemente pregunta directamente a BaoTa AI, por ejemplo:

  • "¿Cómo actualizo el contenedor de dsh a la última versión?"
  • "¿Cómo veo los logs de ejecución del contenedor de dsh?"
  • "¿Cómo reinicio el contenedor de dsh?"
  • "¿Cómo hago backup de los datos de dsh?"
  • "El contenedor de dsh está ocupando demasiado espacio en disco, ¿cómo lo limpio?"

Dará los comandos correspondientes según tu entorno real y los ejecutará. Los datos están todos almacenados en ./data/ del directorio del proyecto, borrar el contenedor o actualizar la imagen no perderá los datos; para hacer backup, basta con copiar todo el directorio ./data.

Qué herramientas se pueden instalar en el contenedor

El contenedor viene con node 22, pnpm, python3, git, curl, jq, ripgrep, make/gcc (para compilar módulos nativos), Rust y otras herramientas comunes preinstaladas. El Agent también puede usar x-cmd para instalar más herramientas por sí mismo (sin necesidad de root), los datos instalados también están en ./data, sobreviven a reinicios.

Notas

  1. La versión actual de dsh no tiene aislamiento multiusuario — todos usan el mismo Basic Auth para iniciar sesión y ven la misma sesión y configuración. Cuando lo comparta el equipo, no almacenes información sensible, o que cada persona despliegue una instancia independiente.
  2. No hardcodes la API Key en compose — usa un archivo .env, el proyecto ya lo tiene en gitignore.
  3. El Agent trabaja dentro del contenedor — lo que ve es el sistema de archivos dentro del contenedor, no el de tu servidor. Para que opere sobre un directorio de tu servidor, necesitas añadir un montaje de volumen en docker-compose, mapeando el directorio del host dentro del contenedor.
  4. Cambiar contraseña: edita DSH_AUTH_PASSWORD en .env, luego docker compose up -d, el contenedor regenerará automáticamente el hash al iniciar.

Cómo elegir: una tabla

Tu necesidadElige cuálPor qué
Abrir un navegador cada día para trabajar con el AgentWeb UI localInterfaz intuitiva, puedes ver la trajectory y aprobar
Incrustar en scripts / CI / tareas programadasHeadless CLIUn comando, ejecutar-y-salir
Incrustar el Agent en tu propio programaPython SDKLlamada a nivel de función, puedes controlar la sesión y los eventos
Servidor ejecución prolongada / compartir en equipoDockerDespliegue containerizado, auto restart, datos montados
Tareas por lotes necesitan contexto compartidoPython SDKheadless es una sesión independiente por llamada, el SDK puede reutilizar

Una sugerencia práctica: la mayoría de la gente puede empezar simplemente con la Web UI local. Cuando necesites automatización, añade headless; cuando necesites incrustar en un producto, añade SDK; cuando necesites ir a un servidor, usa Docker. No hace falta configurar las cuatro desde el inicio — el beneficio de dsh es cambiar bajo demanda, la base es el mismo conjunto de cosas.

Lo que aprendiste en este capítulo

Apruebas si puedes completar los puntos siguientes:

  • [ ] Sabes que dsh tiene cuatro formas de despliegue: Web UI local, Headless CLI, Python SDK, Docker
  • [ ] Conoces los métodos de inicio y los escenarios aplicables de las cuatro formas
  • [ ] Puedes elegir la forma adecuada según las necesidades — en lugar de conocer solo dsh web
  • [ ] Sabes que cada llamada Headless es una sesión independiente, para reutilizar contexto usa SDK
  • [ ] Sabes que el Python SDK viene con un runtime de Node, y es una instancia independiente de la Web UI
  • [ ] Puedes usar el proyecto deepseek-harness-web-docker para desplegar dsh con Basic Auth en un servidor
  • [ ] Puedes vincular un dominio + HTTPS al dsh desplegado (certificado automático de Caddy)
  • [ ] Conoces las notas del despliegue Docker: sin aislamiento multiusuario, claves en .env, diferencias de ruta dentro del contenedor

Open Source · MIT · Community Driven