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

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

نصب Dokploy روی سرور ابری با یک دستور؛ دیپلوی خودکار از گیت، SSL رایگان با Traefik، دیتابیس مدیریت‌شده و بک‌آپ روی S3 — به‌همراه مقایسه با Coolify.

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

اگر دنبال یک پلتفرم دیپلوی خودمیزبان هستید که سبک‌تر از Coolify باشد و همان تجربهٔ Heroku را روی سرور خودتان بازتولید کند، نصب Dokploy روی سرور ابری گزینه‌ای است که امسال بیشترین رشد را داشته. Dokploy یک PaaS متن‌باز است که با یک دستور نصب می‌شود، Docker Swarm را زیر پوسته راه می‌اندازد و از طریق Traefik ترافیک برنامه‌ها را با گواهی Let's Encrypt سرویس می‌دهد.

تفاوت اصلی Dokploy با نصب دستی داکر و پراکسی این است که چرخهٔ کامل — گرفتن کد از مخزن گیت، ساختن ایمیج، اجرای کانتینر، تخصیص دامنه، صدور گواهی SSL و بک‌آپ زمان‌بندی‌شدهٔ دیتابیس — در یک داشبورد جمع شده و شما دیگر لازم نیست برای هر پروژه یک docker-compose.yml و یک بلوک server در Nginx بنویسید. داده‌ها، متغیرهای محیطی و کلیدهای API روی زیرساخت خودتان می‌مانند و هیچ محدودیتی روی تعداد دیپلوی یا حجم بیلد وجود ندارد.

در این راهنما Dokploy را روی یک سرور اوبونتو نصب می‌کنیم، داشبورد را به دامنه با HTTPS وصل می‌کنیم، فایروال را می‌بندیم، یک برنامه را از مخزن گیت دیپلوی می‌کنیم و در پایان به این می‌رسیم که در چه شرایطی Dokploy انتخاب بهتری از Coolify است و در چه شرایطی نیست.

پیش‌نیازها

  • یک سرور ابری با دسترسی root. مستندات رسمی Dokploy، اوبونتو ۱۸.۰۴ تا ۲۴.۰۴، دبیان ۱۰ تا ۱۲، فدورا ۴۰ و CentOS ۸ و ۹ را به‌عنوان سیستم‌عامل‌های آزمایش‌شده اعلام کرده است. برای پروداکشن Ubuntu 24.04 LTS انتخاب مطمئنی است؛ اگر روی نسخهٔ تازه‌تری مثل ۲۶.۰۴ نصب می‌کنید، بدانید که هنوز در فهرست رسمی نیست و ممکن است به دستکاری دستی نیاز پیدا کنید.
  • حداقل منابع اعلام‌شده: ۲ گیگابایت حافظه و ۳۰ گیگابایت فضای دیسک. این عدد فقط برای خودِ Dokploy است. بیلد ایمیج‌های Node و PHP به‌سادگی یک تا دو گیگابایت رم مصرف می‌کند، پس در عمل روی ۴ گیگابایت رم و ۲ هسته شروع کنید تا اولین بیلد سنگین با خطای OOM متوقف نشود.
  • یک دامنه یا سابدامین (مثلاً dokploy.domain.com) با رکورد A که پیش از شروع نصب به آی‌پی سرور اشاره کند. صدور خودکار گواهی SSL به همین رکورد وابسته است.
  • سروری که تازه نصب شده باشد. اسکریپت نصب خودش داکر را نصب و Swarm را مقداردهی می‌کند؛ اگر از قبل Nginx یا Apache روی پورت ۸۰ نشسته باشد، Traefik بالا نمی‌آید.

تمام دستورهای این راهنما با کاربر root اجرا می‌شوند.

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

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

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

اسکریپت نصب با curl دریافت می‌شود و بقیهٔ وابستگی‌ها را خودش می‌آورد، پس همین دو دستور کافی است. اگر پیش‌تر وب‌سروری روی این ماشین داشته‌اید، آن را متوقف کنید:

systemctl disable --now nginx apache2 2>/dev/null
ss -tlnp | grep -E ':(80|443|3000)\b'

دستور دوم نشان می‌دهد چه فرایندی روی پورت‌های ۸۰، ۴۴۳ و ۳۰۰۰ گوش می‌دهد. خروجی باید خالی باشد؛ هر چیزی که اینجا دیده شود بعداً باعث می‌شود Traefik یا داشبورد Dokploy بالا نیاید و پیغام خطا هم چندان گویا نیست.

گام ۲: اجرای اسکریپت نصب Dokploy

نصب Dokploy با یک دستور انجام می‌شود:

