Serwer WWW na CentOS 8 z php7, node.js i redis

Wstęp

Now, it's been 2 days since the new version of the operating system CentOS was released, namely CentOS 8. And so far, there are quite a few articles online about how to do things in it, so I decided to fill this gap. Moreover, I will not only tell you how to install this pair of programs, but also how I see the installation of Linux in a virtual environment in the modern world for typical tasks, including disk partitioning and more.

But first, I want to briefly explain why you should switch to this version from all the previous ones, and there are two reasons for that:

  1. php7! In the previous version of CentOS, the 'orthodox' php5.4 was used…

    Well, if we are a bit more serious, a lot of packages have skipped several versions in one go. We (fans of redhat-like operating systems) have finally entered, if not the future, then at least the present. And supporters of Ubuntu will no longer laugh at us and point fingers, well… at least for a while ;).

  2. Transition from yum to dnf. The main difference is that now support for working with multiple versions of packages is officially provided. I haven't needed it yet in version eight, but it sounds promising.

Tworzenie maszyny wirtualnej

There are different hypervisors, and I don't aim to tailor the reader to a specific one, I will talk about general principles.

Pamięć

First… To install the CentOS system starting from version 7, at least, and I believe it was the same in 6 as well ('but that's not certain'), you need minimum 2 GB of RAM. Therefore, I recommend allocating at least that much at first.

But if necessary, the amount of memory can be reduced after installation. The bare system works quite well with 1 GB, I have checked.

Dysk

For a proper installation, it is advisable to create a virtual disk with a size of 20-30 GB. This will be enough for the system. And a second disk for data. It can be added either at the virtual machine creation stage or later. I usually add it later.

Procesor

A bare system does not slow down on one core. And since resources can be scaled freely, I see no sense in giving more at the installation stage (unless you perfectly know the requirements and feel too lazy to dive into the configurator again)

The rest can usually be left as default.

Actually, the installation

Zatem… Uruchamiamy instalator… Osobiście od dawna instaluję takie usługi tylko w formie maszyn wirtualnych, więc nie będę opisywał nagrywania dystrybucji na pendrive — po prostu montuję ISO jako dysk CD w ulubionym hypervisorze, uruchamiam i ruszamy.

Podstawowa instalacja przebiega dość typowo, zatrzymam się tylko na kilku kwestiach.

Wybór źródła

Od momentu wydania ósmej wersji lustro od Yandeksu jest już kilka dni niedostępne. Cóż, to znaczy, że okresowo działa, a potem znów zaczyna pokazywać błąd. Jestem pewien, że to wina nadmiernego obciążenia usługi. Dlatego, aby wskazać źródło, musiałem osobiście zamiast wpisać znany adres, iść tutaj, wybrać tam lustro, które mi się podoba i ręcznie wpisać adres w oknie instalatora. Tutaj ważne jest, aby pamiętać, że należy wskazać ścieżkę do folderu, w którym znajduje się katalog repodata. Na przykład, mirror.corbina.net/pub/Linux/centos/8/BaseOS/x86_64/os.

Podział dysku

To pytanie jest moim zdaniem raczej religijne. Każdy administrator ma swoje zdanie na ten temat. Ale i tak podzielę się moim punktem widzenia na tę kwestię.

Tak, zasadniczo można przyznać całe miejsce pod root, a zazwyczaj to działa nawet całkiem dobrze. Dlaczego więc ma się bawić w różne partycje? — Moim zdaniem główne powody to dwa: kwoty i przenośność.

Na przykład, jeśli coś poszło nie tak i na głównym woluminie danych pojawiły się błędy, chce się mieć możliwość wciąż załadowania systemu i przeprowadzenia działań naprawczych. Dlatego osobiście przydzielam osobną partycję pod /boot. Tam znajduje się jądro i bootloader. Zazwyczaj wystarcza 500 MB, ale w rzadkich przypadkach może być potrzebne więcej, a biorąc pod uwagę, że już przyzwyczailiśmy się mierzyć miejsce w terabajtach, przydzielam 2 GB na tę partycję. Ważne jest, że nie można jej zrobić w LVM.

Dalej jest root systemu. Do normalnej instalacji ani razu nie potrzebowałem więcej niż 4 GB właśnie na system, ale podczas planowanych działań często używam katalogu /tmp do rozpakowywania dystrybucji, a przydzielanie go osobno nie ma sensu — w nowoczesnych systemach jest automatycznie czyszczony, więc się nie zapełnia. Więc na root przydzielam 8 GB.

Swap... W praktyce ma to niewiele sensu. Jeśli na twoim serwerze zaczyna być używany swap, oznacza to tylko, że serwer potrzebuje więcej pamięci RAM. W przeciwnym razie gwarantowane są problemy z wydajnością (lub jakaś aplikacja ma "wyciek" pamięci). Dlatego ta sekcja jest potrzebna tylko do diagnostyki. 2 GB to świetna liczba. Tak, niezależnie od tego, ile pamięci jest w serwerze. Tak, czytałem te wszystkie artykuły, w których mowa o stosunku rozmiaru pamięci do rozmiaru swapu... IMHO, są już przestarzałe. Od 10 lat nie miałem potrzeby się tym kierować. 15 lat temu je stosowałem, tak.

Czy wydzielać /home jako osobną partycję? IMHO każdy powinien sam zdecydować. Jeśli ktoś aktywnie korzysta z tego katalogu na serwerze, lepiej to wydzielić. Jeśli nikt, to nie ma potrzeby.

Dalej, /var. Moim zdaniem trzeba to koniecznie wydzielić. Na początek można ograniczyć to do 4 GB, a potem zobaczymy. I tak, mówiąc 'jak pójdzie', mam na myśli to, że

  1. Po pierwsze, zawsze można podmontować inny dysk do podkatalogu /var (co pokażę na przykładzie później)
  2. Po drugie, mamy LVM — zawsze można dodać. A dodaje się zazwyczaj wtedy, gdy zaczyna się zalewać zbyt wiele logów. Ale nigdy nie byłem w stanie przewidzieć tej liczby, dlatego zaczynam od 2 GB, a potem obserwuję.

Nieprzydzielona przestrzeń pozostanie wolna w grupie woluminów, którą można później wykorzystać.

LVM

Wszystkie Partycje, z wyjątkiem /boot, warto robić w LVM. Tak, w tym także swap. Tak, swap według wszelkich porad powinien być na początku dysku, ale w przypadku LVM nie można określić jego lokalizacji w ogóle. Ale jak już napisałem wcześniej, twoja system nie powinna może w ogóle nie używać swapa. A więc nie ma znaczenia, gdzie się znajduje. Nie żyjemy w 1995 roku, szczerze mówiąc!

Dalej, w LVM jest kilka podstawowych bytów, z którymi trzeba umieć żyć:

  • fizyczny wolumin
  • grupa woluminów
  • logiczny wolumin

Fizyczne woluminy są łączone w grupy, przy czym każdy fizyczny wolumin może być tylko w jednej grupie, a grupa może znajdować się na kilku fizycznych woluminach jednocześnie.
A logiczne woluminy znajdują się w jednej grupie.

Ale… Mamy, do cholery, XXI wiek. A serwery wirtualne. Nie ma sensu stosować tych samych mechanizmów, które stosowano do fizycznych. Dla wirtualnych istotne jest, aby dane były oddzielone od systemu! To bardzo ważne, szczególnie dla możliwości szybkiego przełączenia danych do innej wirtualki (na przykład przy przejściu na nowy system operacyjny) i do wszelkich innych użytecznych funkcji (oddzielne kopie zapasowe za pomocą narzędzi hipernadzorcy). Dlatego jedna grupa woluminów jest używana dla systemu, a inna dla danych! To logiczne rozdzielenie bardzo pomaga w codziennym życiu!

Jeśli podczas tworzenia maszyny wirtualnej utworzyłeś tylko jeden wirtualny dysk twardy, to na tym konfiguracja się kończy. A jeśli dwa, to po prostu nie przygotowuj jeszcze drugiego.

Rozpoczynamy instalację.

Po zainstalowaniu

Więc, w końcu załadował się świeżo zainstalowany system. Pierwsza rzecz, którą trzeba sprawdzić – internet.

ping ya.ru

Jest odpowiedź? — Doskonale, naciskamy Ctrl-C.
Jeśli nie — idź skonfigurować sieć, bez tego życie nie ma sensu, ale mój artykuł nie jest o tym.

Teraz, jeśli jeszcze nie jesteśmy jako root, wchodzimy jako root, bo wpisywanie takiej liczby poleceń z sudo osobiście mi się nie chce (i niech mnie wybaczą paranoiczni administratorzy):

sudo -i

Teraz w pierwszej kolejności wpisujemy

dnf -y update

A jeśli czytasz ten artykuł w 2019 roku, najprawdopodobniej nic się nie stanie, ale warto spróbować.

Teraz skonfigurujemy pozostały dysk

Załóżmy, że partycja z systemem była xvda, więc dysk z danymi będzie xvdb. OK.

Większość porad zacznie się od słów „Uruchom fdisk i stwórz partycję…”.

Otóż to, to nieprawda!

Jeszcze raz to powtórzę, ponieważ to ważne! W tym przypadku do pracy z LVM, zajmującym jeden cały, chociaż wirtualny dysk, tworzenie na nim partycji jest szkodliwe! W tej frazie ważne jest każde słowo. Jeśli pracujemy bez LVM — trzeba. Jeśli mamy na dysku, powiedzmy, system i dane — trzeba. Jeśli z jakiegoś powodu musimy zostawić połowę dysku pustą — też trzeba. Ale zazwyczaj wszystkie te założenia są czysto teoretyczne. Bo jeśli zdecydujemy się dodać miejsce do istniejącej partycji, najłatwiej będzie to zrobić właśnie przy takiej konfiguracji. A wygoda w administracji tak bardzo przewyższa różne inne czynniki, że celowo dążymy do tej konfiguracji.

Wygoda polega na tym, że jeśli zechcesz rozszerzyć partycję danych, wystarczy, że dodasz miejsce do wirtualnej partycji, a następnie rozszerzysz grupę za pomocą vgextend i to wszystko! W rzadkich przypadkach może być wymagane coś więcej, ale przynajmniej nie musisz rozszerzać na początku logicznego woluminu, co jest już przyjemne. Bo do rozszerzenia tego woluminu zaleca się najpierw usunięcie istniejącego, a potem stworzenie nowego w jego miejscu… Co nie wygląda zbyt dobrze i nie można tego zrobić na żywo, a rozszerzenie zgodnie z wspomnianym przeze mnie scenariuszem można przeprowadzić „na bieżąco”, nawet nie montując partycji.

Podsumowując, tworzymy fizyczny wolumin, następnie grupę woluminów, która go zawiera, a potem partycję dla naszego serwera:

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

Tutaj można zamiast dużej litery „L” (i rozmiaru w GB) użyć małej i wtedy zamiast absolutnego rozmiaru wskazać względny, na przykład, aby wykorzystać połowę obecnie wolnego miejsca w grupie woluminów, należy podać „-l +50%FREE”.

A ostatnia komenda formatuje partycję w systemie plików ext4 (który w mojej praktyce pokazuje dotychczas największą stabilność w przypadku, gdy wszystko się zepsuje, dlatego go preferuję).

Teraz montujemy partycję w odpowiednim miejscu. W tym celu dodajemy odpowiednią linię do /etc/fstab:

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

I wpisujemy

mount /var/www

Jeśli pojawił się błąd — bijemy na alarm! Ponieważ oznacza to, że mamy błąd w /etc/fstab. I że przy następnej ponownej uruchomieniu będą ogromne problemy. System może w ogóle się nie uruchomić, co w przypadku usług chmurowych często jest bardzo smutne. Dlatego trzeba albo szybko poprawić ostatnią wpisaną linię, albo całkowicie ją usunąć! Właśnie dlatego nie zapisaliśmy komendy montowania ręcznie — w przeciwnym razie nie mielibyśmy tak wspaniałej możliwości przeprowadzenia testu konfiguracji od razu.

Teraz po prostu instalujemy wszystko, co chcieliśmy, i otwieramy porty pod stronę www:

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

Na życzenie można również umieścić tutaj bazę danych, ale osobiście staram się trzymać ją oddzielnie od serwera www. Choć trzymanie jej obok jest szybsze, to prawda. Prędkość wirtualnych adapterów sieciowych zwykle wynosi około gigabita, a przy pracy na tym samym komputerze operacje odbywają się niemal natychmiast. Jednak jest to mniej bezpieczne. Tutaj zależy, co jest ważniejsze dla kogoś.

Teraz dodajemy parametr do pliku konfiguracyjnego (tworzymy nowy, nowoczesna ideologia CentOS’a taka jest)

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

Restartujemy serwer.
W komentarzach krytykowano mnie za radę, aby wyłączyć SeLinux, dlatego poprawię się i napiszę o tym, że po tym należy pamiętać, aby skonfigurować SeLinux.
Właściwie, zysk! 🙂

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster