ورود به پنل ثبت‌ نام

نصب OpenClaw روی سرور ابری

راهنمای نصب OpenClaw روی سرور ابری با داکر؛ اتصال به تلگرام، انتخاب مدل ابری یا محلی، محدودکردن اختیارات ایجنت و امن‌سازی کنسول مدیریت.

تیم ابر سپهر 12 دقیقه مطالعه
نصب OpenClaw روی سرور ابری
در این مقاله

نصب OpenClaw روی سرور ابری یکی از پرتکرارترین کارهایی است که امسال در دنیای خودمیزبانی انجام می‌شود؛ پروژه‌ای که در کمتر از پنج ماه از صفر به بیش از ۳۸۰ هزار ستاره در گیت‌هاب رسید. OpenClaw یک دروازهٔ خودمیزبان (self-hosted gateway) است که پیام‌رسان‌هایی مثل تلگرام، واتساپ، دیسکورد، سیگنال و اسلک را به یک ایجنت هوش مصنوعی وصل می‌کند: از همان تلگرامی که همیشه باز است پیام می‌دهید و ایجنت روی سرور شما وب را جست‌وجو می‌کند، فایل می‌خواند و می‌نویسد، دستور شل اجرا می‌کند و بین گفت‌وگوها حافظه نگه می‌دارد.

دلیل اینکه این ابزار باید روی سرور خودتان اجرا شود ساده است: OpenClaw دسترسی واقعی به فایل‌سیستم و شل دارد. هر چیزی که به آن می‌دهید — کلید API، محتوای فایل‌ها، تاریخچهٔ گفت‌وگو — روی همان ماشین می‌ماند. در ضمن چون ایجنت باید همیشه در دسترس باشد، اجرای آن روی لپ‌تاپی که شب خاموش می‌شود عملاً بی‌فایده است؛ یک سرور ابری همیشه‌روشن جای درست این کار است.

در این راهنما OpenClaw را با داکر روی یک سرور اوبونتو راه می‌اندازیم، کنسول مدیریت را از راه تونل SSH باز می‌کنیم، مدل را انتخاب می‌کنیم، تلگرام را وصل می‌کنیم و مهم‌تر از همه، اختیارات ایجنت را طوری محدود می‌کنیم که یک پیام اشتباه به سرور شما آسیب نزند.

این ابزار روی سرور شما دستور شل اجرا می‌کند و فایل می‌نویسد. با هر ابزار دیگری در این وبلاگ فرق دارد: اینجا اشتباه در پیکربندی به معنای «سرویس بالا نمی‌آید» نیست، به معنای «کسی که به ربات پیام می‌دهد روی سرور شما دستور اجرا می‌کند» است. تا پایان گام ۶ راهنما پیش بروید و هیچ‌کدام از مراحل مربوط به دسترسی را رد نکنید.

پیش‌نیازها

  • یک سرور ابری با Ubuntu 24.04 LTS و دسترسی root. ترجیحاً سروری که کار دیگری روی آن انجام نمی‌دهید؛ دلیلش را در گام ۶ می‌بینید.
  • حداقل ۲ گیگابایت حافظه، اما در عمل ۴ گیگابایت و ۲ هسته بگیرید. اگر قرار است مدل زبانی را هم به‌صورت محلی اجرا کنید، عدد حافظه کاملاً به مدل بستگی دارد و جداگانه باید حساب شود.
  • حداقل ۲۰ گیگابایت فضای دیسک. لاگ نشست‌ها، فایل‌های رسانه‌ای و خروجی کارهای زمان‌بندی‌شده سریع‌تر از تصور جمع می‌شوند.
  • داکر و Docker Compose. اگر نصب نیست، آموزش نصب داکر روی اوبونتو مسیر رسمی را توضیح می‌دهد.
  • یک کلید API از ارائه‌دهندهٔ مدل (Anthropic، OpenAI، OpenRouter و مانند آن‌ها) یا یک نمونهٔ Ollama برای اجرای مدل محلی.
  • یک حساب تلگرام برای ساخت ربات.

تمام دستورها با کاربر root روی سرور اجرا می‌شوند، مگر جایی که صراحتاً گفته شود روی کامپیوتر خودتان است.

گام ۱: آماده‌سازی سرور

پیش از هر چیز سیستم را به‌روز می‌کنیم و ابزارهای لازم را نصب می‌کنیم:

apt update && apt upgrade -y
apt install -y git curl