curl -sSL https://dokploy.com/install.sh | sh

این اسکریپت پشت‌سرهم چند کار انجام می‌دهد: اگر داکر نصب نباشد آن را نصب می‌کند، حالت Docker Swarm را روی همین ماشین به‌صورت تک‌نود مقداردهی می‌کند، شبکهٔ داخلی dokploy-network را می‌سازد، سرویس‌های Dokploy را به‌همراه یک پایگاه دادهٔ PostgreSQL و یک نمونهٔ Redis بالا می‌آورد و در پایان Traefik را به‌عنوان پراکسی جلویی اجرا می‌کند.

اینکه Dokploy روی Swarm بنا شده، یک تفاوت معماری مهم با رقبا است: از همان روز اول مفاهیمی مثل تعداد replica، rolling update و اضافه‌کردن نودهای بیشتر در دسترس‌اند، بدون اینکه لازم باشد به Kubernetes مهاجرت کنید.

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

docker service ls

باید سرویس‌های dokploy، dokploy-postgres، dokploy-redis و dokploy-traefik را با وضعیت 1/1 ببینید. اگر یکی از آن‌ها 0/1 بود، لاگ همان سرویس را با docker service logs dokploy بخوانید؛ معمولاً مقصر کمبود رم یا اشغال‌بودن پورت است.

گام ۳: ساخت حساب مدیر

مرورگر را باز کنید و به آدرس زیر بروید (به‌جای SERVER_IP آی‌پی سرور خود را بگذارید):

http://SERVER_IP:3000

نخستین صفحه‌ای که می‌بینید فرم ساخت حساب مدیر است. این حساب را بلافاصله بسازید.

تا وقتی حساب مدیر ساخته نشده، هر کسی که آی‌پی سرور و پورت ۳۰۰۰ را بداند می‌تواند نخستین حساب را برای خودش ثبت کند و کنترل کامل سرور را در دست بگیرد — یعنی اجرای کانتینر دلخواه روی ماشین شما. این کار را به بعد از ناهار موکول نکنید؛ درست پس از پایان نصب انجامش دهید.

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

گام ۴: اتصال دامنه و فعال‌سازی SSL

دسترسی با آی‌پی و پورت برای شروع خوب است، اما برای استفادهٔ دائمی داشبورد باید پشت دامنه و HTTPS برود. Dokploy این کار را در بخش تنظیمات خودش انجام می‌دهد و برخلاف نصب دستی، خبری از Certbot و ویرایش کانفیگ Nginx نیست؛ Traefik صدور و تمدید گواهی Let's Encrypt را خودکار انجام می‌دهد.

در داشبورد به Settings → Web Server بروید و سه فیلد را پر کنید:

Domain: dokploy.domain.com
Let's Encrypt Email: you@domain.com
Certificate Provider: Let's Encrypt

پس از زدن Save، Dokploy پیکربندی Traefik را بازنویسی می‌کند، دامنه را به فهرست مبداهای مورد اعتماد (trusted origins) اضافه می‌کند و درخواست صدور گواهی را می‌فرستد. چند ثانیه بعد داشبورد از مسیر https://dokploy.domain.com در دسترس است.

اگر گواهی صادر نشد، تقریباً همیشه یکی از این دو دلیل را دارد: رکورد A هنوز منتشر نشده و Let's Encrypt به آی‌پی دیگری می‌رسد، یا پورت ۸۰ از بیرون بسته است. اعتبارسنجی HTTP-01 حتماً به پورت ۸۰ نیاز دارد، حتی وقتی مقصد نهایی HTTPS است.

گام ۵: تنظیم فایروال

حالا که دامنه کار می‌کند، دسترسی‌ها را محدود می‌کنیم:

apt install -y ufw
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 3000/tcp
ufw enable

پورت‌های ۸۰ و ۴۴۳ برای Traefik لازم‌اند؛ هم گواهی از این مسیر صادر می‌شود و هم برنامه‌هایی که دیپلوی می‌کنید از همین‌جا سرویس داده می‌شوند. پورت ۳۰۰۰ فقط برای دسترسی اولیه باز است. پس از اینکه از طریق دامنه وارد شدید، آن را ببندید:

ufw delete allow 3000/tcp

از این پس داشبورد فقط از مسیر دامنه و پشت HTTPS در دسترس خواهد بود و اسکنرهایی که اینترنت را دنبال پورت ۳۰۰۰ باز می‌گردند چیزی پیدا نمی‌کنند.

