Веб сервер на 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 ГБ, а потім дивлюся.

Чи не розподілене місце залишиться вільним у групі томів, його потім завжди можна використовувати.

НВМ

Усі розділи, крім /boot, має сенс зробити в LVM. Так, включаючи swap. Так, swap за всіма порадами має бути на початку диска, а у випадку з LVM його місцезнаходження визначити не можна в принципі. Але як я вже писав вище, ваша система не повинна використовувати 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

Додати коментар або відгук