وب سرور در CentOS 8 با php7، node.js و redis

پیش گفتار

2 روز از انتشار نسخه جدید سیستم عامل CentOS، یعنی CentOS 8 می گذرد. ​​و تا کنون چندین مقاله در اینترنت در مورد نحوه انجام کارها در آن وجود دارد، بنابراین تصمیم گرفتم این شکاف را پر کنم. علاوه بر این، من نه تنها در مورد نحوه نصب این جفت برنامه، بلکه در مورد نحوه نصب لینوکس در یک محیط مجازی در دنیای مدرن برای کارهای معمولی، از جمله پارتیشن بندی دیسک ها و غیره، به شما خواهم گفت.

اما در ابتدا، می خواهم به طور خلاصه در مورد اینکه چرا ارزش تغییر به این نسخه از همه نسخه های قبلی را دارد، صحبت کنم و این دو دلیل دارد:

  1. php7! در نسخه قبلی CentOS، php5.4 "ارتدوکس" نصب شده بود...

    خوب، برای اینکه کمی جدی تر باشیم، تعداد زیادی بسته به طور انبوه از چندین نسخه عبور کردند. ما (هواداران سیستم‌عامل‌های مشابه redhat) در نهایت اگر نه به آینده، حداقل به زمان حال وارد شده‌ایم. و حامیان اوبونتو دیگر به ما نمی خندند و به سمت ما انگشت نمی گذارند، خوب ... حداقل برای مدتی ;).

  2. انتقال از yum به dnf. تفاوت اصلی این است که اکنون به طور رسمی برای کار با چندین نسخه بسته به طور همزمان پشتیبانی می شود. درست در هشت، من هرگز این را مفید ندیدم، اما امیدوارکننده به نظر می رسد.

یک ماشین مجازی ایجاد کنید

هایپروایزرهای مختلفی وجود دارد و من هیچ هدفی ندارم که خواننده را به یک مورد خاص اختصاص دهم، در مورد اصول کلی به شما خواهم گفت.

حافظه

اول... برای نصب یک سیستم CentOS که از 7 شروع می شود، مطمئنا، و به نظر من در 6 نیز همینطور بود ("اما این مطمئن نیست")، شما نیاز دارید کمترین 2 گیگابایت رم. بنابراین، من به شما توصیه می کنم که ابتدا این مقدار را بدهید.

اما در هر صورت، پس از نصب می توان حجم حافظه را کاهش داد. در 1 گیگابایت، سیستم خالی کاملاً خوب کار می کند، من بررسی کردم.

دیسک

برای نصب معمولی، باید یک دیسک مجازی با ظرفیت 20-30 گیگابایت ایجاد کنید. این برای سیستم کافی است. و یک دیسک دوم برای داده ها. می توان آن را هم در مرحله ایجاد ماشین مجازی و هم بعد از آن اضافه کرد. معمولا بعدا اضافه می کنم.

پردازنده

در یک هسته، سیستم برهنه کند نمی شود. و از آنجایی که منابع آزادانه مقیاس پذیر هستند، من هیچ فایده ای برای ارائه بیشتر در مرحله نصب نمی بینم (مگر اینکه الزامات را کاملاً بدانید و برای رفتن دوباره به پیکربندی تنبل باشید)

بقیه را معمولاً می توان به عنوان پیش فرض گذاشت.

نصب واقعی

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

نصب اولیه کاملاً معمولی است، من فقط روی چند نکته تمرکز می کنم.

انتخاب منبع

از زمان انتشار نسخه هشتم، آینه Yandex برای روزها در اطراف دراز کشیده است. خوب، یعنی به صورت دوره ای بالا می رود، و سپس دوباره شروع به نشان دادن خطا می کند. من مطمئن هستم که به دلیل بار بیش از حد روی سرویس است. بنابراین، برای ذکر منبع، شخصا مجبور شدم به جای وارد کردن آدرس معمول، بروم اینجا، آینه ای را که در آنجا دوست دارم انتخاب کنید و آدرس را به صورت دستی در پنجره نصب کننده وارد کنید. مهم است که در اینجا به یاد داشته باشید که باید مسیر پوشه ای که دایرکتوری در آن قرار دارد را مشخص کنید repodata. به عنوان مثال mirror.corbina.net/pub/Linux/centos/8/BaseOS/x86_64/os.

پارتیشن بندی دیسک

این سوال به نظر من کاملا مذهبی است. هر ادمین موضع خود را در این مورد دارد. اما من همچنان دیدگاه خود را در مورد این موضوع به اشتراک می گذارم.

