برنامه‌نویسی

۱۰ دلیل برای این‌که نباید از سرور VPS استفاده کنید!


۱۲ فروردین ۱۳۹۹

برنامه‌تون رو نوشتید و حالا با کلی ذوق می‌خواید اون رو به دنیا نشون بدید. قراره کلی کاربر جذب کنید و یه تجربه‌ی خیلی خوب براشون رقم بزنید. اما نمی‌دونید که باید از کجا شروع کنید. دل‌تون می‌خواد که فقط روی برنامه‌تون و بازخورد کاربران‌تون متمرکز باشید، اما حالا درگیر VPS فروشی‌ها شدید.

باید لینوکس یاد بگیرید!

نمی‌دونید که باید چه سیستم‌عاملی رو انتخاب کنید. همه لینوکس رو پیشنهاد می‌دن. ولی وقتی لینوکس رو هم انتخاب می‌کنید، کلی توزیع‌های مختلف از اون با اسم‌هایی مثل Ubuntu و CentOS وجود داره و مطمئن نیستید که کدوم‌شون مناسب برنامه‌ی شماست.

اگه هم در نهایت انتخاب‌تون رو کردید و VPS رو بهتون تحویل دادن، می‌دونید که باید از کجا شروع کنید؟ اگه فرض رو بر این بگیریم که موفق به SSH زدن بشید، می‌دونید اولین گام‌هاتون باید چی باشه؟ چطور می‌شه یه برنامه رو روی سرور نصب کرد؟ چطور فایروال رو باید کانفیگ کرد؟ اگه یه نفر تلاش کرد که رمز عبور ورود به VPS شما رو حدس بزنه، چطور جلوش رو می‌گیرید؟

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

باید نحوه اجرای برنامه‌هاتون مثل Django ،NodeJS ،Laravel و… رو روی سرور یاد بگیرید!

زمانی که اولین‌بار VPS رو تحویل می‌گیرید، حق دارید که نگران باشید. چون این دنیای ناشناخته، اون‌قدری ترسناک هست که کلا قید راه‌اندازی برنامه‌تون رو بزنید و این کار رو به کس دیگه‌ای بسپارید. احتمالا باید یه نیروی DevOps و یا SysAdmin استخدام کنید تا سرورتون رو راه‌اندازی کنه.

بیایید فرض کنیم که برنامه‌تون رو با فریم‌ورک فوق‌العاده‌ی Laravel نوشتید. باید روی سرور npm و composer رو نصب کنید. باید PHP و احتمالا Apache رو هم نصب کنید. اکستنشن‌های پردردسر PHP هم که همیشه گریبان‌گر هستن. یه تعدادی‌شون رو هم احتمالا نیاز دارید که کامپایل کنید. تازه همه‌ی این نصب‌ها که تموم شد، باید Apache و در واقع وب‌سرورتون رو کانفیگ کنید. سطح دسترسی فایل‌های روی سرور و همین‌طور فایروال رو تنظیم کنید.

تازه اگه همه‌ی این مراحل رو انجام بدید، باید دنبال راه حلی باشید که بتونید به سادگی سورس‌کدتون رو به سرور منتقل کنید و سایت‌تون رو به‌روز کنید. این همه زمان برای کانفیگ VPS صرفا برای این که بتونید برنامه‌تون رو اجرا کنید. این مراحل فقط برای لاراول بود. اگه یه برنامه با NodeJS داشتید چطور؟ باز هم کلی مراحل دیگه.

حتی این مسئله می‌تونه پیچیده‌تر هم بشه. مثلا فرض کنید که بیشتر از یه برنامه‌ی لاراولی دارید. که خیلی هم رایج هست. برای این کار، یه VPS قوی تهیه می‌کنید چون می‌خواید چندتا از سایت‌هاتون رو روی یه VPS قوی اجرا کنید. اینجا تنظیمات خیلی بیشتری رو باید اعمال کنید و باید حواس‌تون به خیلی چیزهای بیشتری باشه.

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

نگهداری کار راحتی نیست. نصف شبی کارفرما باهاتون تماس می‌گیره و می‌گه که سایت در دسترس نیست. شما هم یه برنامه‌نویس هستید و مطمئنید که مشکلی توی برنامه‌تون نیست. به سرور VPS تون وصل می‌شید و سرور رو زیر رو می‌کنید تا مشکل رو پیدا کنید.

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

