راه اندازی وب سرور و میزبانی سایت روی لپتاپ

در این مقاله سعی کردم در قالب راه اندازی وب سایت روی کامپیوتر شخصی، در مورد لینوکس و شبکه و سرور و کارهای مرتبط باهاشون بیشتر بنویسم. روندی که استفاده کردم یک روند استاندارد و تروتمیز به حساب نمیاد، اما می‌تونه مرجع مناسبی برای راه اندازی یک وب سرور شخصی لینوکسی برای کارهای شخصی و یا حتا کارهای مهم‌تر باشه. نکته مهم که در بیشتر راهنماهای فارسی و انگلیسی رعایت نشده اینه که نگارنده‌ی این مقالات (که در دسته مقدماتی جا می‌گیره) معمولا یک لینوکس کار حرفه‌ای هست و در ذهنش یک سری فرضیات وجود داره و هر چی تلاش کنه خودشو جای افراد تازه کار قرار بده باز هم نکات ریزی رو نمیتونه ببینه؛ اما این مقاله توسط همچین آدمی نوشته نشده، من برای تفریح در چند سال اخیر و بواسطه raspberry و کارهای کوچک IOT با لینوکس کار کردم و اگر مبتدی باشید میتونید روی چیزهایی که میگم حساب کنید، چون تفاوت زیادی بین من و شما نیست. تا جایی که بتونم مفاهیمی که فکر میکنم برای تازه کارها نیاز به توضیح داره رو توضیح دادم و یا اگر پیچوندم، ذکر می‌کنم که دارم میپیچونم؛ یعنی تقریبا چیزی از دست نمیدید، حداقل میدونید چیا رو نمیدونید!اگر هیچ چیز از لینوکس نمی‌دونید، اگر نمی‌دونید یک سایت چطور کار می‌کنه و کلا وب سرور چی هست ولی علاقمند به دونستنش هستید، این مقاله به درد شما می‌خوره.اگر برنامه نویس هستید و فقط درگیر کد بودید و مراحل پابلیش خیلی براتون اهمیت نداشته ولی دوست دارید از وب سرورها سر در بیارید، این مقاله به درد شما میخوره.لینک هایی که توی این مقاله استفاده شده از بهترین‌ منابع هستند، موضوع فقط گوگل کردن و لینک دادن نبوده و حتما -اگر از روی آن پیاده سازی صورت نگرفته باشد- حداقل یکبار کامل مطالعه شده اند.مواد لازم :یک سیستم بلا استفاده (یک لپتاپ قدیمی داشتم و عنوان مصدوم استفاده کردم، اگر سیستم اضافه ندارید میتونید از نرم افزارهای مجازی سازی استفاده کنید و "سرور مجازی" بالا بیارید. روند نصب مجازی سازها و نصب یک سیستم عامل روی آنها کار ساده‌ای است. به نظرم دستورالعمل این لینک رو بخونید یا این ویدیو رو ببینید و یکبار پیاده کنید و سپس این مقاله رو بخونید.)فایل اوبونتو سرور (از اینجا نسخه LTS رو دانلود کنید. این نسخه پشتیبانی طولانی مدت داره و نسبت به آخرین ورژن همین مزیتشه)یک فلش مموری خالیمودمِ متصل به اینترنت و کابل شبکه برای اتصال مستقیم سیستم به اینترنت هنگام نصبنرم افزار rufus (با فرض اینکه با ویندوز کار میکنید این نرم افزار بر اساس فایل های نصب اوبونتو برای شما فلش بوتیبل میسازد. bootable کردن فلش، شما را از دی وی دی یا سی دی بی نیاز میکند.)آماده سازی فلش مموریِ ubuntu server و شروع نصب فلش خود را با محتوای ubuntu server بوتیبل کنید. ظاهر نرم افزار rufusاز بخش Device مسیر فلش خود را انتخاب کنید. از بخش Boot selection فایل دانلودی ubuntu server را انتخاب کنید. به بقیه موارد کاری نداشته باشید و دکمه Start را فشار دهید.پس از آماده شدن فلش مموری، دکمه Close را بزنید و فلش خود را روی سیستمی که میخواهید لینوکسی شود منتقل کنید. مطمئن باشید که درایو بوت سیستم با اولویت فلش مموری تنظیم شده باشد. برای اینکار از دکمه DEL یا F2 در هنگام روشن شدن کامپیوتر استفاده کنید تا setup سیستم اجرا شود.ستاپ سیستم شما چیزی شبیه این است!به بخش Boot رفته و صفحه ای مثل صفحه زیر را خواهید دید، با دکمه هایی که در زیر صفحه به آن اشاره شده اولویت اول بوت خود را به جای درایو سی دی یا دیسک، به فلش مموری(Removable Devices) بدهید.مثلا در این سیستم با دکمه + و - اولویت تغییر میکند.(پایین صفحه)پس از ذخیره و خروج از ستاپ سیستم، کامپیوتر شما با بوت فلش شروع به کار خواهد کرد و تصویری شبیه شکل زیر خواهید دید.(منبع توضیحات نصب و تصاویر)شروع نصب با انتخاب زبانپس از انتخاب زبان، کیبورد خود را باید انتخاب کنید. بدون تغییر روی done فشار دهید تا به مرحله بعد برویم.انتخاب کیبوردسپس گزینه های زیر را میبینید که طبیعتا اولین گزینه را انتخاب میکنید. برنامه‌نصب اتصال شما به شبکه را تست میکند. سیستم شما باید با کابل به مودم وصل شده باشد تا برنامه نصب بتوانید یک آی پی به سیستم شما اختصاص دهد. فعلا حالت پیش فرض را انتخاب میکنیم، بعدا میتوانیم ip استاتیک تعریف کنیم.انتخاب حالت پیشفرض برای تخصیص ipدر مرحله بعد پارتیشنی که میخواهید روی آن نصب انجام شود را انتخاب میکنید یا حالت کل دیسک (اولین گزینه) را انتخاب میکنید.حالت های مختلف نصب روی دیسکاگر گزینه اول را انتخاب کنید کار خاصی برای انجام نخواهید داشت.اما گزینه manual به شما امکان تنظیم حجم هر پارتیشن را میدهد. این مقاله پیشنهاد زیر را داده است.پیشنهاد برای پارتیشنها، اگر گزینه manual را انتخاب کرده باشید.در حالت manual برای هر یک از پارتیشن ها یک صفحه جدید خواهید دید که دکمه create را برای ایجاد باید فشار دهید. در حالت user an entire disk کافیست مراحل را done کنید.در مرحله بعد مشخصات شما را میخواهد.در انتخاب نام سرور و یوزرنیم دقت کنید چون همیشه جلوی چشم شما خواهد بود!و در نهایت نصب شروع خواهد شد.عملیات نصبپایان نصب و ریبوت کردن سیستمپس از بوت شدن سیستم باید ابتدا یوزرنیم و سپس پسورد خود را وارد کنید.(هنگام وارد کردن پسورد روی صفحه کاراکتر نخواهید دید، در پایان اینتر را بزنید تا پسورد شما بررسی شود)سرور آماده است.ارتباط با سرور از طریق کامپیوترهای دیگر در شبکهاصولا اینکه همیشه بطور مستقیم کنار سرور باشید کار درستی نیست. بهتر است بتوانید از راه دور و با سیستمی که همیشه با آن کار میکنید، سرور را کنترل و مدیریت کنید. چندین راه برای اینکار وجود دارد. از telnet برای لاگین و یا از FTP برای انتقال فایل استفاده می‌کنند اما چیزی که امنیت بالایی داشته باشد SSH نام دارد. به کمک SSH شما میتوانید از طریق یک شبکه ناامن، ارتباط امن برقرار کنید. شما به ترمینال سرور خود دسترسی خواهید داشت. نصب SSH روی سرور راحت است. ما باید SSH Server را روی لینوکس سرور خود نصب کنیم و از SSH Client مثل putty در ویندوز خود استفاده کنیم که بتوانیم از طریق آن به سرور وصل شویم. (فرض من این است که سیستم دیگر شما ویندوزی است، اگر روی آن سیستم هم لینوکس داشته باشید از طریق ترمینال این ارتباط قابل برقرار شدن است)در ترمینال لینوکس سرور خود (تصویر قبلی) دستور زیر را بنویسید : sudo apt-get updateسودو(sudo) یعنی کاری که میخواهیم انجام دهیم را super user انجام میدهد (super user do)اپت‌گت(apt-get) مخفف advanced package tool هست که یک اینترفیس برای کار با کتابخانه هاست. به کمک این دستور کتابخانه هایی که لازم داریم را از طریق اینترنت دریافت میکنیم. آپدیت(update) یعنی لیست تمام پکیج هایی که داریم آپدیت کن و اطلاعات مربوط به نسخه جدید آنها را بگیر. ما فقط لیست های مخازن پکیج ها را به روز رسانی کردیم.دستور زیر را مینویسیم :sudo apt-get upgradeبا دستور آپگرید نسخه جدید پکیج ها نصب میشوند. در حقیقت بعد از آپدیت کردن لیست پکیج ها، پکیج منیجر از آپدیت های موجود مطلع میشود و با دستور آپگرید این آپدیت ها انجام میشوند.حالا موقع نصب openssh است. sudo apt-get install openssh-serverبا نصب پکبج فوق ssh server نصب می‌شود، حالا باید کانفیگ سرور را انجام داد. با دستور زیر فایل کانفیگ را باز میکنیم و مطمئن میشویم Port 22 کامنت نباشد (خطوطی که ابتدای آنها # است کامنت هستند). همچنین MaxAuthorize 4 هم به شکلی که در تصویر مشخص شده اضافه میکنیم.(اگر وجود ندارد).sudo nano /etc/ssh/ssh_configاز کامنت نبودن خطوط فوق مطمئن شوید.وضعیت سرور را به شکل زیر بررسی میکنیم:sudo service ssh statusوضعیتی که نشان میدهد ssh server فعال است.اگر فعال نبود به شکل زیر میتوان ssh server را فعال و غیرفعال کرد.sudo service ssh startsudo service ssh stopبه کمک دستور زیر از آی پی سرور لینوکس مطلع میشویم.ifconfigتصویر نمونه از نتیجه ifconfig که در سرفصلeth0 که بیانگر نوع اتصال با کابل است و آی پی 192.168.1.13 است.چون اتصال ما فعلا با کابل است خروجی ما به شکل تصویر فوق خواهد بود. آی پی خود را یادداشت میکنیم. (در ادامه اتصال به شکل wifi توضیح داده خواهد شد)در سمت ویندوز(جایی که میخواهیم از آن به سرور لینوکس وصل شویم)، نرم افزار putty را از اینجا دانلود و نصب می‌کنیم. پس از اجرا، تصویری به شکل زیر خواهیم دید.آی پی سرور لینوکس را با پورت 22 وارد میکنیم. گزینه ssh انتخاب شده باشد.با کلیک روی open باید یک پنجره ترمینالی باز شود که یوزر و پسورد لینوکس را از ما میخواهد. خط فرمان آماده دستورات شماست!ترمینال لینوکس که از طریق putty در دسترس شماست.اگر ارتباط برقرار نشد و مثلا خطای connection timeout در putty دیدیم، بهتر است از طریق ping ارتباط سیستم ویندوزی به عنوان کلاینت را با سرور لینوکسی چک کنیم. همچنین برعکس این ارتباط را از طریق ping در سرور لینوکسی چک کنیم. در سرور ویندوزی برای فهمیدن آی پی از دستور ipconfig باید استفاده کرد. (به جای ifconfig).ping 192.168.1.6مطمئن شوید روی فایروال ویندزو مشکلی برای پورت 22 نباشد یا محض اطمینان فایروال خود را موقتا قطع کنید.از طریق سرچ ویندوز، عبارت windows defender firewall را سرچ کنید و روی بخش مشخص شده کلیک کنید.موقتا تا رفع مشکل ارتباط putty با سرور لینوکس فایروال ویندوز را خاموش کنید.ارتباط بدون کابل سرور لینوکس با روتربرای فعال کردن wifi روی سرور لینوکس از طریق ترمینال با سرچ، روش های مختلفی گفته شده است ولی چون حوصله انجام اینکارها را نداریم بهتر است هم برای اینکار و هم برای راحت بودن کار با سرور یک پوسته دسکتاپ برای سرور خود نصب کنیم. دستور زیر را برای نصب دسکتاپ مینویسیم.sudo apt install xubuntu-desktopمتاسفانه هنگام نصب برای من اتفاق بدی افتاد، پکیجی به نام gigolo نصب نشد و نصب نیمه کاره ماند. خطای 403 Forbidden نمایش داده شد. هنوز نفهمیدم فیلترینگ ما مشکل ساز شد یا از اونطرف ip ایران مسدود شده بود. به هر حال برای نصب desktop نیاز به رفع این مشکل بود. از tor استفاده کردم. این لینک یک راهنمای خوب فارسی برای نصب tor است.اگر مشکل من را داشتید، دستورالعمل های نصب tor را انجام دهید و دوباره دستور نصب xubuntu-desktop را بنویسید؛ نصب بطور کامل انجام میشود و با بوت کردن سیستم، فضای دسکتاپ را خواهید دید. از بخش setting manager و آیتم software and updates و تب additional drivers درایور wifi خود را نصب کنید.این پنجره settings manager است که از طریق دکمه بالا سمت چپ روی دسکتاپ قابل دسترس است.پس از نصب در بالای دسکتاپ سمت راست، علامت فلش را انتخاب کنید و wifi خود را پیدا کنید و کلمه عبور آن را وارد کنید تا علامت فلش به علامت wifi تبدیل شود. به کمک فایرفاکس میتوانید ارتباط اینترنتی خود را چک کنید.تا اینجا، کمر کار با ترمینال لینوکس را شکستید (مخصوصا با انجام عملیات نصب Tor).نصب وب سروربرای راه اندازی یک وب سایت ساده به وب سرور نیاز داریم.وب سرورها به زبان ساده محلی برای ارائه پاسخ به درخواست های کاربران است. به بیان ساده تر نرم افزارییست که شما با قرار دادن صفحات و فایل های خود در آن اعلام میکنید که دیگران میتوانند با قراردادی خاص از این اطلاعات استفاده کنند. مثلا با مرورگر خود اگر آدرس example.com/getusers را صدا کنند لیست کاربرانی که در دیتابیس قرار دارند برایشان ارسال میشود. با این تعریف مشخص میشود که به غیر از فایل، امکان ارائه خدمات بر اساس کد را نیز داریم. یعنی کد خاصی را روی سرور قرار میدهیم که با شنیدن درخواست خاص، عملیاتی را انجام دهد و خروجی مورد نظر را برای کاربر ارسال کند.این غیر دقیق ترین و در عین حال ملموس ترین تعریفی است که از وب سرور میتوان انجام داد.حالا چه کنیم؟ باید سرور لینوکس را به چیزی قابل دسترس از دنیای بیرون تبدیل کنیم. فعلا دنیای بیرون همین سیستم ویندوزی است که به کمک putty به سرور لینوکس متصل است. از putty استفاده میکنیم و دستور زیر را برای نصب یکی از ساده ترین وب سرور ها مینویسیم.(روی لینوکس خود وب سرور lighttpd نصب و اجرا میکنیم)sudo apt-get install lighttpd sudo service lighttpd startکافیست در سیستم ویندوزی خودتان آدرس آی پی سرور لینوکس را در مرورگر بنویسید. به صورت پیش فرض روی پورت 80 (که نیاز به نوشتن آن نیست) صفحه ای شبیه تصویر زیر خواهید دید:دیدن این تصویر یعنی سرور شما با موفقیت راه اندازی شده است.اما فایل مربوط به این صفحه کجای سرور لینوکس است؟آدرس /var/www/html را ببینید. این فایل در همین محل قرار دارد. میتوانید فایل را ویرایش کنید و به شکل دلخواهتان تبدیل کنید. (که پرمیشن احتمالا اجازه نمی‌دهد!) مشکل پرمیشن را یا از طریق دستورات ترمینال یا از طریق نصب برنامه nautilus که یک برنامه مدیریت فایل است رفع کنید. sudo apt-get install --reinstall nautilusبرای پیدا کردن محل نصب ناتیلوس یا هر برنامه ای از دستور زیر استفاده میکنیم:whereis nautilusالبته ناتیلوس را از طریق ترمینال در هر مسیری که باشیم میتوانیم اجرا کنیم:nautilus .خب از صحبت‌های حاشیه‌ای عبور کنیم.چطور مسیر فایل html را عوض کنیم؟ در حقیقت چطور lighttpd را کانفیگ کنیم؟فایل کانفیگ این وب سرور ساده در مسیر etc/lighttpd/lighttpd.conf قرار دارد. به راحتی به کمک nautilus پنجره مدیریت فایل را در این محل باز میکنیم و این فایل را ادیت میکنیم. مسیر دلخواهی برای وب سایت انتخاب میکنیم که حاوی html خودمان باشد. همچنین امکان تعریف پورت یا فایل های قابل میزبانی را دارید.راهنمای کامل ویرایش کانفیگ این وب سرور را از اینجا ببینید.دقت کنید که هیچ الزامی برای استفاده از lighttpd نیست. شما میتوانید به جای این وب سرور ساده، از apache2 که یک وب سرور اوپن سورس است استفاده کنید. apache2 فعلا محبوب ترین و پر استفاده ترین وب سرور است.یکی از راهنماهای خوب راه اندازی این وب سرور را از اینجا بخوانید.دسترسی به وب سرور بیرون از شبکه خانگیفرض کنید از دوستتان که در جای دیگری زندگی میکند خواسته اید که نگاهی به سایت شما که در وب سرور خانگی شما هاست شده بیندازد. چه آدرسی را باید تایپ کند؟ مطمئنا آی پی لوکال سرور که از طریق آن به کمک سیستم ویندوزتان سایت را رصد کردید به درد او نمیخورد. آی پی پابلیک چطور؟ معمولا این آی پی روی سیستم های خانگی به شکل داینامیک است. یعنی هر چند وقت عوض میشود. از طریق گوگل با تایپ my ip به آی پی خودتان خواهید رسید.اینکار از طریق ترمینال لینوکس هم ممکن است :dig @resolver1.opendns.com ANY myip.opendns.com +shortیا از طریق ترمینال ویندوز : (Invoke-WebRequest -uri "http://ifconfig.me/ip").Content دوست شما با تایپ این آی پی چه چیزی خواهد دید؟ احتمالا هیچ! قبل از توضیح در مورد اینکه چه اتفاقی افتاده تعاریف زیر را بخوانید :آدرس ip : هر خانه ای در شهر یک آدرس منحصر به فرد دارد که به محل فیزیکی آن خانه اشاره میکند. کسی که به خانه ما دعوت شده باید این آدرس را داشته باشد. دستگاه های ما نیز باید با همین روش رفتار کنند. یعنی اگر کامپیوتر ما بخواهد از طریق مرورگر به یک کامپیوتر دیگر (سرور) متصل شود باید آدرس آن را بداند. پس اگر تایپ میکنیم google.com در حقیقت این کلمه و پسوندش به یک آدرس ip اشاره میکند که ترکیب چند عدد است.مفهوم dns : اگر تعریف فوق برای ip را خوانده باشید شاید سوالی برایتان پیش آمده باشد که پس چه چیزی این google.com را به ip آن مپ کرده است؟ DNS server شامل یک دیتابیس بزرگ است که مجوعه ای از دامین ها و IP های مرتبط را در خود دارد. مثلا دامین google.com به IP با آدرس ۶۴.۲۳۳.۱۶۷.۹۹ مپ می شود. سرورهای Dns زیادی وجود دارد که معمولا شرکت ها و سازمان های هاستینگ مسئول آن هستند. کافیست دامینی که رزرو کردید و همچنین آدرس ip وب سرور خود را به این شرکت ها بدهید تا آنها به این سرور ها اضافه کنند و چون این سرورهای dns در دنیا به هم متصل هستند ظرف یک یا دو روز سایت شما با تایپ دامین شما قابل دسترس خواهد بود.برگردیم به وب سرور خودمان، برای آنکه ip داینامیک ما به وب سرور مپ شود باید با مفاهیمی مثل port forwarding و virtual host آشنا باشیم. باید تنظیمات مودم خود را دستکاری کنیم و در کل اگر در اینترنت جستجو کنید آموزش های متفاوت و غالبا پیچیده ای خواهید دید. به نظر من این مفاهیم بدون داشتن پیش زمینه شبکه کاملا مبهم و اعصاب خرد کن خواهند بود، برای همین فکر راهی برای پیچاندن باید باشیم!از هدف خود دور نشویم. میخواهیم دوستمان سایت ما را ببیند. اصلا فرض کنید میخواهیم با گوشی، همیشه سایتمان دسترسی داشته باشیم. دقت کنید آی پی ما داینامیک است و ممکن است بعد از چند ساعت دسترسی به آن ممکن نباشد. اگر مکانیزمی وجود داشت که این آدرس داینامیک را به یک domain مپ میکرد (مثل dns server) ولی حواسش به تغییر ip هم بود و هر بار ip عوض میشد ، ip جدید را به همان دامین مپ میکرد عالی بود.وب سایت ngrok اینکار را میکند. کاری که ngrok میکند ایجاد یک تونل امن به لوکال‌هاست شماست. وقتی ngrok را روی سرور خود اجرا میکنید آی پی شما را به یک آدرس bind(متصل) میکند و هر ریکوئستی به آن آدرس ارسال شود آن را به ip شما فوروارد میکند. اگر ip سرور تغییر کند چون ngrokروی سرور سوار شده از آن مطلع شده و بایندینگ خود را بر اساس آدرس ip جدید بدون تغییر آدرس دامین آپدیت میکند.برای نصب ngrok از طریق سرور لینوکس خود به آدرس آن رفته و از منوی download روش نصب آن روی سرور را بخوانید و عمل کنید. مثلا روی دسکتاپ آن را قرار دهید و دستور زیر را بنویسید: ./ngrok http 80مطمئن باشید قبل از نوشتن این دستور روی پورت 80 وب سرور lighttpd یا هر وب سرور دیگری که دارید فعال باشد.با نوشتن این دستور در ترمینال پیامی مبنی بر موفقیت آمیز بودن بایندینگ نمایش داده میشود و یک آدرس رندم هم برای سایت شما تولید میشود که همان آدرسی است که قرار است به دوستتان بدهید!جمع بندیوب سرور ما راه افتاد و یک دامین اختصاصی از ngrok هم دارد! حالا میتوانید خروجیِ پابلیش کدهای خود را از طریق این وب سرور در اختیار افراد دیگر قرار دهید. دستورالعمل گفته شده در این مقاله، صرف نظر از جنبه آموزشی و شاخ و برگهای گاها عمدی، قابل استفاده برای دیوایس raspberry هم هست. به نظر الان باید با بوت کردن یک فلش، نصب اوبونتو، کار با دستورات ترمینال لینوکس، ارتباط با putty، نصب tor، نصب محیط دسکتاپ، نصب وب سرور و همچنین کار با ngrok آشنا شده باشید.اگر مدیر ساختمان هستید این ایده را اجرا کنید، برای ساختمانتان یک وب سرور خانگی حتا با raspberry بسازید. دخل و خرج را در آنجا نمایش دهید تا بقیه ساختمان با مراجعه به آدرس از هزینه ها مطلع شوند. اگر حال دارید برای هر واحد اکانت بسازید و پرداخت و حسابرسی را آنلاین کنید. اگر خیلی حال دارید یک اپ کوچک مثلا با ionic یا react native بنویسید. اصلا نسخه pwa سایتتان را با پرداخت آنلاین ریلیز کنید.منتظر نظرات شما هستم، مخصوصا اگر راه ساده تری برای دسترسی به وب سرور خانگی، از طریق افرادی که در شبکه محلی ما نیستند سراغ داشته باشید، یعنی از راه اینترنت و آی پی پابلیک.