git لازم است چون راه‌اندازی داکری OpenClaw از روی مخزن رسمی انجام می‌شود؛ اسکریپت راه‌اندازی و فایل Compose داخل همان مخزن هستند.

اگر فایروال را هنوز تنظیم نکرده‌اید، همین حالا فقط SSH را باز کنید و بقیه را ببندید:

apt install -y ufw
ufw allow OpenSSH
ufw enable

توجه کنید که هیچ پورت دیگری را باز نمی‌کنیم. کنسول مدیریت OpenClaw قرار نیست از اینترنت در دسترس باشد و در گام ۳ توضیح می‌دهیم چرا. برای دیدن کامل قواعد امن‌سازی پایه، امن‌سازی سرور لینوکس را ببینید.

گام ۲: راه‌اندازی OpenClaw با داکر

مخزن رسمی را می‌گیریم و اسکریپت راه‌اندازی داکر را با ایمیج آمادهٔ رسمی اجرا می‌کنیم:

git clone https://github.com/openclaw/openclaw.git
cd openclaw
export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest"
./scripts/docker/setup.sh

متغیر OPENCLAW_IMAGE باعث می‌شود به‌جای ساختن ایمیج روی سرور، ایمیج آماده از GitHub Container Registry کشیده شود. این کار چند دقیقه و مقدار قابل‌توجهی رم صرفه‌جویی می‌کند؛ ساخت محلی روی سروری با ۲ گیگابایت حافظه معمولاً وسط کار متوقف می‌شود.

اسکریپت به‌ترتیب این کارها را انجام می‌دهد: کلیدهای API ارائه‌دهندهٔ مدل را می‌پرسد، یک توکن دروازه (gateway token) تصادفی می‌سازد و در فایل .env می‌نویسد، دایرکتوری اسرار پروفایل احراز هویت را می‌سازد و در پایان سرویس را با Docker Compose بالا می‌آورد. توکنی که ساخته می‌شود را جایی امن نگه دارید؛ برای ورود به کنسول مدیریت لازمش دارید.

اگر اسکریپت سرویس را بالا نیاورد یا بعداً خواستید دستی راه بیندازید:

docker compose up -d openclaw-gateway

سلامت سرویس را با دو مسیر استاندارد بررسی می‌کنیم:

curl -fsS http://127.0.0.1:18789/healthz
curl -fsS http://127.0.0.1:18789/readyz

مسیر healthz می‌گوید پردازه زنده است و readyz می‌گوید آمادهٔ پذیرش کار است. اگر اولی جواب بدهد و دومی ندهد، معمولاً یعنی پیکربندی مدل یا کانال ناقص مانده — لاگ را بخوانید:

docker compose logs -f openclaw-gateway

داده‌های ماندگار در سه مسیر داخل کانتینر نگه‌داری می‌شوند که همگی به سرور میزبان mount شده‌اند: پیکربندی در /home/node/.openclaw، فضای کاری ایجنت در /home/node/.openclaw/workspace و اسرار احراز هویت در /home/node/.config/openclaw. فایل اصلی پیکربندی openclaw.json است و در ادامه چند بار سراغش می‌رویم.

گام ۳: دسترسی امن به کنسول مدیریت

کنسول مدیریت (Control UI) روی پورت ۱۸۷۸۹ منتشر می‌شود، اما فقط روی 127.0.0.1. این پیش‌فرض عمدی است و نباید تغییرش دهید.

مستندات رسمی OpenClaw صریح است: دروازه را هرگز بدون احراز هویت روی 0.0.0.0 باز نکنید. هر کسی که به این پنل برسد می‌تواند به ایجنت دستور بدهد، و ایجنت روی سرور شما شل دارد. یعنی باز گذاشتن پورت ۱۸۷۸۹ روی اینترنت عملاً معادل دادن دسترسی root به هر عابر است. این پورت را در UFW باز نکنید و پشت Nginx یا Traefik هم منتشرش نکنید.

راه درست دسترسی، تونل SSH است. روی کامپیوتر خودتان (نه سرور) اجرا کنید:

ssh -N -L 18789:127.0.0.1:18789 root@SERVER_IP

سوئیچ -L پورت ۱۸۷۸۹ لپ‌تاپ شما را به همان پورت روی 127.0.0.1 سرور وصل می‌کند و -N می‌گوید شل تعاملی باز نکن. تا وقتی این دستور در حال اجراست، مرورگر را باز کنید و به این آدرس بروید:

http://127.0.0.1:18789/

