---
title: Docker Compose
description: Execute o Human Plugin em um único host com Docker Compose, usando seu banco de dados PostgreSQL.
canonical: https://developer.unico.io/pt-BR/human-plugin/self-hosting/docker-compose
locale: pt-BR
generated_by: markdown-export
---

# Docker Compose

Um container do Human Plugin em um host, conectado ao seu banco de dados PostgreSQL.

## Pré-requisitos

- Docker Engine 24 ou superior com Docker Compose v2.
- Um banco de dados PostgreSQL dedicado ao Human Plugin, acessível a partir do host. Veja [Pré-requisitos e acesso](/pt-BR/human-plugin/get-started/prerequisites).
- As credenciais do registry e a chave de acesso fornecidas pela Unico.

## 1. Faça login no registry

Uma vez por host. O Docker guarda a credencial em `~/.docker/config.json`.

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

## 2. Escreva as configurações

Crie um diretório para o Human Plugin e um arquivo `.env` legível apenas pelo proprietário:

```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
```

Adicione `POSTGRES_ADDRESS_PORT`, `POSTGRES_DATABASE` ou `POSTGRES_SSL_MODE` somente se seu banco de dados diferir dos valores padrão em [Configuração](/pt-BR/human-plugin/self-hosting/configuration). Nunca faça commit do arquivo `.env`.

## 3. Escreva o `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`:** publique somente em `127.0.0.1` ou em uma interface privada, nunca em `0.0.0.0`. O Human Plugin não tem autenticação própria: veja [Rede e segurança](/pt-BR/human-plugin/self-hosting/networking-and-security).
- **`stop_grace_period: 60s`:** o Human Plugin espera até 55 segundos pelas requisições em andamento ao parar. Um período de tolerância menor pode interromper um create.
- **`pull_policy: always`:** cada `up` verifica a imagem mais recente, então você sempre executa a versão mais recente.

## 4. Inicie

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

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

Direcione tráfego ao Human Plugin somente depois que `/health/ready` responder `200`. Em seguida, execute a requisição de create do [Quickstart](/pt-BR/human-plugin/get-started/quickstart#3-create-a-process) contra ele.

## Logs e status

```bash
docker compose ps
```

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

Uma inicialização saudável termina com a linha `human plugin listening`. Veja [Saúde e monitoramento](/pt-BR/human-plugin/self-hosting/health-and-monitoring#logs) para o log de inicialização completo. Se o container reiniciar em loop, o log informa o motivo: veja [Solução de problemas](/pt-BR/human-plugin/additional-resources/troubleshooting).

## Atualização

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

O Compose substitui o container somente quando a imagem mudou. Veja [Operações](/pt-BR/human-plugin/self-hosting/operations) para saber o que verificar após uma atualização.

## Parada

```bash
docker compose down
```

Seus dados ficam no seu banco de dados PostgreSQL, então parar ou remover o container não perde nada.