Tworzenie szablonu VPS z Drupalem 9 na CentOS 8

Kontynuujemy rozwój naszego rynku. Niedawno opowiadaliśmy, jak stworzyliśmy obraz Gitlab, a w tym tygodniu w naszym rynku pojawił się Drupal.

Przedstawiamy, dlaczego wybraliśmy właśnie jego i jak powstawał obraz.

Tworzenie szablonu VPS z Drupalem 9 na CentOS 8

Drupal — wygodna i potężna platforma do tworzenia wszelkiego rodzaju stron internetowych: od mikrostron i blogów po duże projekty społecznościowe, wykorzystywana również jako baza dla aplikacji webowych, napisana w języku PHP i używająca relacyjnych baz danych jako składowiska danych.

Drupal 9 zawiera wszystkie funkcje zrealizowane w wersji 8.9. Kluczową różnicą między wersją 9 a 8 jest to, że dla platformy będą wydawane aktualizacje i poprawki bezpieczeństwa także po listopadzie 2021 roku. W wersji 9 uproszczono również proces aktualizacji, czyniąc go jeszcze łatwiejszym z wersji 8.

Wymagania serwerowe

Aby korzystać z Drupala, zaleca się użycie 2 GB RAM i 2 rdzeni CPU.

Podstawowe pliki Drupala zajmują około 100 MB, dodatkowo potrzebujesz miejsca na przechowywanie obrazów, bazy danych, motywów, dodatkowych modułów i kopii zapasowych, które będą zależeć od rozmiaru twojej strony.

Dla Drupala 9 wymagany jest PHP 7.4 lub nowsza z minimalnym limitem pamięci (memory_limit) wynoszącym 64 MB, w przypadku używania dodatkowych modułów zaleca się ustanowienie 128 MB.

Jako serwer www Drupal może używać Apache lub Nginx, a jako bazę danych MySQL, PostgreSQL lub SQLite.

Będziemy instalować Drupal z wykorzystaniem Nginx i MySQL.

Instalacja

Zaktualizujemy zainstalowane pakiety do najnowszej wersji:

sudo dnf update -y

Dodamy trwałe zezwolenie na przychodzący ruch na porty http/80 i https/443:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

Zastosujemy nowe zasady zapory:

sudo systemctl reload firewalld

Zainstalujemy Nginx:

sudo dnf install nginx -y

Uruchomimy i włączymy serwer Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Ponieważ na chwilę obecną w głównym repozytorium CentOS używana jest wersja PHP 7.2, dodamy repozytorium REMI z PHP 7.4 (minimalna wersja dla Drupala 9).
W tym celu dodamy repozytorium EPEL (wymagane przez repozytorium REMI):

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

Dodamy repozytorium REMI:

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Włączymy moduł php:remi-7.4, aby zainstalować php 7.4:

sudo dnf module enable php:remi-7.4 -y

Zainstalujemy php-fpm i php-cli:

sudo dnf install -y php-fpm php-cli

Zainstalujemy moduły PHP wymagane do działania Drupala:

sudo dnf install -y php-mysqlnd php-date php-dom php-filter php-gd php-hash php-json php-pcre php-pdo php-session php-simplexml php-spl php-tokenizer php-xml

Zainstalujemy również zalecane moduły PHP mbstring opcache:

sudo dnf install -y php-mbstring php-opcache

Zainstalujemy serwer MySQL:

sudo dnf install mysql-server -y

Włączymy i uruchomimy serwer MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Ponieważ tworzymy szablon dla VDS, które mogą być wolne, dodamy opóźnienie uruchomienia mysqld o 30 sekund, w przeciwnym razie mogą wystąpić problemy z uruchomieniem serwera przy początkowym uruchamianiu systemu:

sudo sed -i 's/Group=mysql/a 
ExecStartPre=/bin/sleep 30
/' /usr/lib/systemd/system/mysqld.service

Zmodyfikujemy grupę i użytkownika, pod którym będzie działał nginx, wprowadzając zmiany w /etc/php-fpm.d/www.conf:

sudo sed -i --follow-symlinks 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
sudo sed -i --follow-symlinks 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf

Zmodyfikujemy właściciela katalogu sesji PHP na nginx:

sudo chown -R nginx. /var/lib/php/session

Usuniemy linie z komentarzami z pliku konfiguracyjnego /etc/nginx/nginx.conf (aby nie było podwójnych wywołań dla sed):

sudo sed -i -e '/^[ t]*#/d' /etc/nginx/nginx.conf

Dodamy ustawienia kompresji gzip do /etc/nginx/nginx.conf

sudo sed -i '/types_hash_max_size 2048;/a 

    gzip on;
    gzip_static on;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;
    gzip_comp_level 9;
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_disable "msie6";
    gzip_vary on; 