پیش از اجرای ufw enable مطمئن شوید قاعدهٔ OpenSSH را اضافه کرده‌اید، وگرنه همان نشست SSH فعلی قطع می‌شود و راه برگشتی ندارید. اگر این اتفاق افتاد، از کنسول تحت وب کنترل پنل ابر سپهر وارد سرور شوید و قاعده را دستی اضافه کنید.

گام ۶: دیپلوی نخستین برنامه از مخزن گیت

جریان کار در Dokploy از بالا به پایین چنین است: ابتدا یک Project می‌سازید، بعد داخل آن Service اضافه می‌کنید. سرویس می‌تواند یک برنامه، یک دیتابیس یا یک فایل Compose باشد.

برای دیپلوی یک برنامه از گیت:

۱. در Settings → Git حساب گیت‌هاب خود را وصل کنید. Dokploy یک GitHub App می‌سازد که فقط به مخازن انتخابی شما دسترسی دارد؛ نیازی به ساختن Personal Access Token دستی نیست.

۲. پروژه بسازید و داخل آن یک سرویس از نوع Application اضافه کنید. مخزن و شاخه (مثلاً main) را انتخاب کنید.

۳. نوع بیلد را مشخص کنید. Dokploy چند حالت دارد: Nixpacks که خودش زبان پروژه را تشخیص می‌دهد و بدون Dockerfile ایمیج می‌سازد، Dockerfile اگر خودتان نوشته باشید، و Docker Compose برای پروژه‌های چندسرویسی. برای شروع Nixpacks کمترین دردسر را دارد.

۴. در تب Domains یک دامنه برای برنامه ثبت کنید (مثلاً app.domain.com)، پورت داخلی کانتینر را وارد کنید و گزینهٔ HTTPS را فعال کنید. رکورد A این سابدامین هم باید از پیش به سرور اشاره کند.

۵. متغیرهای محیطی را در تب Environment وارد کنید و Deploy را بزنید.

لاگ بیلد به‌صورت زنده نمایش داده می‌شود. اگر بیلد شکست بخورد، نسخهٔ قبلی دست‌نخورده باقی می‌ماند و برنامه از کار نمی‌افتد — این رفتار پیش‌فرض Swarm است، نه چیزی که لازم باشد جداگانه پیکربندی کنید.

برای فعال‌کردن دیپلوی خودکار، در تب Deployments گزینهٔ Auto Deploy را روشن کنید. Dokploy یک وب‌هوک روی مخزن ثبت می‌کند و از آن پس هر push به شاخهٔ انتخابی یک دیپلوی تازه را کلید می‌زند.

گام ۷: راه‌اندازی دیتابیس

به‌جای نصب دستی PostgreSQL روی خود ماشین، آن را به‌عنوان یک سرویس داخل همان پروژه بالا بیاورید: New Service → Database → PostgreSQL. نسخه را انتخاب کنید، نام کاربری و رمز را وارد کنید و بسازید.

نکتهٔ مهم اینجاست که دیتابیس را به اینترنت باز نکنید. سرویس‌های داخل یک پروژه از طریق شبکهٔ داخلی داکر با نام سرویس همدیگر را می‌بینند، پس در متغیر محیطی برنامه از همان نام داخلی استفاده کنید:

DATABASE_URL=postgres://user:password@my-postgres:5432/appdb

فقط زمانی گزینهٔ External Port را فعال کنید که واقعاً لازم است از بیرون به دیتابیس وصل شوید؛ و اگر فعالش کردید، در UFW دسترسی را به آی‌پی مشخص خودتان محدود کنید. یک PostgreSQL باز روی اینترنت با رمز ساده، ظرف چند ساعت پیدا می‌شود.

اگر می‌خواهید با تنظیمات و بهینه‌سازی PostgreSQL بیشتر آشنا شوید، آموزش نصب PostgreSQL روی اوبونتو همان مفاهیم را در حالت نصب مستقیم توضیح می‌دهد.

Dokploy یا Coolify؟

هر دو یک کار می‌کنند و انتخاب بین‌شان بیشتر به اولویت شما بستگی دارد تا به برتری فنی مطلق. تصویر کلی چنین است:

Coolify بالغ‌تر است، جامعهٔ بزرگ‌تری دارد و مجموعهٔ سرویس‌های آمادهٔ آن (قالب‌های یک‌کلیکی برای ده‌ها برنامهٔ متن‌باز) گسترده‌تر است. اگر می‌خواهید بیشتر «سرویس نصب کنید» تا «کد خودتان را دیپلوی کنید»، Coolify جلوتر است.

