Уеб сървър на CentOS 8 с php7, node.js и redis

Предговор

Вече са изминали 2 дни от излизането на новата версия на операционната система CentOS, а именно CentOS 8. И в интернет все още има доста малко статии по темата за това как да се правят нещата, затова реших да запълня този пропуск. Ще разкажа не само как да инсталираме тези две програми, но и как виждам инсталацията на Линукс в виртуална среда в съвременния свят за типични задачи, включително разпределение на дисковете и други.

Но първо искам накратко да разкажа защо си струва да се премине на тази версия от всички предходни, а причините са две:

  1. php7! В предишната версия на CentOS се инсталираше "православният" php5.4...

    Добре, ако бъдем малко по-сериозни, много пакети пропуснаха няколко версии наведнъж. Ние (почитателите на redhat-подобни ОС) най-накрая влязохме, ако не в бъдещето, то поне в настоящето. И поддръжниците на Ubuntu вече няма да се подиграват с нас и да ни сочат с пръст, поне... за известно време ;).

  2. Преход от yum на dnf. Основната разлика е, че сега официално се поддържа работата с няколко версии на пакети едновременно. В осмата версия това все още не ми е било необходимо, но звучи обещаващо.

Създаване на виртуална машина

Хипервизорите са различни и нямам за цел да насоча читателя към конкретен, ще говоря за общите принципи.

Памет

Първо... За инсталацията на системата CentOS, започвайки от 7, със сигурност, а мисля, че и в 6 е било така („но не е сигурно“), е необходимо минимум 2 ГБ оперативна памет. Затова съветвам да предоставите толкова в началото.

Но в случай, че е нужно, след инсталацията обемът на паметта може да бъде намален. На 1 ГБ голата система работи съвсем нормално, проверявал съм.

Диск

За нормална инсталация трябва да се създаде виртуален диск с размер 20-30 ГБ. Това е достатъчно за системата. И втори диск за данни. Може да се добави както по време на създаването на виртуалната машина, така и след това. Обикновено добавям после.

Процесор

На едно ядро голата система не забавя работата. И тъй като ресурсите свободно се мащабират, не виждам смисъл да дам повече по време на инсталацията (освен ако не знаете идеално изискванията и не искате да ви е по-лесно да отидете в конфигуратора)

Останалото обикновено може да се остави по подразбиране.

Собствено инсталацията

И така... Стартираме инсталатора... Лично аз отдавна инсталирам подобни услуги само в рамките на виртуални машини, така че няма да описвам как да запиша дистрибутива на флашка — просто монтирам ISO като CD-диск в любимия си хипервизор, зареждам и започваме.

Основната инсталация протича доста типично, ще се спра само на няколко момента.

Избор на източник

От момента на излизането на осмата версия, огледалото от Яндекс е било неработещо вече няколко дни. Тоест, периодично възстановява връзката, а след това отново започва да показва грешка. Уверен съм, че причината е в прекомерната натовареност на услугата. Следователно, за уточняване на източника, ми се наложи лично вместо да въведа познатия адрес, да отида тук, да избера огледало, което ми харесва, и ръчно да въведа адреса в прозореца на инсталатора. Тук е важно да помним, че трябва да укажем пътя към папката, където се намира каталогът repodata. Например, mirror.corbina.net/pub/Linux/centos/8/BaseOS/x86_64/os.

Разделяне на диска

Този въпрос е по-скоро религиозен, според мен. Всеки администратор има своя позиция по този въпрос. Но все пак ще споделя моята точка на виждане.

Да, в принципе, може всичкото пространство да се отреди за корен и ще работи, по-често даже съвсем добре. Защо тогава да се занимаваме с различни дялове? — Основните причини за това, според мен, са две: квоти и преносимост.

Например, ако нещо се обърка и на основния дял с данни възникнат грешки, искам да имам възможност все пак да заредя системата и да извърша възстановителни действия. Затова лично аз отделям отделен дял за /boot. Там се намира ядрото и зареждачът. Обикновено стигат 500 мегабайта, но в редки случаи може да е нужно повече, а като се има предвид, че вече сме свикнали да измерваме пространството в терабайти, аз отделям 2ГБ за този дял. И тук е важно, че не може да бъде направен lvm.

Следва коренът на системата. За нормална инсталация никога не ми е било нужно повече от 4 ГБ именно за системата, но по време на планирани дейности често използвам каталога /tmp за разархивиране на дистрибутиви, а няма смисъл да го отделям за отделен дял — в съвременните системи той се почиства автоматично, така че не се запълва. Така че за корена отделям 8ГБ.

