چند وقت پیش من و علیرضا تصمیم گرفتیم که بریم و از Hetzner که یه دیتاسنتر خوب آلمانی هست یه روت سرور بگیریم تا بتونیم پروژههامون رو روش پیادهسازی کنیم.
بعد از ثبتنام و ارسال مدارک و خرید سرور با مشخصات ۸ هسته پردازنده و ۴۸ گیگابایت رم و ۲تا هارد ۲ترابایت و همچنین خرید یه سابنت یا زیرشبکه با رنج /۲۹ از اونا کارم رو شروع کردم.
بد ندیدم تا ریز مسائلی که بهشون برخوردم و راهنمای کامل نصب رو هم اینجا بنویسم تا شاید به درد یکی بخوره 🙂
اگه نمیدونین proxmox چیه باید بگم که یه ابزار تحت وب برای ساختن و مدیریت ماشینهای مجازی روی یه سرور.
قدم اول نصب یه دبیان تر و تمیز
برای اینکار باید به پنل روبات لاگین کنیم و. سرور موردنظر رو انتخاب کنیم و به منوی rescue بریم و اول از dropdown گزینه linux و بعدش هم Radio button عبارت ۶۴bit رو انتخاب کنیم. این کار یه دبیان رو روی شبکه برامون لود میکنه که بتونیم باهاش هرچیزی که میخوایم رو نصب کنیم. بعد از زدن دکمه activate یادتون باشه که یه پسورد برامون generate میکنه که بهتره اونو سیو کنیم.
راهنمای استفاده از پنل روبات رو هم از اینجا بخونین
مرحله بعدی اینه که بریم به منوی reset و بعدش یه ریست به سرور بدیم.
این ریست باعث میشه که موقع بوت سرور روی مود rescue بوت بشه. البته لازم به ذکر هست که اگه برای اولین بار هست سرور رو میخرین، سرور روی این مود قرار داره.
بعد از اتصال به سرور با کمک ssh یعنی با کمک دستور زیر:
۱ | ssh root@IP |
به سرور وصل میشیم. مهندسهای هتزنر یه ابزاری نوشتن به اسم installimage که به کمک اون میشه انواع سیستمعاملها رو روی سرور نصب کرد.
قدیم (یعنی حدود دوهفته قبل از نوشتن این مقاله) یه بخشی توی installimage وجود داشت به اسم virtulization که توش هم proxmox بود و هم coreOS اما خب الان رفتن توی زیرشاخه other و یادتون باشه که بههیچوجه درست کار نمیکنن و ازشون استفاده نکنین.
بهترین کار انتخاب Debian هست. بعد از انتخاب Debian یه منوی جدید باز میشه که میگه نسخه دبیان رو انتخاب کنید که ما jessie رو انتخاب میکنیم.
بعد از اون یه ادیتوری باز میشه که میگه تنظیمات دلخواههت رو انتخاب کن.
ازاونجایی که من دوتا هارد دوترابایت داشتم، موقع نصب زدم که نوع RAID من ۱ باشه.
یعنی که هردوتاهارد میرور باشن تا اگه یکیش پرید، دیتا من نپره :))
به بوتلودر و SWRAIDLEVEL هم دست نزدم. اما HOSTNAME رو هاستنیمی که میخوام زدم مثلاً زدم Goodarz-Server.
مرحله بعد نوبت به پارتیشنبندی بود.
به صورت زیر من پارتیشنبندی کردم:
۱ ۲ ۳ ۴ ۵ ۶ ۷ | PART /boot ext4 ۴G PART lvm vg0 ۴۲۰G PARL lvm vg1 all LV vg0 root / ext4 ۱۰۰G LV vg0 swap swap swap ۲۰G LV vg0 backyp /backup ext4 all LV vg1 vz /var/lib/vz ext4 all |
اما خب این به چه معناست:
این یعنی که اول میاد یه پارتیشن ۴ گیگابایتی غیرLVM میسازم و فرمتش رو هم میزارم ext4 و روی /boot متصلش میکنم.
بعد از اون دوتا ولیوم گروپ LVM با حجم ۴۲۰ گیگ و all که یعنی هرچقدر باقیموند میسازم.
یه روت ۱۰۰ گیگابایتی با فرمت ext4 و یه سواپ ۲۰ گیگی یه پارتیشن ۳۰۰ گیگابایتی روی /backup برای نگهداری بکآپ هام میسازم.
بعد ولیوم گروپ دومی که ساختم و تمام فضای باقیمونده رو بهش دادم رو هم رو هم روی /var/lib/vz که محل اصلی نگهداری ایمیلها و تنظیمات پروکسموکس هست انتخاب میکنم و تمام فضای vg1 که ولیوم گروپ دوم ما هست رو هم. بهش اختصاص میدم
پس شد یه روت ۱۰۰ گیگی، یه بوت ۴ گیگی، یه بکآپ ۳۰۰ گیگی، یه سواپ ۲۰ گیگی و یه پارتیشن هم حدود ۱ گیگ و نیم برای /var/lib/vz
خط آخر یعنی image رو هم دستکاری نمیکنیم. کل پیکربندی رو به شکل زیر میشه خلاصه کرد:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ | DRIVE1 /dev/sda DRIVE2 /dev/sdb SWRAID ۱ SWRAIDLEVEL ۱ BOOTLOADER grub HOSTNAME Goodarz-Server PART /boot ext4 ۴G PART lvm vg0 ۴۲۰G PARL lvm vg1 all LV vg0 root / ext4 ۱۰۰G LV vg0 swap swap swap ۲۰G LV vg0 backyp /backup ext4 all LV vg1 vz /var/lib/vz ext4 all IMAGE /root/.oldroot/nfs/install/.. /images/Debian-۷۰-wheezy-۶۴-minimal.tar.gz |
با زدن f10 و ذخیره کردن پیکربندی مراحل نصب رو پیش میریم تا نصب تموم شه و بهمون بگه که ریست کنیم.
بعد از ریبوت، به سرور ssh میزنیم مجدداً با یوزر روت و پسوردی که موقع rescue برامون درست کرده بود.
وارد که شدیم ترجیح براین هست که ابتدا ipv6 غیرفعال بشه تا فرایند نصب بستهها سریع انجام بشه.
لذا فایل /etc/syctl.conf روباز میکنیم و. این دوخط رو تهش اضافه میکنیم:
۱ ۲ ۳ | net.ipv6.conf.all.disable_ipv6=۱ net.ipv6.conf.default.disable_ipv6=۱ |
با زدن
۱ | sysctl -p |
تنظیمات رو اعمال میکنیم.
حالا لیست مخازن و بعد از اون بستهها رو هم آپدیت میکنیم:
۱ | apt update && apt upgrade |
تا اینجا ما روت سرور رو به طور کامل کانفیگ کردیم. مرحله بعد نصب proxmox هست.
نصب proxmox
ابتدا باید مخازن proxmox رو به مخازن دبیان اضافه کنیم. پس فایل/etc/apt/sources.list روباز میکنیم و این خط رو بهش اضافه میکنیم:
۱ | deb http://download.proxmox.com/debian jessie pve-no-subscription |
بعدش کلید مخازن رو اضافه میکنیم:
۱ | wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add - |
در آخر هم لیست مخازن و بستهها رو آپدیت میکنیم:
۱ | apt update && apt upgrade |
حالا وقت نصب کرنل و کرنل هدرها هست 🙂
۱ | apt install pve-firmware pve-kernel-۴.۴.۸-۱-pve pve-headers-۴.۴.۸-۱-pve |
مورد بعدی اینه که باز لیست مخازن رو آپدیت کنیم ببینیم برای کرنل جدیدمون آپدیتی اومده یا نه پس:
۱ | apt update && apt upgrade |
حالا با دستور reboot سیستمعامل رو ریاستارت میکنیم تا با کرنل جدید بوت بشیم.
وقتی فرایند بوت انجام شد با دستور زیر proxmox رو نصب میکنیم:
۱ | apt-get install proxmox-ve |
خب بعد از نصب proxmox از طریق آدرس https://ip:8006 در درسترس خواهد بود. با زدن یوزرنیم روت و پسورد روت سرور اصلی لاگین کنین.
پیکربندی شبکه
الان که دارم اینو مینویسم، خون داره از انگشتام میچکه و یه حسی بهم میگه که امیر بیخیال نوشتن بشو :))
ولی خب مینویسم.
قبلاً گفتم که من یه سابنت از هتزنر گرفتم با مشخصات زیر
۱ | ۱۹۲.XXX.XXX.16/۲۹ |
این به این معنی هست که من این آیپیها رو میتونم داشته باشم که اولی و آخری البته قابل استفاده نیستن:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ | ۱۹۲.XXX.XXX.16 ۱۹۲.XXX.XXX.۱۷ ۱۹۲.XXX.XXX.۱۸ ۱۹۲.XXX.XXX.۱۹ ۱۹۲.XXX.XXX.۲۰ ۱۹۲.XXX.XXX.۲۱ ۱۹۲.XXX.XXX.۲۲ ۱۹۲.XXX.XXX.23 |
پس طبق منطق من ۶ تا دونه آیپی دارم که میتونم ازشون برای ساخت ۶ تا ماشین مجازی و یا کانتینر استفاده کنم.
قبل از هرچیزی چندتا پیشرفرض رو باید داشته باشیم.
MAIN IP منظور آیپی سرور اصلی هست
MAIN NETMASK منظور netmask آیپی سرور اصلی هست که از طریق بخش IPs توی پنل روبات قابل پیدا کردن هست
MAIN GATEWAY که منظور گیتوی آیپی سرور اصلی هست
MAIN NETWORK که اولین آیپی سابنت آیپی اصلیمون هست.
SUBNET’1 IP اولین آیپی سابنت
SUBNET’2 IP دومین آیپی سابنت
و الی آخر تا
SUBNET”6 IP آخرین آیپی سابنت
یادتون باشه که این مقادیر رو با اونی که از روبات گرفتین باید تعویض کنین 😛
برای کانفیگ سرور اصلی اول فایل /etc/network/interfaces روباز کنین.
با محتوای بخش eth0 که کارت شبکه سیستم هست کاری نداریم
یه بخش اضافه میکنیم برای کارت شبکه مجازی ما که قراره کار bridge رو روی VM (ماشین مجازی) انجام بده.
کل کانفیگ ما به این شکل درخواهد اومد.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ | auto lo iface lo inet loopback auto eth0 iface eth0 inet static address <MAIN IP> netmask <MAIN NETMASK> gateway <MAIN GATEWAY> up route add -net <MAIN NETWORK> netmask <MAIN NETMASK> gw <MAIN GATEWAY> dev eth0 auto vmbr0 iface vmbr0 inet static address <MAIN IP> netmask ۲۵۵.۲۵۵.۲۵۵.۲۵۵ bridge_ports none bridge_stp off bridge_fd ۰ bridge_maxwait ۰ pre-up brctl addbr vmbr0 up ip route add <SUBNET'۱ IP>/۳۲ dev vmbr0 up ip route add <SUBNET'۲ IP>/۳۲ dev vmbr0 up ip route add <SUBNET'۳ IP>/۳۲ dev vmbr0 up ip route add <SUBNET'۴ IP>/۳۲ dev vmbr0 up ip route add <SUBNET'۵ IP>/۳۲ dev vmbr0 up ip route add <SUBNET'۶ IP>/۳۲ dev vmbr0 |
فایل رو ذخیره میکنیم و با زدن دستور زیر شبکه سرور رو ریاستارت میکنیم:
۱ | systemctl restart networking |
اگه ایرادی نشون نداد یعنی که ما همه چیز رو درست رفتیم و اگه نشون داد باید برطرفش کنیم (همچین جوادخیابانی طور گفتم :)))
ساخت اولین ماشین مجازی
قبل از هرکاری لازمه که ما ایزوی توزیع مورد نظرمون که اینجا من از اوبونتو استفاده کردم رو روی proxmox قرار بدیم.
دو راه برای اینکار وجود داره.
روش اول:
وارد پنل proxmox بشید و از طریق منوی سمت چپ رو بروی Contents روباز کنین. یه بخشی براتون باز میشه آپلود رو بزنین و ایزوی اوبونتو یا دبیان یا سنتاواس رو که قبلاً دانلود کرده بودین از اینجا آپلود کنین و منتظر بمونین کلیک کنید.
روش دوم:
توی سرور به دایرکتوری /var/lib/vz/template/iso برید و از طریق لینک مستقیم ایزوی اوبونتو سرور مثل این و ابزار wget ایزو رو روش دانلود کنین.
حالا وقتشه که ماشین مجازی رو بسازیم.
از منوی بالا سمت راست گزینهٔ Create VM رو میزنیم.
اسم و ID براش انتخاب میکنیم. توی تب OS
توی تب CD/DVD گزینهٔ
مرحله بعدی به اندازه نیاز فضا براش انتخاب میکنیم.
بعدش به اندازه کافی CPU و بعد از اون هم رم به اندازه نیاز بهش اختصاص میدیم.
اما اصلی ترینبخش شبکهست.
Bridged mode رو انتخاب میکنیم و VLAN Tag رو خالی میزاریم اما از بخش Bridge vmbr0 رو انتخاب میکنیم. Model رو هم VirtIO انتخاب میکنیم و میریم مرحله بعدی و finish رو میزنیم.
منتظر میشیم تا سرور ساخته بشه. بعد از ساخته شدنش انتخابش میکنیم و start رو میزنیم و بعد از اون روی دکمه console کلیک میکنیم تا یه پنجره VNC برامون باز شه تا بتونیم سیستمعامل رو نصب بکنیم.
تمام مراحل نصب رو میریم جلو اما باید یادمون باشه که موقع نصب و در بخش تنظیمات شبکه باید گزینه install without configuring network رو بزنیم. مراحل نصب رو پیش میریم و میزاریم که نصب تموم شه.
بعد ریبوت میکنیم.
وقتی که سیستمعامل اومد بالا فایل /etc/network/interfaces روباز میکنیم و محتویات زیر رو داخلش وارد میکنیم:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ | auto lo iface lo inet loopback auto ens18 iface ens18 inet static address <SUBNET'۱ IP> netmask ۲۵۵.۲۵۵.۲۵۵.۲۵۵ dns-nameservers ۲۱۳.۱۳۳.۱۰۰.۱۰۰ ۲۱۳.۱۳۳.۹۸.۹۸ ۲۱۳.۱۳۳.۹۹.۹۹ post-up ip route add <MAIN IP> dev ens18 post-up ip route add default via <MAIN IP> dev ens18 pre-down ip route del default via <MAIN IP> dev ens18 pre-down ip route del <MAIN IP> dev ens18 |
dns-nameserversهایی که میبینین توسط خود هتزنر ارائه شده و برای اینکه شبکه به خوبی کار کنه باید وجود داشته باشن.
ماشین مجازی رو ریبوت میکنیم و الان با نصب openssh-server میشه بهش ssh داشت و همه چی اوکی هست.
تا الان با نصب و کانفیگ درست یه ماشین مجازی روی روتسرور بودیم.
اما اگه نخوایم از ماشین مجازی استفاده کنیم و بخوایم از containerها استفاده کنیم چی؟
اگه نمیدونین فرق بین container با ماشین مجازی چیه بهتره گوگلش کنین.
منم اگه بتونم یه روز در موردش مینویسم.
پیکربندی Container
وارد پنل proxmox بشید و از طریق منوی سمت چپ رو بروی Contents روباز کنین. یه بخشی براتون باز میشه templates رو بزنین و براساس نیازتون یه temlpate انتخاب کنین و Download رو بزنین.
بعد از اتمام از منوی سمت راست بالا Create CT رو بزنین.
براش اسم، آیدی و پسورد و یا کلید عمومی ssh رو وارد کنین، اگه لازمه و امنیت مهمه براتون تیک Unprivileged container رو بزنین تا دسترسی روت رو ببنده.
تب بعد Template اون تمپلیتی رو که دوست دارین انتخاب کنین، تب بعدی فضای ذخبره سازی تب بعدش میزان سیپییو و بعد از اون هم رم رو انتخاب کنین.
توی تب شبکه تنها بخشی که باید تغییر کنه بخش IPv4 هست که یه آیپی از سابنت انتخاب کنین و توی IPv4/CIDR بنویسید و تهش یه /۳۲ بزارید. مثلا:
۱۹۲٫۱۶۸٫۱٫۱۰۰/۳۲
توی بخش Gateway هم آیپی سرور اصلی رو وارد کنین و. IPv6 رو هم روی DHCP بزارین و در صورت نیاز DNS روکه تب بعدی هست پرکنین و بعدش finish رو بزنین.
container شما بدون هیچ مشکلی بالا میاد.
یکم طولانی شد و فکر کنم برای الان کافیه. توی پستهای بعد نحوه راهاندازی IPv6 و راهاندازی یه شبکه داخلی بین ماشینهای مجازی و containerها و همچنین تقاوت بین container و ماشین مجازی باید بنویسم.
در ضمن تاجایی که تونستم هرچیزی رو که ممکنه ابهام ایجاد بکنه رو هم به ویکیپدیا یا سایت اصلیش لینک دادم تا اگه کسی نمیدونه با خوندنش بفهمه اون مفهوم رو.
آپدیت۱: امروز من دیدم که به جز دوتا آیپی بقیهشون به اینترنت وصل نیستن. کلی ور رفتم و … خسته شدم و خوابیدم. صبح بیدار شدم و دستور زیر رو وارد کردم:
۱ | arp -n |
دیدم که یه سری از آیپیها بهشون مک آدرس داده شده که خب نباید اینطور باشه و دقیقاً هم همون آیپیهایی بودن که باهاشون مشکل داشتم و دیدم که آیپی هایی که وصل هستن جلوی HWaddress زده [Incomplete]
سرور رو ریبوت کردم، درست شدن. :))