' /etc/nginx/nginx.conf

Dodamy ustawienia dla domyślnego serwera przetwarzania php przez socket php-fpm, wyłączymy logi dla plików statycznych, zwiększymy czas wygasania, wyłączymy logi dostępu i błędów dla favicon.ico oraz robots.txt i zabronimy dostępu do plików .ht dla wszystkich:

sudo sed -i '/        root         /usr/share/nginx/html;/a 
        index index.php index.html index.htm;
' /etc/nginx/nginx.conf

Dodamy ustawienia dla domyślnego serwera przetwarzania php przez socket php-fpm, wyłączymy logi dla statycznych plików, zwiększymy czas wygasania, wyłączymy logi dostępu i błędów dla favicon.ico i robots.txt i zabronimy dostępu do plików .ht dla wszystkich:

sudo sed -i '/        location / {/a 
		try_files $uri $uri/ /index.php?q=$uri&$args;
        }
    
        location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
        access_log off;
        expires max;
        }
    
        location ~ .php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_ignore_client_abort off;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 180;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
        }
    
        location = /favicon.ico {
        log_not_found off;
        access_log off;
        }
    
        location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
        }
    
        location ~ /.ht {
        deny all;' /etc/nginx/nginx.conf

Zainstalujemy wget, który jest wymagany do instalacji certbota:

sudo dnf install wget -y

Pobierzemy plik wykonywalny certbot ze strony producenta:

cd ~
wget https://dl.eff.org/certbot-auto

Przeniesiemy certbot do /usr/local/bin/:

mv certbot-auto /usr/local/bin/certbot-auto

I przypiszemy prawa i właściciela root:

chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

Zainstalujemy zależności certbot i w tym momencie przerwiemy jego działanie (Odpowiedzi: Y, c):

certbot-auto

Pobierzemy z strony producenta archiwum z najnowszą wersją Drupal 9:

cd ~
wget https://www.drupal.org/download-latest/tar.gz

Zainstalujemy tar do rozpakowywania archiwum:

sudo dnf install tar -y

Usuniemy domyślne pliki w katalogu /usr/share/nginx/html/:

rm -rf /usr/share/nginx/html/*

Rozpakujemy pliki do katalogu serwera www:

tar xf tar.gz -C /usr/share/nginx/html/

Przeniesiemy pliki z podkatalogu do głównego katalogu serwera www:

mv /usr/share/nginx/html/drupal-9.0.7/* /usr/share/nginx/html/

Usuniemy podkatalog:

rm -rf /usr/share/nginx/html/drupal-9.0.7

Usuniemy archiwum z plikami instalacyjnymi:

rm -f ./tar.gz

Przypiszemy właściciela plików do nginx:

chown -R nginx. /usr/share/nginx/html

Na tym etapie wyłączymy serwer i zrobimy zrzut stanu:

shutdown -h now

Po uruchomieniu VDS z zrzutu stanu wykonamy początkową konfigurację serwera MySQL, uruchamiając skrypt:

mysql_secure_installation

Włączymy walidator haseł:

Would you like to setup VALIDATE PASSWORD component? : y

Ustawimy hasło dla użytkownika root MySQL:

New password:
Re-enter new password:

Usuniemy anonimowych użytkowników:

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

Zabronimy zdalnego logowania root:

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

Usuniemy testową bazę danych:

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

Przeładujemy tabele uprawnień:

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Po tym, aby zakończyć instalację, możemy przejść pod adres vps_ip_address
Pod tym adresem zobaczymy stronę instalacyjną Drupal.

Wybierzemy używany język. Na przykład: polski. Klikniemy „Zachowaj i kontynuuj”

Wybierzemy profil instalacyjny (wersja demo służy wyłącznie do zapoznania się z systemem). W naszym przypadku będzie to „standardowy”.

Na następnej stronie wprowadzimy nazwę bazy danych, na przykład „drupal”. Podamy nazwę użytkownika DB root i hasło, które mu nadaliśmy podczas uruchamiania mysql_secure_installation. Klikniemy „Zachowaj i kontynuuj”.

Poczekamy na zakończenie instalacji i aktualizacji tłumaczeń (proces może zająć kilka minut).

Podaj nazwę witryny, ustaw e-mail witryny (z którego będzie pochodzić powiadomienia witryny), login, hasło oraz e-mail konta administratora Drupal. Ustaw również kraj i strefę czasową w ustawieniach regionalnych. Na koniec zakończ instalację klikając "Zapisz i kontynuuj".

Następnie możesz przejść do panelu zarządzania przy użyciu utworzonego loginu i hasła administratora Drupal.

Konfiguracja HTTPS (opcjonalnie)

Aby skonfigurować HTTPS, VDS musi mieć aktualną nazwę DNS, należy podać ją w

/etc/nginx/nginx.conf

w sekcji serwera jako nazwę serwera (na przykład):

server_name  domainname.pl;

Zrestartujmy nginx:

service nginx restart

Uruchomimy certbot:

sudo /usr/local/bin/certbot-auto --nginx

Podaj swój e-mail, zgódź się na warunki usługi (A), subskrypcję newslettera (opcjonalnie) (N), wybierz nazwy domen, dla których należy wystawić certyfikat (Enter dla wszystkich).

W przypadku, gdy wszystko przebiegło bez błędów, zobaczymy komunikat o pomyślnym wydaniu certyfikatów i skonfigurowaniu serwera:

Gratulacje! Pomyślnie włączyłeś ...

Po tym połączenia na porcie 80 będą przekierowywane na 443 (https).

Dodaj do /etc/crontab w celu automatycznego odnawiania certyfikatów:

# Cert Renewal
30 2 * * * root /usr/local/bin/certbot-auto renew --post-hook "nginx -s reload"

Konfiguracja Trusted Host Security (zalecane)

Ta konfiguracja ma na celu rozwiązanie problemu związanego z dynamicznym określaniem base_url i ma na celu zapobieganie atakom HTTP HOST Header (gdy twoja witryna myśli, że jest kimś innym).

W tym celu należy podać zaufane nazwy domen witryny w pliku konfiguracyjnym.

W pliku

/usr/share/nginx/html/sites/default/settings.php odkomentuj lub dodaj ustawienie z wzorcami aktualnych nazw witryny, na przykład:

$settings['trusted_host_patterns'] = [
  '^www.mojadomena.pl$',
];

Instalacja PHP APCu (ZALECANE)

Drupal obsługuje APCu — Alternative PHP User Cache, wersje 8 i 9 intensywniej korzystają z APCu jako krótkoterminowej pamięci podręcznej niż wcześniejsze wersje. Domyślny rozmiar pamięci podręcznej (32 MB) będzie odpowiedni dla większości witryn i nie może przekraczać 512 MB.

Aby aktywować, zainstaluj moduł PHP APCu:

dnf -y install php-pecl-apcu

Zrestartujmy nginx i php-fpm:

service nginx restart
service php-fpm restart

W przypadku używania języka rosyjskiego i APCu z zalecaną wielkością pamięci do pamięci podręcznej, w panelu zarządzania możesz zobaczyć ostrzeżenie, że rozmiar przydzielonej pamięci dla pamięci podręcznej różni się od zalecanego, ale w rzeczywistości wszystko działa prawidłowo, a niepoprawne ostrzeżenie prawdopodobnie zostanie naprawione w najbliższych aktualizacjach.

Lub jeśli ostrzeżenie drażni oko, można użyć odpowiedni patch z oficjalnej strony.

Chcemy przypomnieć, że również możecie przygotować dla nas obraz

Istnieją trzy sposoby, aby wziąć udział.

Przygotuj obraz samodzielnie i otrzymaj 3000 zł na saldo

Jeśli jesteś gotowy, aby od razu przystąpić do działania i stworzyć obraz, którego potrzebujesz, przyznamy ci 3000 zł na wewnętrzne saldo — możesz je wydać na serwery.

Jak stworzyć swój obraz:

  1. Załóż konto u nas na stronie
  2. Poinformuj wsparcie, że zamierzasz tworzyć i testować obrazy
  3. Przyznamy ci 3000 zł i włączymy możliwość tworzenia migawek
  4. Zamów serwer wirtualny z czystym systemem operacyjnym
  5. Zainstaluj na tym VPS oprogramowanie i skonfiguruj je
  6. Sporządź instrukcję lub skrypt do wdrożenia oprogramowania
  7. Utwórz migawkę dla skonfigurowanego serwera
  8. Zamów nowy serwer wirtualny, wybierając w rozwijanej liście „Szablon serwera” wcześniej utworzoną migawkę
  9. W przypadku pomyślnego utworzenia serwera, przekaż materiały uzyskane na etapie 6 obsłudze technicznej
  10. W przypadku błędu możesz upewnić się u wsparcia o przyczynę i powtórzyć konfigurację

Dla właścicieli biznesu: zaoferuj swoje oprogramowanie

Jeśli jesteś deweloperem oprogramowania, które jest wdrażane i używane na VPS, możemy włączyć cię do rynku. W ten sposób możemy pomóc ci przyciągnąć nowych klientów, ruch i rozpoznawalność. Napisz do nas

Opowiedz w komentarzach, jakiego obrazu ci brakuje?

A my sami go przygotujemy

Tworzenie szablonu VPS z Drupalem 9 na CentOS 8

Tworzenie szablonu VPS z Drupalem 9 na CentOS 8

Ź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