EQVPS

Docker Compose для AI-агентов: полный self-hosted стек на одном VPS

6 сент. 2026 г. · 3 мин чтения · EQVPS Team

AI-агент редко бывает одним процессом. Есть сам цикл агента, векторное хранилище для памяти, кэш, обычно база данных для состояния и, может быть, небольшая панель. Запускать каждое вручную — стартовать, рестартить после ребута, помнить какой порт какой — быстро надоедает. Docker Compose описывает всё это в одном файле и запускает одной командой. Это copy-paste стек, чтобы поставить агента на VPS аккуратно.

Если нужна версия деплоя без Docker — гайд «запусти AI-агента 24/7» покрывает systemd. Эта страница — контейнерно-нативная версия.

Стек

Типичному self-hosted агенту рядом нужны четыре вещи: процесс агента, 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-стек, которому нужен свежий sandbox, может поднять его без человека в цепочке.

Почему EQVPS для Docker-агента

VPS для AI-агентов (обзор) → · VPS для Docker → · Хостинг векторной БД для памяти агента →

Частые вопросы

Зачем запускать AI-агента через Docker Compose, а не голыми процессами?

Агент редко бывает одним процессом — это цикл агента плюс векторное хранилище, кэш и обычно база данных. Compose описывает весь стек в одном файле, поднимает всё одной командой, рестартит каждую часть при сбое или ребуте и держит внутренние сервисы (Postgres, Redis, Qdrant) в приватной сети, так что наружу торчит только то, что ты выбрал. Это самый аккуратный способ хостить агента с движущимися частями.

Какой план нужен стеку агента?

Для API-агента (модель работает у провайдера) стек лёгкий — цикл агента, Qdrant, Redis и Postgres комфортно влезают в наш Small ($8/мес) или план AI-Agent ($10/мес, 4 ГБ). Больше RAM нужно, только если держишь большой векторный индекс в памяти или запускаешь локальную модель — это другая, более тяжёлая история.

Куда класть API-ключи — в compose-файл?

Нет. Держи секреты в .env (в git-ignore) и ссылайся на них как на переменные окружения в compose, либо используй Docker secrets. Никогда не коммить ключи в docker-compose.yml. Внутренние сервисы держи только в compose-сети; публикуй лишь порт агента (или ничего, если он только исходящие вызовы делает).

Контейнеры вернутся после ребута?

Только если укажешь. Ставь restart: unless-stopped (или always) на каждый сервис и включи Docker в автозапуск; тогда docker compose up -d переживает ребуты и сбои. Без restart-политики контейнер остаётся выключенным после перезапуска сервера.

Требуете KYC или карту?

Нет. Имейл для регистрации, оплата в USDC или USDT — без документов, без карты. Root примерно за минуту.

← Назад в блогТарифы и цены →

Комментарии

Пока нет комментариев. Будьте первым.

Оставить комментарий

Комментарии проходят модерацию перед публикацией.