هربار که می‌خواید تغییرات و کدهای جدیدتون رو روی سرور قرار بدید، سایت‌تون میاد پایین!

بعد از راه‌اندازی اولیه‌ی VPS، کار همین‌جا تموم نمی‌شه. بلکه تازه شروع می‌شه. فرض کنید تغییراتی رو هم داخل سایت‌تون اعمال کردید و قصد دارید این کدهای جدیدتون رو به سرور منتقل می‌کنید.

یه راهی رو برای آپلود سورس‌کدتون پیدا می‌کنید. آپلود که تموم شد، وب‌سرور رو ری‌استارت می‌کنید تا تغییرات جدید لحاظ بشه و اینجاست که سایت برای لحظاتی از دسترس کاربرای شما خارج می‌شه و دوباره در دسترس قرار می‌گیره.

حالا فرض کنید که گزارش باگ دریافت می‌کنید و فورا این باگ‌ها رو رفع می‌کنید و حالا باید دوباره سورس‌کد و تغییرات رو به سرور منتقل کنید و وب‌سرور رو ری‌استارت! اینجاست که دوباره سایت‌تون برای لحظاتی از دسترس خارج می‌شه. قطعا این تجربه‌ی خوبی برای هر کسی که از خدمات شما می‌خواد استفاده کنه، نیست.

دوباره امکان جدید و بزرگ‌تری رو به برنامه‌تون اضافه کردید و حالا دوباره می‌خواید تغییرات رو بفرستید روی سرور. آپلود می‌کنید، ری‌استارت و بووم! سایت‌تون بالا نمیاد. بعد از چندین دقیقه متوجه می‌شید که پکیج جدیدی رو توی کامپیوتر خودتون نصب کرده بودید اما یادتون رفته روی سرور نصب کنید. گوگل رو باز می‌کنید و با کلی سرچ و آزمون خطا و وارد کردن کلی دستورات مختلف، موفق می‌شید که اون Dependency رو روی سرور نصب کنید. سایت هم که طی این مدت پایین هست و کاربران‌تون منتظر!

نباید اشتباه کنید، راه برگشتی نیست!

یه دستور خطرناک، پاک‌کردن اشتباهی یه فایل و بووم! دوباره سایت از دسترس خارج می‌شه. مراقب باشید با هر کاری که روی سرور می‌کنید، این احتمال هست که چیزی رو خراب کنید و یا فایلی رو حذف کنید. خیلی‌وقت‌ها راه برگشتی نیست.

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

قطعا ترجیح می‌دید که یک راهی داشتید که خیلی سریع به نسخه‌ی قبل بر می‌گشتید. اما متاسفانه بازگشت به یه نسخه‌ی قبل‌تر VPS تون، کار ساده‌ای نیست و نمی‌تونید از اول شروع کنید. باید مشکل رو رفع کنید!

ممکنه داده‌های دیتابیس‌تون رو از دست بدید!

یک لحظه فرض کنید که این اشتباهات احتمالی، باعث بشن که داده‌های دیتابیس‌تون رو از دست بدید! بین این همه شلوغ‌پلوغی‌های کانفیگ سرور، یادتون بوده که از دیتابیس‌تون هم بک‌آپ بگیرید؟ بک‌آپ‌ها رو کجا ذخیره می‌کنید؟ روی همون سرورتون؟ اگه هاردتون بسوزه چی؟ پس نیاز به یه هارد دیگه هم برای ذخیره‌ی بک‌آپ‌ها دارید.

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

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

اگه کاربران‌تون زیاد شدن و ترافیک‌تون بالا رفت، نمی‌تونید بلافاصله ارتقا بدید.

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

حتی ممکن هست به طور کل سایت‌تون از دسترس خارج بشه در حالی که شما همچنان منتظرید تا تیم پشتیبانی VPS تون رو ارتقا بده. چقدر خوب می‌شد که می‌تونستید هر زمان که نیاز داشتید از منابع بیشتر استفاده کنید و هر زمان که نیازی نداشتید، به پلن قبلی‌تون برگردید.

اگه فقط برای چند ساعت تست، یه سرور بخواید، چی؟

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

