بلاگ/راه‌اندازی Portainer برای مدیریت گرافیکی Docker روی سرور مجازی و اختصاصی
به‌روز شده

راه‌اندازی Portainer برای مدیریت گرافیکی Docker روی سرور مجازی و اختصاصی

1405/07/010 بازدید
راه‌اندازی Portainer برای مدیریت گرافیکی Docker روی سرور مجازی و اختصاصی

راه‌اندازی Portainer برای مدیریت گرافیکی Docker روی سرور مجازی و اختصاصی

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

در این مقاله مراحل نصب Portainer روی Docker، آشنایی با بخش‌های اصلی پنل، و مهم‌تر از همه، نکات امن‌سازی دسترسی به آن را می‌بینیم؛ چون یک پنل مدیریتی که به‌درستی محافظت نشود، خودش می‌تواند به یک نقطه‌ضعف امنیتی تبدیل شود.

پورتینر چیست و چرا برای مدیریت داکر مفید است؟

Portainer یک ابزار متن‌باز است که روی خود Docker (یا Kubernetes) اجرا می‌شود و یک رابط کاربری تصویری برای مدیریت کانتینرها، ایمیج‌ها، شبکه‌ها، والیوم‌ها و Stackها (معادل گرافیکی docker-compose) فراهم می‌کند.

برای کسی که چند پروژه را روی یک سرور مجازی نگه می‌دارد، این پنل چند مزیت عملی دارد:

  • دیدن وضعیت زنده همه کانتینرها (running، stopped، restarting) بدون اجرای docker ps.
  • مشاهده و فیلتر کردن لاگ‌ها از داخل مرورگر.
  • دیپلوی یک Stack جدید با پیست کردن فایل compose، بدون نیاز به SSH.
  • مدیریت دسترسی چند کاربر با نقش‌های مختلف، مفید وقتی چند نفر روی یک سرور کار می‌کنند.

هیچ‌کدام از این‌ها جایگزین دانش خط فرمان نمی‌شود، اما کار روزمره را سریع‌تر می‌کند.

پیش‌نیازهای نصب Portainer روی سرور مجازی یا اختصاصی

قبل از شروع، این موارد باید آماده باشند:

  • یک سرور مجازی یا اختصاصی با دسترسی SSH و کاربری که دسترسی sudo دارد (اگر هنوز سروری تهیه نکرده‌اید، مراحل خرید و راه‌اندازی سرور مجازی را ببینید).
  • Docker Engine نسخه ۲۰ به بالا نصب‌شده باشد.
  • پورت‌های ۹۰۰۰ (HTTP) یا ۹۴۴۳ (HTTPS) در فایروال باز باشند، ترجیحاً فقط برای IPهای مشخص (با راه‌اندازی فایروال nftables روی سرور لینوکس می‌توانید این محدودسازی را انجام دهید).
  • حداقل ۱ گیگابایت رم آزاد؛ برای سرورهای با چند ده کانتینر، ۲ گیگابایت راحت‌تر است.

اگر هنوز Docker نصب نکرده‌اید، مرحله بعد را از اول دنبال کنید؛ در غیر این صورت مستقیم به بخش اجرای کانتینر Portainer بروید.

مراحل نصب و راه‌اندازی Portainer با Docker

نصب Docker (در صورت نیاز)

روی توزیع‌های مبتنی بر Ubuntu/Debian، ساده‌ترین راه استفاده از اسکریپت رسمی Docker است:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable --now docker

بعد از نصب، با docker --version مطمئن شوید سرویس بالا آمده است.

اجرای کانتینر Portainer

Portainer خودش هم به‌صورت یک کانتینر اجرا می‌شود. اول یک والیوم برای نگه‌داری داده‌های آن بسازید تا با هر ری‌استارت تنظیمات از بین نرود:

docker volume create portainer_data

docker run -d \
  -p 9000:9000 \
  -p 9443:9443 \
  --name portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

نکته مهم همین‌جاست: مسیر -v /var/run/docker.sock:/var/run/docker.sock دسترسی کامل به Docker socket را در اختیار کانتینر Portainer قرار می‌دهد. این دسترسی برای کارکرد پنل لازم است، اما همین نقطه بعداً در بخش امن‌سازی بررسی می‌شود.

ورود اولیه و ساخت حساب ادمین

بعد از اجرای کانتینر، آدرس https://<IP-سرور>:9443 را در مرورگر باز کنید. در اولین بازدید، Portainer از شما می‌خواهد یک کاربر ادمین با پسورد قوی (حداقل ۱۲ کاراکتر) بسازید. این مرحله را طولانی نگذارید؛ Portainer معمولاً چند دقیقه به شما فرصت می‌دهد و اگر دیر برسید، باید کانتینر را دوباره راه‌اندازی کنید.

بعد از ساخت حساب، گزینه "Get Started" را انتخاب کنید تا محیط Docker محلی (همان سروری که روی آن نصب کرده‌اید) به‌صورت خودکار به پنل متصل شود.

پنل مدیریت Portainer با نمای کلی کانتینرها، ایمیج‌ها و والیوم‌های در حال اجرا روی سرور

آشنایی با پنل مدیریت Portainer

بعد از ورود، صفحه اصلی یک نمای کلی از منابع سرور نشان می‌دهد: تعداد کانتینرهای فعال و متوقف، تعداد ایمیج‌ها، والیوم‌ها و شبکه‌ها.

مدیریت کانتینرها، ایمیج‌ها و شبکه‌ها

