مهاجرت از Heroku به Render: راهنمای گام‌به‌گام

مهاجرت از Heroku به Render: راهنمای گام‌به‌گام

با اعلام سیاست پشتیبانی Heroku، بسیاری از توسعه‌دهندگان در حال بررسی گزینه‌های جایگزینی هستند. Render با ارائه قیمت‌های مقرون به صرفه‌تر و امکانات پیشرفته‌تر مانند شبکه‌ی خصوصی و اتصالات HTTP/WebSocket طولانی‌مدت، به عنوان یک گزینه جذاب ظاهر شده است. این راهنما شما را در مهاجرت آسان و بدون دردسر از Heroku به Render همراهی می‌کند.

قبل از هر چیز، اجازه دهید اصطلاحات کلیدی را از Heroku به Render ترجمه کنیم:

  • Heroku Dyno: سرویس در Render
  • Dyno Type (Eco, Basic, etc.): طرح محاسباتی (free, 1c-2g, etc.)
  • Instance: نمونه یا مستنس
  • Config Vars: متغیرهای محیطی

نکته‌ی مهم اینجاست که Render به طور پیش‌فرض از استقرار بی‌وقفه (Zero-Downtime deploys) پشتیبانی می‌کند، بنابراین کاربران می‌توانند با اطمینان خاطر برنامه‌های خود را به‌روزرسانی کنند.

مرحله اول: آماده‌سازی

برای شروع فرآیند مهاجرت، باید اطلاعات زیر را از Heroku جمع‌آوری کنید:

  • لیست تمام اپلیکیشن‌های مورد نظر برای مهاجرت
  • جزئیات هر اپلیکیشن شامل: فایل Procfile (با دستورالعمل‌های فرآیندها)، متغیرهای محیطی، و افزونه‌های پایگاه‌داده Heroku Postgres و Key-Value Store

جالب است بدانید که بسیاری از افزونه‌های Heroku را می‌توان پس از انتقال به Render نیز استفاده کرد. برای مثال، اگر از SendGrid در Heroku استفاده می‌کنید، می‌توانید متغیرهای محیطی مربوطه را در سرویس Render خود تنظیم کنید.

مرحله دوم: ایجاد منابع در Render

در این مرحله، باید منابع معادل اپلیکیشن‌های Heroku خود را در Render ایجاد کنید. توصیه می‌شود ابتدا پایگاه‌داده‌های Postgres و Key Value Store را ایجاد کرده و پیکربندی کنید تا برنامه‌ها بتوانند به‌طور مستقیم به آن‌ها متصل شوند.

برای هر افزونه Heroku Postgres یا Key-Value Store که می‌خواهید منتقل کنید، مراحل زیر را دنبال کنید:

  • در داشبورد Render، روی New > Postgres یا New > Key Value کلیک کنید.
  • Render یک پایگاه داده‌ی جدید فراهم می‌کند و در عرض چند دقیقه آماده استفاده می‌شود.
  • پس از آماده شدن، به صفحه‌ی اطلاعات (Info page) پایگاه داده در داشبورد Render بروید و روی منوی Connect در گوشه بالا سمت راست کلیک کنید تا URL اتصال را کپی کنید. این آدرس برای اتصال سرویس‌های Render شما به پایگاه داده استفاده خواهد شد.

نکته‌ی مهم اینجاست که انتقال مستقیم داده‌ها در این مرحله انجام نمی‌شود و در مراحل بعدی به آن خواهیم پرداخت.

مرحله سوم: پیکربندی اپلیکیشن‌ها

اکثر برنامه‌های Heroku فایل Procfile را در ریشه دایرکتوری خود دارند که دستورالعمل‌های شروع فرآیندها را تعریف می‌کند. برای مثال، یک Procfile نمونه برای یک برنامه Node.js به این صورت است:

web: npm start
worker: ./worker.js

در Render، فرآیندهای وب با سرویس‌های web و فرآیندهای پس‌زمینه با workers تعریف می‌شوند. هر سرویس web یک زیردامنه `onrender.com` دریافت می‌کند که می‌توانید دامنه‌های سفارشی خود را نیز به آن اضافه کنید.

برای ایجاد هر سرویس، باید دستورالعمل‌های ساخت و اجرای کد را فراهم کنید. معمولاً از همان دستوری که برای ساخت پروژه به‌صورت محلی استفاده می‌کنید (مانند npm install یا pip install -r requirements.txt) استفاده می‌شود.

همچنین می‌توانید یک دستور پیش‌استقرار (pre-deploy command) تعریف کنید تا قبل از هر استقرار، پایگاه داده را مهاجرت دهید و سایر تنظیمات مورد نیاز را انجام دهید. دستور شروع (start command) نیز مشابه دستور وب در Procfile شما باید باشد (مثلاً npm run start یا gunicorn your_application.wsgifor Python).

مرحله چهارم: انتقال داده‌ها و DNS

پس از راه‌اندازی تمام سرویس‌ها در Render، آماده‌ی انتقال نهایی داده‌ها و تنظیمات DNS هستید.

  • مطمئن شوید که منابع محاسباتی پایگاه‌داده‌های Render شما کافی باشد. می‌توانید منابع را در صورت نیاز افزایش دهید.
  • برای جلوگیری از تغییرات در داده‌ها، اپلیکیشن Heroku خود را به حالت maintenance ببرید.
  • URL پایگاه‌داده Render Postgres خود را دریافت کنید.
  • از دستور pg_dump برای پشتیبان‌گیری و سپس از دستور pg_restore برای بازیابی داده‌ها در پایگاه‌داده‌ی Render استفاده کنید.

با توجه به حجم بالای برخی پایگاه داده‌ها، استفاده از آپشن --jobs در هر دو دستور می‌تواند سرعت فرآیند را افزایش دهد.

در نهایت، تنظیمات DNS خود را به‌روزرسانی کنید تا دامنه‌های سفارشی شما به سرویس‌های Render اشاره کنند. این کار ممکن است چند ساعت طول بکشد تا تکمیل شود و گواهی SSL برای دامنه شما صادر گردد.

تبریک! اکنون برنامه Heroku شما با موفقیت به Render منتقل شده است. می‌توانید با کاوش در قابلیت‌های بیشتر Render، تجربه‌ی توسعه‌ی خود را ارتقا دهید.

📌 توجه: این مطلب از منابع بین‌المللی ترجمه و بازنویسی شده است.