---
title: Docker Compose
description: Ejecuta Human Plugin en un único host con Docker Compose, conectado a tu base de datos PostgreSQL.
canonical: https://developer.unico.io/es/human-plugin/self-hosting/docker-compose
locale: es
generated_by: markdown-export
---

# Docker Compose

Un contenedor de Human Plugin en un host, conectado a tu base de datos PostgreSQL.

## Requisitos previos

- Docker Engine 24 o superior con Docker Compose v2.
- Una base de datos PostgreSQL dedicada a Human Plugin, accesible desde el host. Consulta [Requisitos previos y acceso](/es/human-plugin/get-started/prerequisites).
- Las credenciales del registry y la clave de acceso que entrega Unico.

## 1. Inicia sesión en el registry

Una vez por host. Docker guarda la credencial en `~/.docker/config.json`.

```bash
echo "<token>" | docker login pkg.unico.run -u <username> --password-stdin
```

## 2. Escribe la configuración

Crea un directorio para Human Plugin y un archivo `.env` legible solo por su propietario:

```bash
mkdir -p /opt/human-plugin && cd /opt/human-plugin
```

```bash title=".env"
HUMAN_API_ACCESS_KEY=<your access key>
POSTGRES_ADDRESS_HOST=<database host>
POSTGRES_USER=human_plugin
POSTGRES_PASSWORD=<database password>
```

```bash
chmod 600 .env
```

Agrega `POSTGRES_ADDRESS_PORT`, `POSTGRES_DATABASE` o `POSTGRES_SSL_MODE` solo si tu base de datos difiere de los valores predeterminados de [Configuración](/es/human-plugin/self-hosting/configuration). Nunca hagas commit del archivo `.env`.

## 3. Escribe `compose.yaml`

```yaml title="compose.yaml"
services:
  human-plugin:
    image: pkg.unico.run/human-plugin-api:latest
    pull_policy: always
    restart: unless-stopped
    stop_grace_period: 60s
    env_file: .env
    ports:
      - "127.0.0.1:8080:8080"
```

- **`ports`:** publica solo en `127.0.0.1` o en una interfaz privada, nunca en `0.0.0.0`. Human Plugin no tiene autenticación propia: consulta [Redes y seguridad](/es/human-plugin/self-hosting/networking-and-security).
- **`stop_grace_period: 60s`:** al detenerse, Human Plugin espera hasta 55 segundos a que terminen las solicitudes en curso. Un periodo de gracia más corto puede interrumpir una creación.
- **`pull_policy: always`:** cada `up` busca la imagen más reciente, de modo que siempre ejecutas la última versión.

## 4. Inicia

```bash
docker compose up -d
```

```bash
curl --fail http://127.0.0.1:8080/health/ready
```

Dirige tráfico a Human Plugin solo después de que `/health/ready` responda `200`. Luego ejecuta contra él la solicitud de creación del [Quickstart](/es/human-plugin/get-started/quickstart#3-create-a-process).

## Logs y estado

```bash
docker compose ps
```

```bash
docker compose logs -f human-plugin
```

Un arranque correcto termina con la línea `human plugin listening`. Consulta [Salud y monitoreo](/es/human-plugin/self-hosting/health-and-monitoring#logs) para ver el log de arranque completo. Si el contenedor se reinicia en bucle, el log indica el motivo: consulta [Solución de problemas](/es/human-plugin/additional-resources/troubleshooting).

## Actualizar

```bash
docker compose pull && docker compose up -d
```

Compose reemplaza el contenedor solo cuando la imagen cambió. Consulta [Operaciones](/es/human-plugin/self-hosting/operations) para saber qué verificar después de una actualización.

## Detener

```bash
docker compose down
```

Tus datos están en tu base de datos PostgreSQL, así que detener o eliminar el contenedor no pierde nada.