توکنی که در گام ۲ ساخته شد را در بخش Settings وارد کنید. مزیت این روش این است که هیچ پورت اضافه‌ای روی اینترنت باز نمی‌شود و احراز هویت را همان SSH انجام می‌دهد که سال‌هاست برای همین کار سخت‌شده است.

گام ۴: انتخاب مدل

OpenClaw به ارائه‌دهنده‌های مختلفی وصل می‌شود؛ از سرویس‌های ابری مثل Anthropic، OpenAI و OpenRouter تا اجراکننده‌های محلی مثل Ollama و LM Studio. اگر در گام ۲ کلید API داده باشید، مدل پیش‌فرض همان‌جا تنظیم شده است. برای دیدن وضعیت فعلی:

docker compose run --rm openclaw-cli models status

فهرست مدل‌های در دسترس یک ارائه‌دهنده:

docker compose run --rm openclaw-cli models list --provider ollama

و تغییر مدل پیش‌فرض:

docker compose run --rm openclaw-cli models set anthropic/claude-opus-5

نکتهٔ مهم دربارهٔ مدل‌های محلی: ارجاع به مدل باید کامل و با پیشوند ارائه‌دهنده باشد، مثل ollama/gemma4:26b. اگر فقط نام مدل را بنویسید، OpenClaw آن را پیدا نمی‌کند. همیشه خروجی models list را مبنا بگذارید و نام را از آنجا کپی کنید، نه از حافظه.

اگر می‌خواهید کل مسیر را محلی و بدون کلید API نگه دارید، آموزش نصب Ollama روی سرور ابری نشان می‌دهد چطور مدل را روی همان زیرساخت بالا بیاورید. توجه کنید که کیفیت خروجی ایجنت مستقیماً به توان مدل بستگی دارد؛ مدل‌های کوچک محلی برای پرسش‌وپاسخ ساده خوب‌اند، اما برای کارهای چندمرحله‌ای با ابزار معمولاً کم می‌آورند.

گام ۵: اتصال تلگرام و محدودکردن دسترسی

ابتدا در تلگرام با @BotFather گفت‌وگو کنید، دستور /newbot را بزنید و توکن ربات را بردارید. سپس فایل openclaw.json را ویرایش کنید:

{
  channels: {
    telegram: {
      enabled: true,
      botToken: "YOUR_TOKEN_HERE",
      dmPolicy: "pairing",
      allowFrom: ["YOUR_TELEGRAM_USER_ID"],
      groupPolicy: "allowlist",
      groups: { "*": { requireMention: true } },
    },
  },
}

کلید dmPolicy تعیین می‌کند چه کسی می‌تواند در پیام خصوصی با ایجنت حرف بزند و سه مقدار دارد: pairing که پیش‌فرض است و هر فرستندهٔ ناشناس باید دستی تأیید شود، allowlist که فقط شناسه‌های عددی مشخص اجازه دارند، و open که یعنی هرکسی. مقدار open را روی ایجنتی که شل دارد نگذارید.

requireMention هم باعث می‌شود ایجنت در گروه‌ها فقط وقتی پاسخ بدهد که مستقیماً منشن شده باشد؛ بدون آن، ربات به هر پیام گروه واکنش نشان می‌دهد و هم هزینهٔ توکن بالا می‌رود و هم رفتارش غیرقابل‌پیش‌بینی می‌شود.

پس از ذخیرهٔ پیکربندی، سرویس را راه‌اندازی دوباره کنید و اولین پیام را به ربات بدهید. حالا درخواست جفت‌سازی را تأیید کنید:

docker compose restart openclaw-gateway
docker compose run --rm openclaw-cli pairing list telegram
docker compose run --rm openclaw-cli pairing approve telegram CODE

کدهای جفت‌سازی یک ساعت اعتبار دارند؛ اگر دیر بجنبید باید دوباره پیام بدهید تا کد تازه ساخته شود.

گام ۶: محدودکردن اختیارات ایجنت

این گام مهم‌ترین بخش راهنماست. OpenClaw به‌صورت پیش‌فرض ابزارهای قدرتمندی در اختیار مدل می‌گذارد و شما باید تصمیم بگیرید کدام‌ها لازم‌اند.

سه اهرم اصلی در پیکربندی وجود دارد:

اول، حالت اتصال دروازه. مطمئن شوید روی حالت محلی و شنود روی loopback است:

{
  gateway: {
    mode: "local",
    bind: "loopback",
    auth: { mode: "token", token: "your-long-random-token" },
  },
}

دوم، تأیید دستی برای اجرای دستور. با تنظیم زیر، هر دستور شل پیش از اجرا از شما پرسیده می‌شود:

