EQVPS

AI 에이전트를 위한 Docker Compose: VPS 한 대의 완전한 자체 호스팅 스택

2026년 9월 6일 · 3 분 읽기 · EQVPS Team

AI 에이전트는 좀처럼 단일 프로세스가 아닙니다. 에이전트 루프 자체가 있고, 기억을 위한 벡터 스토어, 캐시, 보통 상태를 위한 데이터베이스, 그리고 어쩌면 작은 대시보드가 있습니다. 그 각각을 손으로 실행하는 것 — 시작하고, 재부팅 후 다시 올리고, 어느 포트가 무엇인지 기억하는 것 — 은 금세 지겨워집니다. Docker Compose는 그 전체를 한 파일로 기술하고 한 명령으로 실행합니다. 이것은 에이전트를 VPS에 깔끔하게 올리기 위한 복사-붙여넣기 스택입니다.

Docker 없는 배포 버전만 원한다면 AI 에이전트 24/7 실행 가이드가 대신 systemd를 다룹니다. 이 페이지는 컨테이너 네이티브 버전입니다.

스택

전형적인 자체 호스팅 에이전트는 곁에 네 가지를 원합니다: 에이전트 프로세스, Qdrant(벡터 기억), Redis(캐시 / 큐), Postgres(상태). 다음은 그 모두를 실행하고, 내부 서비스를 공개 인터넷에서 떨어뜨려 둔 docker-compose.yml입니다:

# /opt/agent/docker-compose.yml
services:
  agent:
    build: .                      # your agent image (or image: your/agent:latest)
    restart: unless-stopped
    env_file: [.env]              # OPENAI/ANTHROPIC keys etc. — never in this file
    environment:
      QDRANT_URL: http://qdrant:6333
      REDIS_URL: redis://redis:6379
      DATABASE_URL: postgres://agent:${DB_PASSWORD}@postgres:5432/agent
    depends_on: [qdrant, redis, postgres]
    # no ports: — this agent only makes outbound calls. Publish one only if it serves webhooks.

  qdrant:
    image: qdrant/qdrant:latest
    restart: unless-stopped
    volumes: ["qdrant:/qdrant/storage"]   # internal only — not published

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: ["redis-server", "--save", "60", "1"]
    volumes: ["redis:/data"]

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: agent
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: agent
    volumes: ["pg:/var/lib/postgresql/data"]

volumes: { qdrant: {}, redis: {}, pg: {} }

비밀은 .env에 살고, compose 파일에는 두지 않습니다:

# /opt/agent/.env  (chmod 600, never committed)
ANTHROPIC_API_KEY=sk-ant-...
DB_PASSWORD=a-long-random-string

올립니다:

apt update && apt install -y docker.io docker-compose-v2
systemctl enable --now docker
cd /opt/agent && docker compose up -d
docker compose logs -f agent

각 내부 서비스(Qdrant, Redis, Postgres)는 compose 네트워크에서 서비스 이름으로 도달할 수 있습니다 — 어느 것도 인터넷에 공개되지 않습니다. 에이전트는 그 사설 네트워크를 통해 그들과 대화하고, 그 포트 위의 어떤 것도 바깥을 향하지 않습니다.

중요한 세부 사항

정말 우리만의 부분: 에이전트가 자기 머신을 만들 수 있다

EQVPS가 MCP 서버를 제공하므로, 이 스택을 실행하는 에이전트는 스스로 또 다른 깨끗한 VPS를 프로비저닝할 수 있습니다 — 주문하고, root를 얻고, 허물기 — 선불 암호화폐 잔액에서 결제하면서. 새 샌드박스가 필요한 compose 스택은 루프에 사람 없이 하나를 올릴 수 있습니다.

Docker화된 에이전트에 EQVPS를 쓰는 이유

AI 에이전트용 VPS(개요) → · Docker용 VPS → · 에이전트 기억을 위한 벡터 DB 호스팅 →

FAQ

왜 AI 에이전트를 맨 프로세스 대신 Docker Compose로 실행하나요?

에이전트는 좀처럼 프로세스 하나가 아닙니다 — 에이전트 루프에 벡터 스토어, 캐시, 보통 데이터베이스까지입니다. Compose는 스택 전체를 한 파일로 기술하고, 한 명령으로 모두 올리고, 충돌이나 재부팅 시 각 부품을 재시작하며, 내부 서비스(Postgres, Redis, Qdrant)를 사설 네트워크에 두어 당신이 고른 것만 노출합니다. 움직이는 부품이 있는 에이전트를 자체 호스팅하는 가장 깔끔한 방법입니다.

에이전트 스택에는 어떤 요금제가 필요한가요?

API 기반 에이전트(모델은 제공자 쪽에서 실행)라면 스택이 가볍습니다 — 에이전트 루프, Qdrant, Redis, Postgres가 저희 Small(월 $8)이나 AI-Agent 요금제(월 $10, 4 GB)에 넉넉히 들어갑니다. 큰 벡터 인덱스를 메모리에 유지하거나 로컬 모델을 돌릴 때만 더 많은 RAM이 필요하며, 그것은 다르고 더 무거운 구성입니다.

API 키는 어디에 두나요 — compose 파일에?

아니요. 비밀은 .env 파일(git 무시)에 두고 compose에서 환경 변수로 참조하거나 Docker secrets를 쓰세요. 키를 절대 docker-compose.yml에 커밋하지 마세요. 내부 서비스는 compose 네트워크에만 바인딩하고, 에이전트의 포트만 공개하세요(아웃바운드 호출만 한다면 아무것도 공개하지 않기).

컨테이너가 재부팅 후 돌아오나요?

그렇게 지시할 때만요. 각 서비스에 restart: unless-stopped(또는 always)를 설정하고 부팅 시 Docker를 활성화하세요. 그러면 docker compose up -d가 재부팅과 충돌을 견딥니다. 재시작 정책이 없으면 컨테이너는 서버 재시작 후 꺼진 채로 남습니다.

KYC나 카드를 요구하나요?

아니요. 가입에 이메일, 결제는 USDC 또는 USDT — 서류 없음, 카드 없음. 약 1분이면 root.

← 블로그로 돌아가기요금제와 가격 보기 →

댓글

아직 댓글이 없습니다. 첫 번째가 되세요.

댓글 남기기

댓글은 표시되기 전에 검토됩니다.