بله، در اصل، شما می توانید کل فضا را به ریشه اختصاص دهید و کار خواهد کرد، اغلب حتی بسیار خوب. پس چرا یک باغ را با بخش های مختلف حصار بکشید؟ - به نظر من، دو دلیل عمده برای این وجود دارد: سهمیه بندی و قابلیت حمل.

برای مثال، اگر مشکلی پیش بیاید و خطاهایی در پارتیشن داده اصلی رخ دهد، می‌خواهید همچنان بتوانید سیستم را بوت کنید و اقدامات احیا را انجام دهید. بنابراین، من شخصا یک پارتیشن جداگانه برای /boot اختصاص می دهم. یک هسته و یک بوت لودر وجود دارد. معمولاً 500 مگابایت کافی است، اما در موارد نادر ممکن است بیشتر مورد نیاز باشد و با توجه به اینکه قبلاً به اندازه گیری فضا با ترابایت عادت کرده ایم، 2 گیگابایت را برای این قسمت اختصاص می دهم. و نکته مهم اینجاست که نمی توان آن را lvm انجام داد.

بعد ریشه سیستم می آید. برای نصب معمولی، من هرگز به بیش از 4 گیگابایت در هر سیستم نیاز نداشته ام، اما در طول رویدادهای برنامه ریزی شده، اغلب از دایرکتوری tmp برای باز کردن بسته بندی ها استفاده می کنم، و هیچ فایده ای برای اختصاص آن به یک پارتیشن جداگانه - در سیستم های مدرن نمی بینم. به طور خودکار تمیز می شود، بنابراین پر نمی شود. بنابراین من 8 گیگابایت را برای روت اختصاص می دهم.

تعویض... به طور کلی، کاربرد عملی کمی از آن وجود دارد. اگر شروع به استفاده از swap روی سرور خود کنید، امروزه در دنیای واقعی این فقط به این معنی است که سرور نیاز به اضافه کردن رم بیشتری دارد. در غیر این صورت، مشکلات عملکرد تضمین شده است (یا برخی از برنامه ها حافظه "نشت" می کنند). بنابراین، این بخش فقط برای اهداف تشخیصی مورد نیاز است. بنابراین، 2 گیگابایت یک عدد عالی است. بله، صرف نظر از اینکه چقدر حافظه روی سرور وجود دارد. بله من همه اون مقالاتی که در مورد نسبت حجم حافظه به ولوم swap نوشته شده رو خوندم... IMHO قدیمی هستن. در 10 سال تمرین هرگز به این نیاز نداشتم. 15 سال پیش من از آنها استفاده کردم، بله.

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

بعد، /var. به نظر من قطعا باید برجسته شود. برای شروع، می توانید خود را به 4 گیگابایت محدود کنید و ببینید که چگونه پیش می رود. و بله، منظور من از "چگونه پیش می رود" این است

  1. در مرحله اول، همیشه می توانید دیسک دیگری را در زیر شاخه /var سوار کنید (که بعداً با یک مثال نشان خواهم داد)
  2. در مرحله دوم، ما lvm داریم - همیشه می توانید آن را اضافه کنید. و معمولاً زمانی که لاگ های زیادی در آنجا ریخته می شوند باید آن را اضافه کنید. اما من هرگز نتوانستم این رقم را از قبل پیش بینی کنم، بنابراین با 2 گیگابایت شروع می کنم و سپس تماشا می کنم.

فضای تخصیص نیافته در گروه حجم آزاد می ماند و همیشه می تواند بعداً استفاده شود.

LVM

همه منطقی است که پارتیشن هایی غیر از /boot در LVM ایجاد کنیم. بله، از جمله تعویض. بله، با توجه به همه توصیه ها، swap باید در ابتدای دیسک باشد، اما در مورد LVM در اصل نمی توان مکان آن را تعیین کرد. اما همانطور که در بالا نوشتم سیستم شماست نباید اصلا از swap استفاده کن بنابراین، مهم نیست که او کجاست. خب، راستش ما در سال 95 زندگی نمی کنیم!

علاوه بر این، در LVM چندین موجودیت اساسی وجود دارد که باید بتوانید با آنها زندگی کنید:

  • حجم فیزیکی
  • گروه حجمی
  • حجم منطقی

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

اما... لعنتی، دوباره قرن بیست و یکم است. و سرورها مجازی هستند. بی معنی است که همان مکانیسم هایی را که در مورد مکانیسم های فیزیکی اعمال می شد برای آنها اعمال کنیم. و برای مجازی ها مهم است که داده ها جدا از سیستم باشد! این بسیار مهم است، به ویژه برای توانایی تغییر سریع داده ها به یک ماشین مجازی دیگر (به عنوان مثال، هنگام جابجایی به یک سیستم عامل جدید) و به طور کلی برای انواع موارد مفید (به عنوان مثال، پشتیبان گیری های جداگانه توسط پارتیشن ها با استفاده از ابزارهایپروایزر) . بنابراین از یک گروه حجمی برای سیستم استفاده می شود و الزاماً از دیگری برای داده استفاده می شود! این تقسیم بندی منطقی کمک زیادی به زندگی می کند!

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