{
  tools: {
    exec: { security: "deny", ask: "always" },
  },
}

این تنظیم کندتان می‌کند، اما تفاوت بین «ایجنتی که کمک می‌کند» و «ایجنتی که یک شب دایرکتوری اشتباهی را پاک می‌کند» همین است. اگر بعد از چند هفته به رفتار ایجنت اعتماد کردید، می‌توانید برای گروه‌های خاصی از ابزارها شل‌ترش کنید.

سوم، سندباکس. مقدار پیش‌فرض agents.defaults.sandbox.scope برابر agent است؛ همان را نگه دارید یا برای جداسازی بیشتر روی session بگذارید تا هر نشست فضای خودش را داشته باشد.

در پایان، ابزار ممیزی داخلی را اجرا کنید:

docker compose run --rm openclaw-cli security audit --deep

این دستور دسترسی‌های ورودی، دامنهٔ اثر ابزارها، مجوزهای فایل، میزان قرارگرفتن در معرض شبکه و ایمنی افزونه‌ها را بررسی می‌کند و پیکربندی‌های خطرناک رایج را گزارش می‌دهد. گزارش را کامل بخوانید و پیش از اینکه ایجنت را در جریان کار روزمره بگذارید، هشدارها را برطرف کنید.

نگهداری: به‌روزرسانی و بک‌آپ

به‌روزرسانی با کشیدن ایمیج تازه و بالا آوردن دوبارهٔ سرویس انجام می‌شود:

docker compose pull
docker compose up -d openclaw-gateway

OpenClaw چند بار در هفته نسخهٔ جدید می‌دهد. اگر ثبات برایتان از تازگی مهم‌تر است، به‌جای برچسب latest یک نسخهٔ مشخص را در OPENCLAW_IMAGE پین کنید و به‌روزرسانی را آگاهانه انجام دهید؛ روی پروژه‌ای با این سرعت تغییر، latest یعنی هر بار قمار.

بک‌آپ یعنی همان سه دایرکتوری mount‌شده: پیکربندی، فضای کاری و اسرار احراز هویت. از دست دادن‌شان یعنی از دست دادن کل حافظه و اتصالات ایجنت. برای بک‌آپ رمزنگاری‌شده و نسخه‌بندی‌شدهٔ این مسیرها، بک‌آپ خودکار سرور با Restic دقیقاً همین سناریو را پوشش می‌دهد. پیش از هر به‌روزرسانی بزرگ هم گرفتن اسنپ‌شات از کل سرور در کنترل پنل ابر سپهر سریع‌ترین راه بازگشت است.

کار دستور چه زمانی
بررسی سلامت سرویس curl -fsS http://127.0.0.1:18789/healthz پس از هر تغییر
خواندن لاگ docker compose logs -f openclaw-gateway هنگام عیب‌یابی
دسترسی به کنسول ssh -N -L 18789:127.0.0.1:18789 root@SERVER_IP هر بار از راه دور
ممیزی امنیتی security audit --deep پس از هر تغییر پیکربندی
به‌روزرسانی docker compose pull && docker compose up -d آگاهانه، نه خودکار
بک‌آپ داده‌ها Restic روی دایرکتوری پیکربندی روزانه

جمع‌بندی

با نصب OpenClaw روی سرور ابری، یک دستیار هوش مصنوعی همیشه‌روشن دارید که از داخل تلگرام در دسترس است، حافظه نگه می‌دارد و روی زیرساخت خودتان اجرا می‌شود؛ بدون اینکه گفت‌وگوها و کلیدهایتان به سرویس دیگری برود.

سه تصمیمی که بیشترین تفاوت را می‌سازند، همگی دربارهٔ دسترسی‌اند: نگه‌داشتن کنسول روی 127.0.0.1 و رسیدن به آن فقط از تونل SSH، تنظیم dmPolicy روی pairing یا allowlist به‌جای open، و فعال‌کردن تأیید دستی برای اجرای دستور تا وقتی به رفتار ایجنت اعتماد کنید. و یک توصیهٔ چهارم: این ایجنت را روی همان سروری که سایت یا دیتابیس پروداکشن دارید اجرا نکنید.

اگر می‌خواهید سرور جداگانه‌ای برای ایجنت بردارید، از صفحهٔ خرید سرور ابری می‌توانید نمونه‌ای با ۴ گیگابایت حافظه شروع کنید و بعداً متناسب با حجم کار منابع را ارتقا دهید.

مقالات مرتبط