قرار بود درباره سرور خانگی (home server) مطلبی بنویسم. بالاخره هرکسی سرگرمیهایی دارد و یکی از سرگرمیهای من هم راه انداختن یک سرور خانگی شده است. اولین تجربه در این مورد برمیگردد به اواخر دوره ارشد که یک embedded board خریده بودم که سیپییوی آن ARM بود و یک FPGA شرکت آلترا هم کنارش گذاشته بودند. قصد داشتم از این بورد به عنوان یک روتر استفاده کنم ولی چون درایورهایش باگ داشتند بعد از مدتی بیخیال کار کردن با آن شدم. اثر این تجربه و زمانی که در این مدت صرف کرده بودم آنقدر عمیق بود که احساس میکردم واقعیت و دنیای واقعی هیچوقت کامل نیستند و شروع کردم این عدم کمال را در دنیای مجرد و تئوری جستجو کنم. همین شد که با وجود اینکه از کودکی تا آن موقع علائقم بیشتر جنبه مهندسی داشتند، ولی تز دکترایم را کاملا در زمینه تئوری برداشتم و این جاذبه دنیای تئوری و کمالی که راحتتر میشود به آن رسید، هنوز هم با من است!
حالا آن ماجرا بماند برای بعد. برگردم به موضوع سرور خانگی. حدود یکسال و نیم تا دو سال پیش باید بوده باشد که دوباره تصمیم گرفتم با یک بورد رزبریپای (Raspberry Pi) که طراحی یک شرکت انگلیسیست و اندازه و قیمت مناسبی دارد یک فایلسرور جمعوجور راه بیاندازم. سیپییو این برد هم ARM است ولی خیلی قویتر از سیپییو برد اول است (اگر اشتباه نکنم کلاک آن حدود پنج برابر کلاک سیپییو قبلیست و به جای یک هسته، چهار هسته دارد). نسخه دبین (Debian) لینوکسی که برایش سفارشی شده (Raspbian) هم خیلی خوب و پایدار از آب در آمده است. اما خیلی زود محدودیتهای این برد ادامه کار را سخت کرد. من میخواستم برای اطمینان بیشتر حداقل دو هارد را برای سرور فایل به صورت RAID-1 پیکربندی کنم ولی بورد رزبریپای پورت ساتا (SATA) برای اتصال هاردها ندارد و پورتهای یواسبی آن هم با یکدیگر مالتیپلکس (multiplex) شدهاند که در نتیجه آن، کارایی انتقال اطلاعات از/به دیسکها به شدت افت میکند. قدرت سیپییو آن هم آنقدر زیاد نیست که بشود چندین سرور را بر روی آن بالا آورد. به این ترتیب بعد از مدتی جستجو در اینترنت و بازار رضا و … بالاخره یک مادربورد Mini-ITX (که نسبت به اندازه مادربوردهای معمولی کوچکتر هستند) با سیپییو J1900 اینتل پیدا کردم که چهار هسته دارد و تا هشت گیگابایت حافظه را پشتیبانی میکند. توان مصرفی J1900 هم خیلی مناسب است، چیزی در حدود ۱۰ وات. در مورد منبع تغذیه و نحوه راهاندازی بورد در ادامه بیشتر صحبت میکنم.
قبل از آن باید به دو نرمافزار اشاره کنم که به نظرم مهم هستند. اولی Kernel-based Virtual Machine است که یک پیادهسازی مجازیسازی (مانند Virtual box یا VMware) در خود لینوکس است که خیلی به جداکردن سرویسهای مختلف بر روی یک سرور کمک میکند و فرایند تست، بهروزرسانی و نگهداری را تسهیل میکند. دومین نرمافزار هم pfSense است که یک روتر/دیوار آتش (Router/Firewall) متن باز است و در حد خودش امکانات زیادی دارد. در ابتدای کار یک نسخه از pfSense را توسط KVM به عنوان یک ماشین مجازی اجرا و به عنوان دیوارآتش استفاده میکردم. بعدتر یک بورد Mini-ITX جدا با همان سیپییو J1900 و چهار پورت شبکه برای این کار گرفتم تا برای امنیت و قابلیت اطمینان بیشتر دیوار آتش و سرور اصلی از یکدیگر جدا باشند.
با کلی سعی و خطا و پرسوجو، بالاخره یک کیس Green پیدا کردم و توانستم دو تا برد را همزمان در آن جا بدهم. برای pfSense هارد ۲/۵ اینچی قبلی لپتاپم را استفاده کردم. برای سیستمعامل سرور اصلی هم اول یک هارد ۲/۵ اینچی دیگر گرفته بودم ولی بعدتر که یک SSD سامسونگ گرفتم کارایی سیستم خیلی بهتر شد (خصوصا برای سرور Zabbix که بعدتر به آن اشاره میکند). برای نگهداری و پشتیبانی فایلها هم دو هارد ۳/۵ اینچی را به صورت نرمافزاری با هم RAID-1 کردم (RAID-1 برای افزایش اطمینان بیشتر، دو نسخه یکسان از سیستم فایلها را بر روی دو هارد نگه میدارد).
تا اینجای کار خیلی هم خوب بود! فقط یک مشکل بزرگ وجود داشت و آن هم این که در ایران قطعیهای کوتاه برق (مثلا در حد یک تا چند ثانیه) زیاد داریم و همین قطعیها در بهترین حالت میتوانند سازگاری اطلاعات فایلها و دیتابیسها را بر روی دیسکها خراب کنند. در حالت شدیدتر آن، ممکن است لازم شود دیسکها فرمت شوند و سیستمعامل دوباره نصب شود و غیره. به هر حال برای حل کردن این مشکل میتوان از UPS استفاده کرد. ولی یوپیاسها عموما وسایل گرانی هستند، خصوصا اگر بخواهیم که برای مدت طولانیای، مثلا تا ده ساعت، کار کنند (چون قطعیهای طولانی هم کم نداریم). به همین دلیل یک راه حل سادهتر پیدا کردم. شرکت Meanwell که در زمینه منابع تغذیه سویچینگ کار میکند، مدلی از منبع تغذیه را تولید میکند که عملکرد UPS هم دارد (برای اطلاعات بیشتر مدل PSC-100AC را ببینید). البته خروجی این منبع تغذیه ۲۲۰ ولت نیست، بلکه تقریبا ۱۲ ولت است. با استفاده از یک باطری ۱۸ آمپر-ساعت که برای یوپیاسها طراحی شده است و استفاده مناسب از ماژولهای افزاینده و کاهنده ولتاژ و ماژول منبع تغذیه picoPSU میتوان مادربردها و سیپییوهای کممصرف را فقط با ولتاژ ۱۲ ولت هم راه انداخت. با پیکربندیای که در بالا توضیح دادم، کل سیستم تا حدود ۱۰ ساعت میتواند بدون برق روشن باشد. امروز که نگاه کردم روتر pfSense خانه بیش از ۲۴۰ روز است که بدون خاموش شدن کار کرده است. سرور اصلی هم بیش از ۱۲۵ روز است که خاموش نشده است. مدت زمان روشن بودن میتوانست خیلی بیشتر از اینها باشد، ولی به علت تغییرات سختافزاری یا بهروز رسانی نرمافزاری لازم بوده که سرور و روتر را ریاستارت کنم.
از اینجای کار به بعد، اینکه چه سرویسی بر روی سرور اجرا شود به نیازها و خلاقیت کاربر بستگی دارد. همانطور که بالا گفتم، سرویسهای مختلف را بر روی ماشینهای مجازی جداگانه اجرا میکنم. این کار باعث میشود عملا مسایل مربوط به سیستم عامل اصلی از هریک از ماشینهای مجازی جدا شود. به همین دلیل عملیات بهروزرسانی، تهیه نسخه پشتیبان، تست کردن پیکربندی جدید و غیره با سهولت و سرعت بسیار بیشتری انجام میشود. به عنوان مثال در این مدت سیستم عامل سرور اصلی از Ubuntu به CentOS به Debian و … تغییر کرده است. ولی ماشینهای مجازی اصلی در طول این مدت تغییر نکردهاند و فقط از یک سیستم به سیستم دیگر منتقل شدهاند.
از نظر نرمافزاری، به صورت خاص با چند مورد خیلی حال کردهام که در ادامه اشاره مختصری به آنها میکنم. اگر کسی برایش حریم شخصی مهم باشد و علاقمند نباشد که فایلهایش را در دراپباکس، گوگلدرایو و … قرار دهد، توصیه میکنم نگاهی به Owncloud بیاندازد که سرویسی شبیه دراپباکس است، با این تفاوت که نرمافزاری متن باز است و میتوان آن را بر روی سرور شخصی اجرا کرد. همچنین برای ویندوز، مک، لینوکس، اندروید و آیفون هم کلاینتی دارد که همانند دراپباکس کار میکند. بیشتر از آن، هسته مربوط به تقویم و دفترچه تلفن هم دارد که میتوانید از آن برای همزمان کردن اطلاعات بین وسایل مختلف خود استفاده کنید. در مدتی که از Owncloud استفاده کردهام میتوانم بگویم که در جمع نرمافزار خیلی خوب و پایداری است. البته انتظار یک نرمافزار شرکت بزرگی مانند گوگل را نباید داشته باشید ولی در جمع خیلی خوب از کار درآمده است. این را هم بگویم که نسخه موبایل نرمافزار Owncloud پولی است (البته من بدم نمیآید پول بدهم و سرویس خوب دریافت کنم. این حس را هم دارم که احتمالا این نرمافزار برای مدت طولانیتری در بازار خواهد بود و پشتیبانی خواهد داشت).
نرمافزار دیگری که خیلی از آن خوشم آمده Zabbix است که یک نرمافزار متن باز برای مانیتورینگ شبکه و سرور و … است. اگر از کنار پنجره مرکز محاسبات دانشگاه رد شوید و پردهها کنار باشند، بر روی مانیتورهای دیوار میتوانید صفحههای Zabbix را مشاهده کنید. شاید برای یک شبکه خانگی، Zabbix خیلی بیش از نیاز باشد. ولی به هر حال اینکه میتوانم همه سرورهای مختلفم را هرکجا که میخواهند باشند (چه در خانه، چه در دانشگاه و چه در جاهای دیگر) به راحتی مانیتور کنم، برایم جذاب است.
اگر مثل من مجبورید از اینترنت بیسیم و موبایل و … استفاده کنید که خلاصه آیپی ثابت و جهانی ندارید، برای وصل شدن به سرورتان از خارج از محل آن با مشکل مواجه میشوید. یک راهحلی که میشود از آن استفاده کرد، اگر جای دیگر و برای کاری دیگر سروری دارید که آیپی ثابت دارد و شما دسترسی SSH از راه دور به آن دارید، میتوانید از تکنیک Reverse SSH Tunneling استفاده کنید که با یک گوگل کردن ساده و مقداری man page خواندن میتوانید به راحتی توضیحاتی درباره آن پیدا کنید. فقط چون احتمالا اینترنت به کرات ممکن است قطع شود دستور autossh خیلی به دردتان خواهد خورد.
چند کلمه هم درباره اینترنت بگویم. با توجه به مطالبی که در بالا گفتم، اگر سرعت، کیفیت و قابلیت اطمینان اینترنت خوب بود و قیمت آن هم ارزانتر بود، واقعا این امکان وجود داشت که یک نفر سرویسهای نهچندان حیاتیاش، مانند سرویس وب (سایت شخصیاش، وبلاگهایش و …) و حتی ایمیلاش را بر روی سرور خانگیاش راهاندازی کند. فعلا با توجه به وضعیت اینترنت ایران با چنین روزی فاصله داریم. شاید حدود پنج تا هفت سال دیگر بشود چنین سرویس اینترنتی داشته باشیم. با توجه به زمان ورود عمده کابران ایران به بازار اینترنت و همزمان شدن آن با گسترده شدن استفاده از موبایل، زیرساخت اینترنت ثابت (مانند اینترنت ADSL، اینترنت کابلی و فیبر نوری) چندان خوب توسعه پیدا نکرده است. اینترنت بیسیم و مبتنی بر موبایل هم اگرچه ممکن است سرعت خوبی داشته باشد ولی بقیه پارامترهای یک اینترنت با کیفیت برای یک سرور را ندارد. فعلا مجبورم از اینترنت موبایل استفاده میکنم چون تنها شرکتی که میتواند در محل ما خدمات ADSL بدهد خود شرکت مخابرات است و شنیدهام که کیفیت ارایه خدماتشان اصلا خوب نیست.
در ادامه زمان ping یکی از سرورهای DNS گوگل را در یک روز خوب و یک روز نه چندان خوب برای اینترنت موبایل میبینید. در روزهای بد هم که کلا اینترنت قطع میشود!
پینوشت: شاید بعدتر اگر نکته جدیدی به ذهنم رسید به این نوشته اضافه کنم.