Суруп… Всъщност, практически полза от него е малко. Ако на сървъра ви се е активирало сурупа, днес в реалния свят това означава единствено, че на сървъра трябва да се добави повече оперативна памет. В противен случай проблемите с производителността са гарантирани (или някоя програма има "пропуск“ на паметта). Затова този раздел е нужен само за диагностика. Затова 2 ГБ е отлична цифра. Да, независимо от това колко памет има на сървъра. Да, четох всички онези статии, където е описано съотношението между обема на паметта и обема на сурупа... ИМХО, те са остарели. През последните 10 години нито веднъж не ми бяха нужни. Преди 15 години ги използвах, да.

Дали да се отдели /home в отделна партиция ИМХО всеки може да реши сам. Ако някой активно ще използва тази папка на сървъра, по-добре е да я отделите. Ако никой не я използва — няма нужда.

Следва, /var. Според мен е задължително да се отдели. Първоначално можете да се ограничите до 4 ГБ, после каквото стане. И да, под "каквото стане" имам предвид, че

  1. На първо място, винаги можете да монтирате друг диск в подкаталог /var (както ще покажа по-нататък с пример)
  2. На второ, при нас е lvm — винаги можете да добавяте. А добавянето обикновено е необходимо, когато започват да се натрупват твърде много логове там. Но никога не съм могъл предварително да предскажа това число, затова започвам с 2 ГБ, а после следя.

Неразпределеното пространство ще остане свободно в групата томове, след това винаги можете да го използвате.

LVM

Всички партии, освен /boot има смисъл да се направят в LVM. Да, включително суруп. Да, сурупът по всички съвети трябва да бъде в началото на диска, а в случай с LVM не може да се определи неговото местоположение в принцип. Но както вече писах по-горе, вашата система не трябва използва сурупа изобщо. А затова няма никакво значение къде се намира. Нима не живеем в 95-а година, ама честно!

По-нататък, в LVM има няколко основни елемента, с които трябва да се научите да живеете:

  • физически том
  • група томове
  • логически том

Физическите томове се обединяват в групи, като всеки физически том може да бъде само в една група, а групата може да се намира наведнъж на няколко физически тома.
А логическите томове се намират всеки в една група.

Но… При нас, по дяволите, отново е 21 век. И сървърите са виртуални. Няма смисъл да приложим същите механизми, които са били използвани за физически. И за виртуалните е важно данните да са отделени от системата! Това е много важно за възможността бързо да прехвърлим данни на друга виртуалка (например при преминаване на нова ОС) и за всички полезни функционалности (разделни резервни копия на дяловете с помощта на хипервизора, например). Затова една група обеми се използва за системата, а друга е задължително за данните! Това логично разделение силно помага в живота!

Ако при създаването на виртуалната машина сте създали само един виртуален хард диск, конфигурацията приключва тук. А ако сте създали два, просто не маркирайте втория засега.

Започваме инсталацията.

Постинсталация

И така, най-накрая заредената новоинсталирана система. Първото нещо, което трябва да проверите — интернетът.

ping ya.ru

Има ли отговор? — Отлично, натискаме Ctrl-C.
Ако няма — идете да настройвате мрежата, без това животът е невъзможен, но моята статия не е за това.

Сега, ако все още не сме под root, влизаме под root, защото не ми се пише такова количество команди с 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“ (и размера в GB) можете да посочите малка и тогава вместо абсолютния размер да укажете относителен, например, за да използвате половината от свободното пространство в групата от томове, трябва да указвате „-l +50%FREE“

Последната команда форматира раздела в файловата система ext4 (която до момента показва най-голяма стабилност в случаите, когато всичко се провали, затова предпочитам нея).

Сега монтираме раздела на нужното място. За целта добавяме правилния ред в /etc/fstab:

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

И въвеждаме

mount /var/www

Ако се появи грешка — бием тревога! Защото това означава, че имаме грешка в /etc/fstab. И че при следващото рестартиране ще имаме много големи проблеми. Системата може изобщо да не се стартира, което за облачните услуги често е изключително неприятно. Затова трябва или спешно да коригирате последния добавен ред, или да го изтриете напълно! Именно затова не написахме командата за ръчно монтиране — иначе нямаше да получим такава прекрасна възможност да проверим конфигурацията веднага.

Сега реално инсталираме всичко, което искаме, и отваряме портовете за уеб:

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.
Собствено, печалба! 🙂

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster