EQVPS

Docker Compose برای عامل‌های هوش مصنوعی: یک استک کاملِ خودمیزبان روی یک VPS

15 شهریور 1405 · 3 دقیقه مطالعه · EQVPS Team

یک عامل هوش مصنوعی به‌ندرت یک پروسهٔ واحد است. خودِ حلقهٔ عامل هست، یک ذخیره‌سازِ برداری برای حافظه، یک کش، معمولاً یک پایگاه داده برای وضعیت، و شاید یک داشبورد کوچک. اجرای هرکدام از این‌ها با دست — شروعشان، ری‌استارتشان پس از ریبوت، به‌خاطرسپردنِ اینکه کدام پورت کدام است — سریع خسته‌کننده می‌شود. Docker Compose کل ماجرا را در یک فایل توصیف می‌کند و آن را با یک فرمان اجرا می‌کند. این همان استک کپی-پیست برای گذاشتن یک عامل روی VPS به‌شکل تمیز است.

اگر فقط نسخهٔ استقرارِ بدون Docker را می‌خواهی، راهنمای اجرای عامل هوش مصنوعی به‌صورت شبانه‌روزی به‌جایش 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 که به سندباکس تازه نیاز دارد می‌تواند بدون انسانی در حلقه یکی را بالا بیاورد.

چرا EQVPS برای یک عاملِ داکرایز‌شده

VPS برای عامل‌های هوش مصنوعی (نمای کلی) → · VPS برای Docker → · میزبانیِ پایگاه دادهٔ برداری برای حافظهٔ عامل →

سؤالات متداول

چرا یک عامل هوش مصنوعی را با Docker Compose اجرا کنیم به‌جای پروسه‌های خام؟

یک عامل به‌ندرت فقط یک پروسه است — حلقهٔ عامل به‌علاوهٔ یک ذخیره‌سازِ برداری، یک کش و معمولاً یک پایگاه داده است. Compose کل استک را در یک فایل توصیف می‌کند، همه را با یک فرمان بالا می‌آورد، هر بخش را پس از کرش یا ریبوت دوباره اجرا می‌کند و سرویس‌های داخلی (Postgres، Redis، Qdrant) را روی یک شبکهٔ خصوصی نگه می‌دارد تا فقط آنچه انتخاب می‌کنی در معرض قرار گیرد. این تمیزترین راه برای خودمیزبانیِ عاملی با اجزای متحرک است.

استک عامل چه طرحی نیاز دارد؟

برای عامل متکی بر API (مدل نزد ارائه‌دهنده‌ات اجرا می‌شود) استک سبک است — حلقهٔ عامل، Qdrant، Redis و Postgres به‌راحتی روی Small ما (۸ دلار در ماه) یا طرح AI-Agent (۱۰ دلار در ماه، ۴ گیگابایت) جا می‌شوند. تنها وقتی به RAM بیشتر نیاز داری که یک ایندکس برداری بزرگ را در حافظه نگه داری یا یک مدل محلی اجرا کنی، که راه‌اندازیِ متفاوت و سنگین‌تری است.

کلیدهای API را کجا بگذارم — در فایل compose؟

نه. سکرت‌ها را در یک فایل .env (نادیده‌گرفته‌شده توسط git) نگه دار و در compose به‌صورت متغیرهای محیطی به آن‌ها ارجاع بده، یا از Docker secrets استفاده کن. هرگز کلیدها را در docker-compose.yml کامیت نکن. سرویس‌های داخلی را فقط به شبکهٔ compose مقید کن؛ تنها پورت عامل را منتشر کن (یا هیچ، اگر فقط نداهای خروجی می‌زند).

آیا کانتینرها پس از ریبوت برمی‌گردند؟

فقط اگر به آن‌ها بگویی. روی هر سرویس restart: unless-stopped (یا always) بگذار و Docker را هنگام بوت فعال کن؛ آنگاه docker compose up -d از ریبوت‌ها و کرش‌ها جان سالم به‌در می‌برد. بدون سیاست ری‌استارت، یک کانتینر پس از ری‌استارتِ سرور خاموش می‌ماند.

آیا KYC یا کارت می‌خواهید؟

نه. یک ایمیل برای ثبت‌نام، پرداخت با USDC یا USDT — بدون مدرک، بدون کارت. root در حدود یک دقیقه.

← بازگشت به وبلاگ← پلن‌ها و قیمت‌ها

نظرات

هنوز نظری نیست. اولین نفر باشید.

یک نظر بگذارید

نظرات پیش از نمایش بررسی می‌شوند.