Създаване на шаблон VPS с Drupal 9 на Centos 8

Продовжаваме да разширяваме нашия маркетплейс. Преди време разказахме как създадохме образ на Gitlab, а тази седмица в нашия маркетплейс се появи Drupal.

Разказваме защо избрахме точно него и как е създаден образа.

Създаване на шаблон VPS с Drupal 9 на Centos 8

Drupal — удобна и мощна платформа за създаване на всякакви типове сайтове: от микросайтове и блогове до големи социални проекти, използвана също като основа за уеб приложения, написана на PHP и използваща релационни бази данни за съхранение на данни.

Drupal 9 включва всички функции, реализирани в версия 8.9. Основната разлика между версия 9 и версия 8 е, че за платформата ще бъдат издавани актуализации и корекции за сигурност и след ноември 2021 година. Освен това, в версия 9 процесът на актуализиране е опростен, правейки обновяването от версия 8 още по-лесно.

Изисквания към сървъра

За използване на Drupal се препоръчва 2 Гб RAM и 2 ядра CPU.

Основните файлове на Drupal заемат около 100 Мб, допълнително ще ви е нужно пространство за съхранение на изображения, бази данни, теми, допълнителни модули и резервни копия, което ще зависи от размера на вашия сайт.

За Drupal 9 е необходим PHP 7.4 или по-висок с минимално ограничение (memory_limit) на паметта 64 Мб, при използване на допълнителни модули се препоръчва да се установи 128 Мб.

Като уеб сървър Drupal може да използва Apache или Nginx, а за база данни MySQL, PostgreSQL или SQLite.

Ще инсталираме Drupal с помощта на Nginx и MySQL.

Инсталиране

Актуализираме инсталираните пакети до последната версия:

sudo dnf update -y

Добавяме постоянно разрешение за входящия трафик на портовете http/80 и https/443:

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

Прилагаме новите правила на фаервола:

sudo systemctl reload firewalld

Инсталираме Nginx:

sudo dnf install nginx -y

Стартираме и включваме сървъра Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Тъй като в момента в основния репозиторий на Centos се използва версия PHP 7.2, добавяме репозитория REMI с PHP 7.4 (минималната версия за Drupal 9).
За целта добавяме репозитория EPEL (изисква се от репозитория REMI):

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

Добавяме репозиторий REMI:

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

Включваме модула php:remi-7.4 за инсталиране на php 7.4:

sudo dnf module enable php:remi-7.4 -y

Инсталираме php-fpm и php-cli:

sudo dnf install -y php-fpm php-cli

Инсталираме PHP модулите, необходими за работата на Drupal:

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

Също така ще инсталираме препоръчителните модули PHP mbstring opcache:

sudo dnf install -y php-mbstring php-opcache

Ще инсталираме MySQL сървър:

sudo dnf install mysql-server -y

Ще активираме и стартираме MySQL сървъра:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Тъй като правим шаблон за VDS, а те могат да бъдат бавни, ще добавим закъснение на старта на mysqld от 30 секунди, в противен случай могат да възникнат проблеми при стартиране на сървъра при първоначално зареждане на системата:

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

Ще променим групата и потребителя, от които ще работи nginx, като направим промени в /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

Ще променим собственика на директорията за сесии PHP също на nginx:

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

Ще премахнем редовете с коментари от конфигурационния файл /etc/nginx/nginx.conf (за да няма двойни срабатывания за sed):

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

Ще добавим настройки за компресия gzip в /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

Ще добавим настройки за индексния файл index.php в /etc/nginx/nginx.conf:

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

Ще добавим настройки за подразбиращият се сървър, обработващ php чрез сокет php-fpm, ще изключим лог за статични файлове, ще увеличим времето за изтичане, ще изключим лог за достъп и грешки за favicon.ico и robots.txt и ще забраним достъпа до файлове .ht за всички:

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

Ще инсталираме wget, необходим за инсталиране на certbot:

sudo dnf install wget -y

Сваляме изпълнимия файл certbot от официалния сайт:

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

Преместваме certbot в /usr/local/bin/:

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

И задаваме правата и собственик на root:

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

Ще инсталираме зависимостите certbot и на този етап ще прекратим неговата работа (Отговори: Y, c):

certbot-auto

Сваляме от официалния сайт архив с последната версия на Drupal 9:

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

Инсталираме tar за разархивиране на архива:

sudo dnf install tar -y

Премахваме файловете по подразбиране в директорията /usr/share/nginx/html/:

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

Разархивираме файловете в директорията на уеб сървъра:

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

Преместваме файловете от подкаталога в основната директория на уеб сървъра:

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

Изтриваме подкаталога:

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

Изтриваме архива с инсталационните файлове:

rm -f ./tar.gz

Задаваме собственика на файловете на nginx:

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

На този етап ще изключим сървъра и ще направим снимка:

shutdown -h now

След стартиране на VDS от снимката, ще извършим първоначалната настройка на MySQL сървъра, стартирайки скрипта:

mysql_secure_installation

Включваме валидатора за пароли:

Искате ли да настроите компонента VALIDATE PASSWORD? : y

Задаваме паролата на потребителя root MySQL:

