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

Предговор

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

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

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

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

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

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

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

Памет

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

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

Диск

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

Процесор

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

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

Собствено инсталиране

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

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

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

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

Разпределение на диска

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

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

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

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

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

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

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

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

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

LVM

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

Следва, в LVM има няколко основни единици, с които трябва да умеете да работите:

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

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

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

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

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

След инсталацията

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

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“ (и размера в 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