از بخش Containers می‌توانید هر کانتینر را استارت، استاپ، ری‌استارت یا حذف کنید، و با یک کلیک وارد لاگ زنده یا ترمینال داخل کانتینر شوید. بخش Images امکان pull کردن ایمیج جدید یا حذف ایمیج‌های استفاده‌نشده را می‌دهد، و بخش Networks برای دیدن ارتباط بین کانتینرها روی شبکه‌های Docker مفید است. اگر ترجیح می‌دهید همین کارها را از خط فرمان هم بشناسید، مدیریت و حذف ایمیج‌ها، کانتینرها، حجم‌ها و شبکه‌های Docker معادل CLI همین عملیات را توضیح می‌دهد.

استفاده از Stacks (docker-compose) در Portainer

بخش Stacks معادل گرافیکی docker-compose است. کافی است فایل compose موجود خود را در ادیتور داخلی پیست کنید یا از یک ریپازیتوری Git وصل کنید؛ Portainer بقیه کار (pull ایمیج‌ها، ساخت شبکه، اجرای سرویس‌ها) را انجام می‌دهد. برای پروژه‌هایی با چند سرویس (مثلاً یک اپلیکیشن به همراه دیتابیس و Redis)، این روش سریع‌تر از اجرای دستی چند دستور docker run است؛ برای یک نمونهٔ عملی از همین ایده روی خط فرمان، کاربرد Docker Compose برای نصب مجموعه Laravel، Nginx و MySQL را ببینید.

امن‌سازی دسترسی به Portainer و جلوگیری از افشای Docker Socket

نصب Portainer آسان است، اما همین سادگی می‌تواند خطرناک هم باشد. کانتینری که به Docker socket دسترسی مستقیم دارد، عملاً معادل دسترسی root روی کل سرور است؛ اگر پنل Portainer بدون محافظت روی اینترنت باز بماند، یک پسورد ضعیف یا آسیب‌پذیری کافی است تا کل سرور در اختیار مهاجم قرار بگیرد.

چند اقدام عملی برای کاهش این ریسک:

  • پنل را پشت فایروال یا VPN نگه دارید. پورت ۹۴۴۳ را فقط برای IPهای شناخته‌شده (دفتر، VPN داخلی) باز کنید، نه برای همه اینترنت.
  • از HTTPS استفاده کنید. پورت ۹۴۴۳ به‌صورت پیش‌فرض با گواهی self-signed کار می‌کند؛ برای محیط production یک گواهی معتبر (مثلاً از Let's Encrypt پشت یک reverse proxy) جایگزین کنید.
  • رمز عبور قوی و در صورت امکان احراز هویت دو مرحله‌ای فعال کنید. Portainer از TOTP پشتیبانی می‌کند.
  • دسترسی کاربران را محدود کنید. اگر چند نفر از پنل استفاده می‌کنند، به هرکدام فقط دسترسی به Stack یا Endpoint مربوط به خودش را بدهید، نه دسترسی کامل ادمین.
  • افشای Docker Socket را با یک پروکسی محدود کنید. به‌جای مونت مستقیم docker.sock، از ابزاری مثل Docker Socket Proxy استفاده کنید که فقط API‌های لازم را در اختیار Portainer می‌گذارد و بقیه را می‌بندد.

این اقدامات فقط پنل Portainer را پوشش می‌دهند؛ خود سرور هم به همان اندازه نیاز به محافظت دارد، برای مثال با امن‌سازی دسترسی SSH به سرور لینوکس.

جدول زیر دو روش رایج اتصال Portainer به Docker را از نظر سطح ریسک مقایسه می‌کند:

روش اتصالسطح دسترسیریسک در صورت نفوذ به پنل
مونت مستقیم /var/run/docker.sockدسترسی کامل به Docker API، معادل root روی سروربسیار بالا؛ مهاجم می‌تواند هر کانتینر یا ایمیج را اجرا کند
اتصال از طریق Docker Socket Proxyفقط API‌های مجاز (مثلاً فقط خواندن وضعیت کانتینرها)محدود؛ مهاجم به دستورات حساس مثل اجرای کانتینر جدید دسترسی ندارد

برای سرورهای production، حتی اگر در ابتدا مونت مستقیم را انتخاب کرده باشید، مهاجرت به Socket Proxy در هر زمان ممکن است و فقط نیاز به تغییر تنظیمات کانتینر Portainer دارد، نه نصب مجدد.

نکات تکمیلی برای استفاده امن و پایدار

  • پشتیبان‌گیری از والیوم portainer_data را فراموش نکنید؛ تمام تنظیمات کاربران و Endpointها همان‌جا ذخیره می‌شود.
  • آپدیت منظم ایمیج Portainer با docker pull portainer/portainer-ce:latest و اجرای دوباره کانتینر، چون رفع باگ‌های امنیتی معمولاً در نسخه‌های جدید انجام می‌شود.
  • مانیتور کردن مصرف منابع سرور از داخل خود Portainer (بخش Host جزئیات CPU و رم را نشان می‌دهد)، مفید برای تشخیص زودهنگام کمبود منابع قبل از افت کارایی سرویس‌ها.

جمع‌بندی

راه‌اندازی Portainer روی سرور مجازی یا اختصاصی، مدیریت روزمره کانتینرهای Docker را از خط فرمان به یک پنل گرافیکی قابل فهم منتقل می‌کند؛ اما نصب به‌تنهایی کافی نیست. بدون محدود کردن دسترسی به پنل و کنترل افشای Docker Socket، همان ابزاری که کار را ساده کرده، می‌تواند دری برای نفوذ به کل سرور باز کند.

اگر برای اجرای Docker و Portainer به یک سرور با منابع پایدار و تنظیم آسان فایروال نیاز دارید، سرورهای مجازی آریانت گزینه مناسبی هستند؛ می‌توانید در چند دقیقه یک سرور جدید بسازید و همین امروز Portainer را روی آن راه‌اندازی کنید.

همین حالا یک سرور مجازی آریانت تهیه کنید