Нова парола:
Потвърдете новата парола:

Премахваме анонимните потребители:

Премахнете анонимните потребители? (Натиснете y|Y за да Yes, всяка друга клавиша за No) : y

Забраняваме отдалечен достъп на root:

Забранявате ли отдалечения достъп до root? (Натиснете y|Y за да Yes, всяка друга клавиша за No) : y

Премахваме тестовата база данни:

Премахнете тестовата база данни и достъпа до нея? (Натиснете y|Y за да Yes, всяка друга клавиша за No) : y

Презареждаме таблиците с привилегии:

Презаредете таблиците с привилегии сега? (Натиснете y|Y за да Yes, всяка друга клавиша за No) : y

След това, за да завършим инсталацията, можем да отидем на адреса vps_ip_address
На този адрес ще видим страницата за инсталиране на Drupal.

Избираме използвания език. Например: български. Натискаме "Запази и продължи"

Избираме инсталационния профил (демото се използва единствено за запознаване със системата). В нашия случай нека бъде "стандарт".

На следващата страница задаваме имената на базата данни, например "drupal". Указваме името на потребителя на БД root и паролата, зададена му при стартиране на mysql_secure_installation. Натискаме "Запази и продължи".

Изчакваме завършването на инсталацията и обновяването на преводите (процесът може да отнеме няколко минути).

Въведете името на сайта, задайте имейл адреса на сайта (от който ще получават известия), потребителското име, паролата и имейл адреса на администратора на Drupal. Също така задайте страната и часовата зона в регионалните настройки. Завършете инсталацията, като натиснете "Запази и продължи".

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

Настройка на HTTPS (по избор)

За настройка на HTTPS вашият VDS трябва да има валидно DNS име. Въведете в

/etc/nginx/nginx.conf

раздела server името на сървъра (например):

server_name  domainname.ru;

Рестартирайте nginx:

service nginx restart

Стартирайте certbot:

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

Въведете своя имейл, приемете условията на услугата (A), абонамент за бюлетин (по избор) (N), изберете домейн имената, за които искате да издадете сертификат (Enter за всички).

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

Congratulations! You have successfully enabled ...

След това свързванията на порт 80 ще бъдат пренасочвани към 443 (https).

Добавете в /etc/crontab за автоматично обновяване на сертификатите:

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

Настройка на Trusted Host Security (препоръчително)

Тази настройка е предназначена като решение на проблема, свързан с динамичното определяне на base_url, и има за цел да предотврати атаки с HTTP HOST Header (когато вашият сайт смята, че е някой друг).

За това трябва да зададете доверени домейни на сайта във файла с настройки.

В файла

/usr/share/nginx/html/sites/default/settings.php разкоментирайте или добавете настройка с шаблоните на актуалните имена на сайта, например:

$settings['trusted_host_patterns'] = [
  '^www.mydomain.ru$',
];

Инсталиране на PHP APCu (ПРЕПОРЪЧВА СЕ)

Drupal поддържа APCu — Alternative PHP User Cache, версиите 8 и 9 по-интензивно използват APCu като краткосрочен локален кеш в сравнение с предишните версии. Размерът на кеша по подразбиране (32 MB) е подходящ за повечето сайтове и не може да надвишава 512 MB.

За активиране инсталирайте модула PHP APCu:

dnf -y install php-pecl-apcu

Рестартирайте nginx и php-fpm:

service nginx restart
service php-fpm restart

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

Или ако предупреждението дразни, можете да използвате съответстващият пач от сайта.

Искаме да напомним, че вие също можете да направите образ за нас

Има три начина да участвате.

Подгответе образ сами и получите 3000 лева на баланса

Ако сте готови веднага да се включите в действието и сами да създадете образа, който ви липсва, ще ви зачислим 3000 лева на вътрешния баланс — можете да ги харчите за сървъри.

Как да създадете свой образ:

  1. Създайте акаунт при нас на сайта
  2. Съобщете на поддръжката, че планирате да създавате и тествате образи
  3. Ние ще ви зачислим 3000 лева и ще активираме възможността за създаване на снимки
  4. Поръчайте виртуален сървър с чиста операционна система
  5. Инсталирайте софтуера на този VPS и го настройте
  6. Съставете инструкция или скрипт за разгръщане на софтуера
  7. Създайте снимка за настроения сървър
  8. Поръчайте нов виртуален сървър, избирайки в падащото меню „Шаблон на сървъра“ създадената по-рано снимка
  9. При успешното създаване на сървъра, предоставете материалите получени на етап 6 на техническата поддръжка
  10. В случай на грешка можете да уточните причината при поддръжката и да повторите настройката

За собствениците на бизнес: предложете своя софтуер

Ако сте разработчик на софтуер, който се разгръща и използва на VPS, то можем да ви включим в маркетплейса. По този начин можем да ви помогнем да привлечете нови клиенти, трафик и разпознаваемост. Пишете ни

Кажете ни в коментарите, какъв образ ви липсва?

И ние ще го подготвим сами

Създаване на шаблон VPS с Drupal 9 на Centos 8

Създаване на шаблон VPS с Drupal 9 на Centos 8

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster