تقریبا تمام وبسایتها و نرمافزارهای دنیا در خلال توسعه و ساخته شدن از چندین محیط Deployment یا استقرار عبور میکنند. نگهداری و مرتبسازی این محیطها درست به اندازه خود کدها اهمیت دارند. به این نکته مهم توجه داشته باشید که داشتن یک نرمافزار پُر باگ در محیط Production میتواند باعث خسارتهای مالی بسیار زیادی شود.
در این مطلب از وبلاگ همروش شما را با محیطهای استقرار یا Deployment مختلف که شامل Production ،Development و Staging میشود آشنا خواهیم کرد.
منظور از محیط استقرار یا Deployment Environment چیست؟
قبل از اینکه با انواع محیطهای استقرار آشنا شویم، نیاز است با چیستی خود آن آشنا شویم.
برای ساخت هر نرمافزاری ابتدا نیاز است که توسعهدهندگان کدهای نرمافزار را بنویسند. بعد از آن نرمافزار را روی کامپیوتر خود اجرا میکنند و بعد از Stable شدن نرمافزار، آن را برای دسترسی عمومی روی سرور دیپلوی میکنند.
در این سناریو نرمافزار در دو محیط اجرا میشود. محیط توسعه یا Development که یک فضای شخصی و محدود از نظر دسترسی بوده و برای تست استفاده میشود. محیط دوم، محیط Production است که در نهایت دسترسی عمومی به نرمافزار را فراهم میکند. به این مورد، محیط عملیاتی یا Operational Environment نیز گفته میشود.
بهصورت کوتاه محیطهای استقرار مجموعهای از پیکربندیها، کتابخانهها و سیستمهاییست که امکان اجرا کردن نرمافزار روی یک سرور یا کامپیوتر را فراهم میکنند. میتوانید مانند یک محیط کنترلشده آن را در نظر بگیرید که در آن کدهای شما به قصدهای مختلف اجرا میشوند.
آشنایی با انواع محیطهای استقرار
برای بیشتر نرمافزارها (اغلب در مقیاس کوچک) تنها همین دو محیط استقرار در نظر گرفته میشود. اما برخی از شرکتها بیشتر از این دو محیط را در نظر گرفته و محیطهای استقرار دیگری را نیز پیادهسازی میکنند. در اغلب چنین مواردی، یک محیط استقرار دیگر به نام Staging نیز به این موارد اضافه خواهد شد.
بنابراین سه محیط اصلی که در ادامه راجع به آنها صحبت خواهیم کرد عبارت از موارد زیر خواهد بود:
- محیط توسعه یا Development
- محیط مرحلهبندی یا Staging
- محیط محصول نهایی یا Production
محیط توسعه یا Development
محیط توسعه، نقطه شروع هر نرمافزاری است. محیط توسعه جاییست که در آن نرمافزار ساخته میشود. عمدتا روی کامپیوتر توسعهدهندگان این محیط پیادهسازی شده و در نتیجه بسیاری از تستها نیز در همان محیط اتفاق میافتد.
در بسیاری از شرکتها نیز محیط توسعه یک محیط یکپارچه و مرکزی است که تمام توسعهدهندگان به آن دسترسی داشته و کدهایشان را در نهایت روی آن قرار میدهند. دسترسی به این فضا محدود بوده و تنها کارکنان داخلی میتوانند از آن استفاده کنند. در بیشتر حالتها این محیط برای صرفهجویی در هزینهها روی یک سرور پیادهسازی میشود.
![](https://hamravesh.com/blog/wp-content/uploads/2024/04/dev-env-1024x537.webp)
محیط مرحلهبندی یا Staging
محیط مرحلهبندی یا Staging فرایند مشابهی با محیط توسعه را دنبال میکند اما با یک هدف جداگانه. در این محیط توسعهدهندگان سعی میکنند تا فضایی مشابه با فضای محصول نهایی را پیادهسازی کنند بدون اینکه آن را بهصورت عمومی منتشر کرده باشند.
در محیط مرحلهبندی تمام نیازمندیها و ابزارهایی که قرار است در محصول نهایی استفاده شود، بهکار گرفته میشود. اما در این محیط از دادههای واقعی استفاده نخواهد شد. بنابراین این مرحله بیشتر یک Mimic یا تقلید از محیط پروداکشن بهحساب میآید.
درست است که در این مرحله کاربران واقعی به نرمافزار دسترسی ندارند اما میتوان تستهایی از طرف جمعی از کاربران روی آن صورت بگیرد. بنابراین میتوان این محیط را بخشی از محیط تستینگ و Beta Testing نیز دانست.
اهمیت محیط مرحلهبندی یا Staging چیست؟
همانطور که گفته شد در برخی از حالتها از محیط Staging استفاده نمیشود، اما چه موضوعی باعث میشود که شرکتهای بزرگ چنین محیطی را پیادهسازی کنند؟
تصور کنید بهتازگی ویژگی جدیدی به نرمافزار اضافه کردهاید و روی نسخه پروداکشن آن را قرار دادهاید، بعد از چند روز متوجه میشوید که ویژگی جدید چند باگ جدی داشته و نیاز است که بهسرعت حل شود. این موضوع روی کسبوکار شما تاثیر خواهد گذاشت و در نهایت مشتریان را ناراضی میکند.
اهمیت محیط Staging دقیقا همین موضوع است. بعد از توسعه ویژگی جدید نیاز است که آن را ابتدا در محیط Staging تست کرده و به درک کاملی از چگونگی کارکرد آن برسید. با تستهای مختلف آن را بررسی کنید و در نتیجه بعد از مطمئن شدن از پایداری آن، روی محیط پروداکشن (محصول نهایی) قرار دهید.
البته مشکلی که این محیط دارد این است که فرایند توسعه محصول را کمی کُندتر میکند و ممکن است هزینههای جدیدی را برای شما در پی داشته باشد.
محیط محصول نهایی یا Production
محیط محصول نهایی (محیط عملیاتی) حساسترین محیط اجرایی نرمافزار است. از این نقطه به بعد کسبوکارها محصولاتشان را به مشتریان واقعی ارائه میدهند و در نتیجه باید خروجی را در بهترین حالت ممکن مدیریت و نگهداری کرد.
مانیتورینگ از مهمترین موضوعاتی است که از این نقطه به بعد باید به کار اصلی توسعهدهندگان تبدیل شود. کنترل کردن تمام کاربریها و عملکرد هر کدام از ویژگیها از جمله مواردی است که توسعهدهندگان روی آن باید کار کرده و از سلامت اجرایی نرمافزار مطمئن شوند.
البته جدای از خود نرمافزار، در این مرحله باید به موارد بسیار مهمتری نیز فکر کرد. یکی از این موارد زیرساخت است. سرورهایی که شما خریداری میکنید و نرمافزار را روی آن قرار میدهید، آیا امکان پاسخگویی به ترافیک ورودی را دارد؟ چگونه میخواهید موضوع مقیاسپذیری را حل کنید؟ اگر سرور از کار بیفتد آیا نسخه پشتیبانی از آن قبلا تهیه کردهاید که بتوانید از آن استفاده کنید؟ تمام این مسائل در کنار موارد دیگری منجر به این میشود که وارد شدن به فاز Production سخت شود.
همروش برای حل نگرانیهای زیرساخت کسبوکار شما ابزار دارکوب را ارائه کرده است. با استفاده از دارکوب شما نیازی به نگرانی از مدیریت زیرساختتان نخواهید داشت چرا که همه چیز در یک محیط منعطف و کاملا مدیریتشده پیش میرود. در نتیجه نگرانیهای ذکر شده در پاراگراف قبلی از بین رفته و شما میتوانید بهصورت کامل روی توسعه محصول نهاییتان تمرکز کنید.
![محیط عملیاتی یا محصول نهایی یا پروداکشن](https://hamravesh.com/blog/wp-content/uploads/2024/05/prod-env-1024x537.webp)
در پایان
Production ،Development و Staging سه مورد از محیطهای استقرار شناخته شده است که توسط بیشتر شرکتها مورد استفاده قرار میگیرد. اما ممکن است برخی از شرکتها براساس نیازهای شخصی خودشان، محیطهای دیگری را نیز به این معادله اضافه کنند.
برای مثال در برخی حالات محیط Testing نیز به این فرایند اضافه میشود. هدف از چنین محیطی انجام انواع تستهای مختلف روی نرمافزار بهصورت تخصصی است.
در این مطلب از وبلاگ همروش با چیستی هر کدام از محیطهای استقرار Production ،Development و Staging آشنا شدیم و اهمیت هرکدامشان را بررسی کردیم.