بیایید نصب را شروع کنیم.

پس از نصب

بنابراین، سیستم تازه نصب شده بالاخره بوت شد. اولین چیزی که باید بررسی کنید اینترنت است.

ping ya.ru

آیا پاسخی وجود دارد؟ - عالی است، Ctrl-C را فشار دهید.
اگر نه، به راه اندازی یک شبکه بروید، زندگی بدون این وجود ندارد، اما مقاله من درباره این موضوع نیست.

حالا اگر هنوز زیر روت نیستیم برو زیر روت چون تایپ چنین تعداد دستورات با sudo شخصاً من را شکست (و ممکن است مدیران پارانوئید مرا ببخشند):

sudo -i

حالا اولین کاری که انجام می دهیم تایپ است

dnf -y update

و اگر در حال خواندن این مقاله در سال 2019 هستید، به احتمال زیاد هیچ اتفاقی نخواهد افتاد، اما ارزش امتحان کردن را داشت.

حالا بیایید دیسک باقی مانده را پیکربندی کنیم

فرض کنید پارتیشن با سیستم xvda بود، سپس دیسک داده xvdb خواهد بود. خوب.

بیشتر توصیه‌ها با «اجرای fdisk و ایجاد یک پارتیشن...» شروع می‌شود.

بنابراین این است اشتباه!

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

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

بنابراین، ما یک حجم فیزیکی، سپس یک گروه حجمی که شامل آن می شود، و سپس یک پارتیشن برای سرور خود ایجاد می کنیم:

pvcreate /dev/xvdb
vgcreate data /dev/xvdb
lvcreate -n www -L40G data
mke2fs -t ext4 /dev/mapper/data-www

در اینجا، به جای حرف بزرگ "L" (و اندازه به گیگابایت)، می توانید یک کوچک را مشخص کنید، و سپس به جای یک اندازه مطلق، یک نسبی را مشخص کنید، به عنوان مثال، برای استفاده از نیمی از فضای خالی فعلی در یک گروه حجمی، باید "-l +50%FREE" را مشخص کنید

و آخرین دستور پارتیشن را در سیستم فایل ext4 فرمت می‌کند (که تاکنون، طبق تجربه من، در صورت خراب شدن همه چیز، بیشترین ثبات را نشان می‌دهد، بنابراین من آن را ترجیح می‌دهم).

حالا پارتیشن را در جای مناسب سوار می کنیم. برای انجام این کار، خط صحیح را به /etc/fstab اضافه کنید:

/dev/mapper/data-www    /var/www                ext4    defaults        1 2

و شماره گیری می کنیم

mount /var/www

اگر خطایی رخ داد، زنگ هشدار را به صدا در آورید! زیرا این بدان معناست که در /etc/fstab خطا داریم. و اینکه در راه اندازی مجدد بعدی مشکلات بسیار بزرگی خواهیم داشت. ممکن است سیستم اصلاً بوت نشود، که اغلب برای خدمات ابری بسیار ناراحت کننده است. بنابراین لازم است یا خط آخر اضافه شده را فوری تصحیح کنید، یا کلا حذف کنید! به همین دلیل است که ما دستور mount را به صورت دستی ننوشتیم - در این صورت چنین فرصت عالی برای بررسی پیکربندی فوراً نداشتیم.

اکنون هر آنچه را که می‌خواستیم نصب می‌کنیم و پورت‌ها را برای وب باز می‌کنیم:

dnf groupinstall "Development Tools"
dnf -y install httpd @nodejs @redis php
firewall-cmd --add-service http --permanent
firewall-cmd --add-service https --permanent

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

اکنون پارامتر را به فایل پیکربندی اضافه می کنیم (یک مورد جدید ایجاد می کنیم، ایدئولوژی مدرن CentOS اینگونه است)

echo "vm.overcommit_memory = 1"> /etc/sysctl.d/98-sysctl.conf

سرور را راه اندازی مجدد کنید.
در نظرات به من سرزنش شد که به من توصیه کرد SeLinux را خاموش کنم، بنابراین خودم را اصلاح می کنم و در مورد این واقعیت می نویسم که پس از این باید به یاد داشته باشید که SeLinux را پیکربندی کنید.
در واقع، سود! 🙂

منبع: www.habr.com

اضافه کردن نظر