---
title: Docker Compose
description: 고객의 PostgreSQL 데이터베이스를 사용해 Docker Compose로 단일 호스트에서 Human Plugin을 실행합니다.
canonical: https://developer.unico.io/ko/human-plugin/self-hosting/docker-compose
locale: ko
generated_by: markdown-export
---

# Docker Compose

한 호스트에서 실행되는 하나의 Human Plugin 컨테이너를 고객의 PostgreSQL 데이터베이스에 연결합니다.

## 사전 요구 사항

- Docker Compose v2가 포함된 Docker Engine 24 이상.
- 호스트에서 접근할 수 있는, Human Plugin 전용 PostgreSQL 데이터베이스. [사전 요구 사항 및 액세스](/ko/human-plugin/get-started/prerequisites)를 참고하세요.
- Unico에서 받은 레지스트리 자격 증명과 액세스 키.

## 1. 레지스트리에 로그인

호스트마다 한 번만 실행합니다. Docker는 자격 증명을 `~/.docker/config.json`에 보관합니다.

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

## 2. 설정 작성

Human Plugin용 디렉터리와, 소유자만 읽을 수 있는 `.env` 파일을 만듭니다.

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

데이터베이스가 [구성](/ko/human-plugin/self-hosting/configuration)의 기본값과 다른 경우에만 `POSTGRES_ADDRESS_PORT`, `POSTGRES_DATABASE`, `POSTGRES_SSL_MODE`를 추가하세요. `.env` 파일은 절대 커밋하지 마세요.

## 3. `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`:** `127.0.0.1` 또는 프라이빗 인터페이스에만 게시하고, `0.0.0.0`에는 절대 게시하지 마세요. Human Plugin에는 자체 인증이 없습니다. [네트워킹 및 보안](/ko/human-plugin/self-hosting/networking-and-security)을 참고하세요.
- **`stop_grace_period: 60s`:** Human Plugin은 중지될 때 처리 중인 요청을 최대 55초 동안 기다립니다. 유예 시간이 더 짧으면 생성 요청이 중간에 끊길 수 있습니다.
- **`pull_policy: always`:** `up`을 실행할 때마다 최신 이미지를 확인하므로 항상 가장 최신 릴리스를 실행합니다.

## 4. 시작

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

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

`/health/ready`가 `200`으로 응답한 후에만 Human Plugin으로 트래픽을 라우팅하세요. 그런 다음 [빠른 시작](/ko/human-plugin/get-started/quickstart#3-create-a-process)의 생성 요청을 실행해 보세요.

## 로그와 상태

```bash
docker compose ps
```

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

정상적인 시작은 `human plugin listening` 줄로 끝납니다. 전체 시작 로그는 [상태 확인 및 모니터링](/ko/human-plugin/self-hosting/health-and-monitoring#logs)을 참고하세요. 컨테이너가 반복해서 재시작되면 로그에 이유가 표시됩니다. [문제 해결](/ko/human-plugin/additional-resources/troubleshooting)을 참고하세요.

## 업데이트

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

Compose는 이미지가 변경된 경우에만 컨테이너를 교체합니다. 업데이트 후 확인할 사항은 [운영](/ko/human-plugin/self-hosting/operations)을 참고하세요.

## 중지

```bash
docker compose down
```

데이터는 고객의 PostgreSQL 데이터베이스에 있으므로 컨테이너를 중지하거나 삭제해도 잃는 것이 없습니다.