Вэб сервер на 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.

Разбіўка дыска

Гэтае пытанне хутчэй рэлігійнае на мой погляд. У кожнага адміна ёсць свая пазіцыя на гэты конт. Але я ўсё ж падзялюся сваім пунктам гледжання на пытанне.

Так, у прынцыпе, можна ўсё месца вылучыць пад корань і працаваць будзе, часцей за ўсё нават суцэль нядрэнна. Навошта ж тады гарадзіць агарод з рознымі раздзеламі? - Асноўныя прычыны таго на мой погляд 2: квоты і пераноснасць.

Напрыклад, калі нешта пайшло не так і на асноўным раздзеле з дадзенымі ўзніклі памылкі, хочацца мець магчымасць усё роўна загрузіць сістэму і правесці рэанімацыйныя мерапрыемствы. Таму асабіста я вылучаю асобную частку пад /boot. Там ляжыць ядро ​​і загрузнік. Звычайна хапае мегабайт 500, але ў рэдкіх выпадках можа запатрабавацца больш, а улічваючы, што мы ўжо абвыклі вымяраць месца тэрабайтамі, я вылучаю пад гэтую частку 2ГБ. І тут важна тое, што яго нельга рабіць lvm.

Далей ідзе корань сістэмы. Для звычайнай усталёўкі мне ні разу не патрабавалася больш 4 ГБ менавіта на сістэму, але падчас планавых мерапрыемстваў я часта выкарыстоўваю каталог /tmp для распакавання дыстрыбутываў, а вылучаць яго пад асобную частку сэнсу не бачу — у сучасных сістэмах ён чысціцца аўтаматычна, таму не запаўняецца . Так што пад корань я выдзяляю 8ГБ.

Swap… Па вялікім рахунку практычнай карысці ад яго мала. Калі ў вас на серверы стаў выкарыстоўвацца свап, сёння ў рэальным міры гэта азначае толькі тое, што серверу трэба дадаць больш аператыўнай памяці. Інакш праблемы з хуткадзейнасцю гарантаваныя (або ў нейкай праграмы "цячэ" памяць). Таму гэты раздзел патрэбен толькі для дыягностыкі. Таму 2 ГБ гэта выдатная лічба. Так, незалежна ад таго, колькі на серверы памяці. Так, я чытаў усе тыя артыкулы, дзе напісана пра стаўленне аб'ёму памяці да аб'ёму свопу… ИМХО, яны састарэлі. За 10 год практыкі мне гэта ні разу не спатрэбілася. 15 гадоў таму я іх ужываў, так.

Ці выдзяляць /home у асобную частку ИМХО кожны можа вырашаць сам. Калі нехта гэтым каталогам на серверы будзе карыстацца актыўна, лепш вылучыць. Калі ніхто - няма чаго.

Далей, /var. Яго на мой погляд выдзяляць трэба абавязкова. Для пачатку можна абмежавацца лічбай 4 ГБ, а там як пойдзе. І так, пад "як пойдзе" я маю на ўвазе, што

  1. Па-першае, заўсёды можна прымантаваць іншую кружэлку ў падкаталог /var (што я далей пакажу на прыкладзе)
  2. Па-другое, у нас жа lvm - заўсёды можна дадаць. А дадаваць звычайна даводзіцца тады, калі занадта шмат логаў пачынае туды сыпацца. Але мне загадзя прадказаць гэтую лічбу ніколі не ўдавалася, таму пачынаю я з 2 ГБ, а потым гляджу.

Ці не размеркаванае месца застанецца вольным у групе тамоў, яго потым заўсёды можна выкарыстоўваць.

LVM

Усе раздзелы, акрамя /boot мае сэнс зрабіць у LVM. Так, у тым ліку swap. Так, swap па ўсіх радах павінен быць у пачатку кружэлкі, а ў выпадку з LVM яго месцазнаходжанне вызначыць нельга ў прынцыпе. Але як я ўжо пісаў вышэй, ваша сістэма не павiнна выкарыстоўваць swap наогул. А таму ня мае ніякага значэньня, дзе ён знаходзіцца. Ну не ў 95 году мы жывем, вось сапраўды!

Далей, у LVM ёсць некалькі базавых сутнасцяў, з якімі трэба ўмець жыць:

  • фізічны том
  • група тамоў
  • лагічны том

Фізічныя тамы аб'ядноўваюцца ў групы, пры гэтым кожны фізічны том можа быць толькі ў адной групе, а група можа знаходзіцца адразу на некалькіх фізічных тамах.
А лагічныя тамы знаходзяцца кожны ў адной групе.

Але… У нас, блін, зноў жа 21 стагоддзе на двары. І сервера віртуальныя. Не мае сэнсу да іх прымяняць тыя ж механізмы, якія прымяняліся да фізічных. І вось для віртуальных важна мець дадзеныя асобна ад сістэмы! Гэта вельмі важна ў прыватнасці для магчымасці хуткага пераключэння дадзеных да іншай віртуалцы (напрыклад пры пераходзе на новую АС) і наогул усякіх карысных плюшак (паасобных бэкапаў часткамі сродкамі гіпервізара напрыклад). Таму адна volume group выкарыстоўваецца для сістэмы і абавязкова іншая выкарыстоўваецца для дадзеных! Гэты лагічны падзел моцна дапамагае ў жыцці!

Калі вы пры стварэнні віртуальнай машыны стварылі толькі адну віртуальную цвёрдую кружэлку, на гэтым канфігурацыя і сканчаецца. А калі два, то проста не пазначайце пакуль другі.

Запускаем усталёўку.

Пастустаноўка

Так, загрузілася свежаўсталяваная сістэма. Першае, што трэба праверыць - інтэрнецік.

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. І што пры наступнай перазагрузцы ў нас будуць вельмі вялікія праблемы. Сістэма можа і наогул не загрузіцца, што для хмарных сэрвісаў часта вельмі сумна. А таму трэба альбо тэрмінова выпраўляць апошні дапісаны радок, альбо выдаляць яго зусім! Менавіта таму мы не сталі прапісваць каманду мантавання ўручную - тады мы не атрымалі б такой выдатнай магчымасці правесці праверку канфігу восьпрамшчаз.

Зараз уласна ставім усё, што жадалі і адчыняны порты пад вэб:

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

Дадаць каментар