تو این مرحله، وقتی که دوباره به مراحل تهیه و راه‌اندازی VPS فکر می‌کنید، از خیر دمو و پیش‌نمایش می‌گذرید. حتی این رو هم می‌دونید که معمولا VPS رو برای یک ماه بهتون تحویل می‌دن و شما نمی‌تونید فقط برای چند ساعت یه سرور داشته باشید. حتی زمانی که سفارش می‌دید و می‌خوان VPS رو بهتون تحویل بدن هم ممکنه نزدیک ۲۴ ساعت و یا حتی بیشتر منتظر بمونید.

بنابراین ترجیح می‌دید که به همون اسکرین‌شات‌هایی که می‌گیرید بسنده کنید و فقط چندتا عکس از خروجی کار رو به کارفرما یا اعضای تیم‌تون نشون بدید. هر چند که ته دل‌تون می‌خواستید که بتونن با برنامه‌ای که نوشتید تعامل داشته باشن و مثلا روی یه آدرسی مثل test.example.ir بتونن خروجی نهایی رو توی مرورگرشون ببینن و نظرشون رو بگن.

امنیت شوخی‌بردار نیست!

بعد از تحویل گرفتن VPS، باید یه سری موارد امنیتی رو هم توی سرور پیاده‌سازی کنید. چه چیزهایی؟ مثلا این که سطح دسترسی کاربران درست و اصولی تنظیم شده؟ اطلاعات نرم‌افزار در جایی نگهداری می‌شن که فقط افرادی که مجاز هستن، دسترسی داشته باشن؟ پورت‌هایی که باز کردید رو می‌دونید دقیقا برای چه کاری باز کردید؟ مطمئن هستید که راه‌های دسترسی به سرورتون از بیرون امنه؟ و کلی چیز دیگه که اگر حواس‌تون نباشه ممکنه یه روز، نرم‌افزار و به تبع‌اش کسب و کار‌تون در معرض تهدید خیلی جدی‌ قرار بگیره! موارد دیگه‌ای مثل امنیت دیتابیس‌ها، وب سرورها و … هم باید تامین بشه.

با چشم بسته نمی‌شه رانندگی کرد.

با جمله‌ی بالا موافقید دیگه، نه؟ اگه همه‌ی کارهایی که تو بخش‌های قبلی گفتیم رو هم انجام داده باشید، باز هم یه سری چیزها می‌مونه. خیلی زیاد شد، نه؟ یکی از اون‌ها، راه‌اندازی مانیتورینگ هست. بلاخره باید ببینید که میزان مصرف منابع‌تون چقدر هست. چقدر از CPU استفاده می‌کنید، چقدر RAM دارید و به طور کلی چقدر از منابع‌تون دارید استفاده می‌کنید. حتی گاها ممکنه نیاز داشته باشید که ببینید در طی دو روز گذشته و یا یک هفته‌ی گذشته نمودار مصرف منابع‌تون چطور بوده تا بتونید تصمیم‌گیری کنید یا علت مشکلی رو تو زمان خاصی پیدا کنید. این نمودارها حتی کمک‌تون می‌کنن تا بتونید الگوی مصرف منابع‌تون رو پیدا کنید و ببینید که بیشترین مصرف رو برای مثال شب‌ها دارید یا روزها و چه ساعت‌هایی.

فرض کنید همه این‌ها رو هم پیاده کردید، اگر یک روزی RAM سرورتون به خاطر یک باگ نرم‌افزاری توی برنامه‌تون پر شد، چه اتفاقی رخ می‌ده؟ آیا سرورتون Crash می‌کنه؟‌ آیا سرورتون جلوش رو می‌گیره؟ اگر سرور Crash کنه میدونید چی می‌شه؟‌ آیا ممکنه بلایی سر فایل‌ها بیاد؟ اگر سرور دوباره بیاد بالا برنامه شما هم به صورت خودکار اجرا می‌شه؟ یا باید حتما بالای سر سرور باشید و برنامه‌هاتون رو تک به تک اجرا کنید؟

برنامه‌ام رو نوشتم و فقط می‌خوام به دنیا نشونش بدم، همین!

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

سرویس ابری لیارا، به شما VPS نمی‌فروشه. ما از قبل همه چیز رو براتون کانفیگ و آماده کردیم و فاصله‌ی بین ایده تا اجرای اون فقط یک دستور هست. اگه برنامه‌تون رو با فریم‌ورک‌ها و پلتفرم‌های معروفی مثل Django ،NodeJS ،Laravel و… نوشتید، همین الان به جمع چند هزار نفره‌ی برنامه‌نویس‌هایی که از لیارا استفاده می‌کنن بپیوندید.