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-сети по имени сервиса — ни один не опубликован в интернет. Агент общается с ними по этой приватной сети, и ни один из тех портов не смотрит наружу.
Детали, которые важны
restart: unless-stoppedна каждом сервисе — именно это переживает ребут или сбой. Включи Docker в автозапуск, и весь стек вернётся сам.- Ключи в
.env, не в YAML. Ссылайся на них как на env-переменные; держи.envвchmod 600и вне git. Утёкший compose-файл с живым ключом — классическая ошибка. - Не публикуй ничего лишнего. Агенту, который только вызывает model API и свои сервисы, входящий порт не нужен вовсе — так что NAT-план подойдёт. Dedicated IP нужен, только если он обслуживает webhooks или панель.
- Оразмеряй по памяти, не по ядрам. API-агенты лёгкие. Если индекс Qdrant растёт большим или добавляешь локальную модель — вот тогда поднимаешься; см. high-memory VPS для агентов.
Часть, которая реально наша: агент может собрать себе машину сам
Поскольку EQVPS выставляет MCP-сервер, агент, работающий на этом стеке, может сам провижнить другой чистый VPS — заказать, получить root, снести — оплачивая из предоплаченного крипто-баланса. Compose-стек, которому нужен свежий sandbox, может поднять его без человека в цепочке.
Почему EQVPS для Docker-агента
- Чистые образы, root за ~60 секунд. Ubuntu/Debian;
docker compose up— и стек live. - Без KYC, оплата криптой. Имейл для регистрации, USDC/USDT для оплаты — ничего не связывает машину с твоей личностью.
- NVMe + безлимит 1 Gbit/s, ЕС (Германия/Финляндия). Пул образов и отгрузка логов не дадут внезапного счёта.
VPS для AI-агентов (обзор) → · VPS для Docker → · Хостинг векторной БД для памяти агента →
Комментарии
Пока нет комментариев. Будьте первым.