Guías para construir y operar agentes de IA
Empieza con un proyecto pequeño, conecta sus herramientas y comprueba sus límites antes de abrirlo a usuarios. Encontrarás código descargable, datos de ejemplo y pruebas que puedes repetir.
Guías, página 5
249 tutoriales, comparativas y checklists para continuar según tu proyecto.

depends_on healthy: el agente no arranca antes que Postgres
Cómo no crashear el bot en el primer segundo: depends_on condition service_healthy, pg_isready y start_period. Distinto del /health del agente. Cifras oficiales Compose, Dockerfile HEALTHCHECK y Postgres 18, curl 3 de septiembre de 2026. Fly y Railway no equivalen a depends_on.

Logging json-file de Docker para un agente IA: max-size o el host muere
Cómo no llenar /var/lib/docker con stdout del bot: logging json-file max-size y max-file en Compose. Distinto de wrangler tail. El driver no rota solo. Techos oficiales Docker json-file, local y none, verificados con curl el 3 de septiembre de 2026.

ulimit nofile para un agente IA: EMFILE no es el modelo
Cómo no quedarte sin file descriptors: ulimits nofile en Compose, sockets a Telegram y a la API, sqlite y logs. Distinto de pids_limit. Un leak de sockets parece un bot mudo. Techos oficiales Docker del 3 de septiembre de 2026.

pids limit para un agente IA: nada de fork bomb en el VPS
Cómo no dejar que un tool spawnée mil node: pids_limit en Compose y docker run. Un agente con tools no es un systemd. 256 pids bastan. Distinto de mem_limit y cpus: es el número de procesos. Docs oficiales del 3 de septiembre de 2026.

cap_drop ALL para un agente IA en Docker
Cómo no dejar NET_ADMIN y SYS_ADMIN en el bot: cap_drop ALL, y no cap_add salvo que un proxy lo pida. Rootfs read-only y USER node no quitan capabilities. Compose cap_drop y docker run --cap-drop=ALL. Docs oficiales del 3 de septiembre de 2026.

Rootfs read-only para un agente IA en Docker
Cómo no dejar que un tool escriba en la imagen: read_only true, tmpfs en /tmp y volumen solo en /data. El sqlite no vive en el overlay. Un agente comprometido no persiste binaries. Compose y docker run, consultado el 3 de septiembre de 2026.

Init y tini en el contenedor del agente IA: PID 1 que reenvía señales
Cómo no dejar zombies ni tragarte el SIGTERM: init true en Compose, docker run --init (tini), ENTRYPOINT con -- en el Dockerfile. Node como PID 1 no recolecta hijos de tools. Fly no trae tini. Un init corto, no un while true.

Restart policy del agente IA: unless-stopped vs crash loop
Cómo no pelearte con el kill switch: restart unless-stopped en Compose, on-failure con tope, Fly auto-restart vs scale 0. Un OOM no debe reiniciar 400 veces. Un deploy tampoco debe dejar el bot apagado para siempre. Política escrita, no el default.

NODE_ENV=production para un agente IA: no dejes development en Fly
Cómo no correr Express en modo debug ni instalar devDependencies en prod: NODE_ENV=production en el runner, no en el stage de build. Vercel/Railway lo setean; Docker tienes que poner el ENV. Un next build con NODE_ENV ya production rompe el compile. Fuentes 3 sep 2026.

Bind 0.0.0.0 y puertos del agente IA en Docker
Cómo no dejar el bot sordo en el contenedor: Node debe escuchar 0.0.0.0, no 127.0.0.1. Compose publica 3000:3000, Fly y Railway mapean el puerto interno. Localhost dentro del box no es el localhost de tu Mac. Healthcheck al mismo bind.

Multi-stage Docker para un agente IA: build gordo, runtime flaco
Cómo no meter compiladores y pnpm store en prod: stage build con devDependencies, stage runtime solo node_modules de prod, COPY --from. La imagen chica arranca más rápido, filtra tools de build y no lleva el .env que ignoraste a medias. Docs Docker multi-stage, 3 sep 2026.

.dockerignore para un agente IA: el .env no va en la imagen
Cómo no hornear TELEGRAM_TOKEN en un layer: .dockerignore, COPY selectivo y build context mínimo. docker history enseña el secreto. Inyecta env en runtime (Railway, Fly, Vercel), no en el build. El digest pineado no salva un COPY de todo el repo.

Usuario no-root en el contenedor del agente IA
Cómo no correr el bot como root: USER en el Dockerfile, uid fijo, volumen con el mismo uid, HEALTHCHECK antes de dropear privilegios, y por qué npm start como PID 1 rompe SIGTERM. Root no hace el modelo más listo; solo agranda el radio de daño.

Pin de imágenes Docker para un agente IA: nada de :latest
Cómo no redeployar un agente distinto al de ayer: pin por digest sha256, no :latest ni node:22. Actions con SHA de actions, no @v4 flotante. Fly y Railway despliegan lo que el tag resuelva hoy. El tag miente; el digest no.

Cron en UTC para un agente IA: Vercel, Workers y Actions
Cómo no mandar el digest a las 3 AM en Guatemala: crons de Vercel, Cloudflare y GitHub Actions corren en UTC. America/Guatemala es UTC−6 todo el año, sin DST. Convierte 9:00 CST a 15:00 UTC y apaga el cron en Preview.

Firmar webhooks del agente IA: Telegram, Slack y GitHub
Cómo no ejecutar un POST anónimo como si fuera Telegram: secret_token de setWebhook, firma Slack v0, HMAC de GitHub y 401 si falta. El token del bot en env no verifica el inbound. Preview usa otro secret. Fuentes oficiales, 3 septiembre 2026.

Límites de CPU de un agente IA: cgroup, Workers y maxDuration
Cómo no confundir RAM llena con CPU throttling: cpu shares de Docker, vCPU de Fly y Railway, 10 ms de Workers Free frente a 30 s Paid, y maxDuration de Vercel que corta el wall clock no el modelo. El 429 del proveedor no es un cgroup.

Disco lleno en un agente IA: volúmenes, sqlite y logs
Cómo no tumbar el bot porque el volumen de 1 GB se llenó de WAL, logs y adjuntos: tamaño de volúmenes en Fly y Railway, logs de Docker que no rotan, y qué hacer cuando sqlite crece más que el disco. Backup copia; esto evita el ENOSPC.