Dokploy جوان‌تر و سبک‌تر است، رابط کاربری تمیزتری دارد و چون روی Docker Swarm بنا شده، مسیر رشد به چندسرور و مقیاس‌دهی افقی در آن طبیعی‌تر است. برای تیمی که چند برنامهٔ خودش را روی یک یا چند سرور نگه می‌دارد، معمولاً انتخاب راحت‌تری است.

معیار Dokploy Coolify
زیرساخت اجرا Docker Swarm Docker Compose
پراکسی و SSL Traefik Traefik
حداقل رم اعلام‌شده ۲ گیگابایت ۲ گیگابایت
پورت داشبورد ۳۰۰۰ ۸۰۰۰
مقیاس‌دهی چندسرور بومی (Swarm) پشتیبانی می‌شود
کتابخانهٔ سرویس آماده متوسط گسترده
بلوغ و اندازهٔ جامعه در حال رشد بیشتر

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

نکتهٔ عملی: این دو را روی یک سرور کنار هم نصب نکنید. هر دو Traefik خودشان را روی پورت‌های ۸۰ و ۴۴۳ می‌نشانند و دومی بالا نمی‌آید.

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

به‌روزرسانی از خود داشبورد انجام می‌شود؛ وقتی نسخهٔ تازه‌ای منتشر شود، دکمهٔ Update در تنظیمات نمایش داده می‌شود. اگر ترجیح می‌دهید از خط فرمان کار کنید، اجرای دوبارهٔ همان اسکریپت نصب، سرویس‌ها را به آخرین نسخه می‌برد:

curl -sSL https://dokploy.com/install.sh | sh

بک‌آپ دو لایه دارد. لایهٔ اول خودِ Dokploy است: پیکربندی‌ها در /etc/dokploy و وضعیت سیستم در دیتابیس dokploy-postgres نگه‌داری می‌شود. Dokploy امکان بک‌آپ زمان‌بندی‌شده با نحو cron دارد که این دو را با هم فشرده می‌کند و روی یک S3 Destination آپلود می‌کند؛ پس پیش از فعال‌کردن بک‌آپ باید یک مقصد S3 در تنظیمات تعریف کنید. لایهٔ دوم دیتابیس‌های برنامه‌های شماست که برای هرکدام جداگانه بک‌آپ تعریف می‌شود.

برای رویکرد مستقل از پلتفرم — که توصیه می‌کنیم به‌عنوان لایهٔ سوم داشته باشید — بک‌آپ خودکار سرور با Restic کل دایرکتوری داده‌ها را رمزنگاری‌شده و نسخه‌بندی‌شده نگه می‌دارد. و پیش از هر به‌روزرسانی بزرگ، گرفتن اسنپ‌شات از کل سرور در کنترل پنل ابر سپهر سریع‌ترین راه بازگشت به نقطهٔ سالم است.

کار دستور یا مسیر چه زمانی
بررسی سلامت سرویس‌ها docker service ls پس از نصب و هر خطای دیپلوی
خواندن لاگ داشبورد docker service logs dokploy وقتی داشبورد بالا نمی‌آید
به‌روزرسانی Dokploy دکمه Update یا اجرای دوبارهٔ اسکریپت هنگام انتشار نسخه جدید
بک‌آپ پیکربندی و دیتابیس Backups + S3 Destination روزانه
بستن دسترسی پورت ۳۰۰۰ ufw delete allow 3000/tcp پس از تنظیم دامنه و SSL
اسنپ‌شات کامل سرور کنترل پنل پیش از هر تغییر پرخطر

جمع‌بندی

با نصب Dokploy روی سرور ابری، یک پلتفرم دیپلوی کامل دارید که از گرفتن کد تا صدور گواهی SSL و بک‌آپ دیتابیس را در یک داشبورد جمع کرده، بدون هزینهٔ ماهانه و بدون محدودیت تعداد دیپلوی. سه تصمیمی که بیشترین تفاوت را می‌سازند: ساخت فوری حساب مدیر پس از نصب، بستن پورت ۳۰۰۰ بلافاصله پس از تنظیم دامنه، و نگه‌داشتن دیتابیس‌ها روی شبکهٔ داخلی داکر به‌جای باز کردن پورت خارجی.

در انتخاب بین Dokploy و Coolify هم قاعده ساده است: اگر دنبال نصب سریع سرویس‌های آمادهٔ متن‌باز هستید Coolify کتابخانهٔ غنی‌تری دارد، و اگر برنامه‌های خودتان را دیپلوی می‌کنید و احتمال می‌دهید روزی به بیش از یک سرور نیاز پیدا کنید، معماری Swarm در Dokploy مسیر هموارتری پیش پایتان می‌گذارد.

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

مقالات مرتبط