Стварэнне шаблона 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

Дадамо ў /etc/nginx/nginx.conf налады кампрэсіі gzip

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

Дадамо ў /etc/nginx/nginx.conf налады індэкснага файла index.php:

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

Дадамо налады для дэфолтнага сервера апрацоўку php праз сокет php-fpm, адключым лог для статычных файлаў, павялічым час expire, адключым лог доступу і памылак для 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

Уключым валідатар пароляў:

Would you like to setup VALIDATE PASSWORD component? : y

Задамо пароль карыстальніка root MySQL:

New password:
Re-enter new password:

Выдалім ананімных карыстальнікаў:

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

Забаранім падлучацца root выдалена:

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

Выдалім тэставую базу даных:

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

Перазагрузім табліцы прывілеяў:

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

Пасля гэтага, для завяршэння ўстаноўкі, мы можам перайсці па адрасе vps_ip_address
Па гэтым адрасе мы ўбачым старонку з усталёўкай Drupal.

Выберам мову, якая выкарыстоўваецца. Напрыклад: руская. Націснем "Захаваць і працягнуць"

Выберам установачны профіль (дэма выкарыстоўваецца выключна для азнаямлення з сістэмай). У нашым выпадку няхай гэта будзе "стандарт".

На наступнай старонцы зададзім імя базы дадзеных, напрыклад "drupal". Пакажам імя карыстальніка БД root і пароль зададзены яму, пры запуску mysql_secure_installation. Націснем "Захаваць і працягнуць".

Дачакаемся завяршэння ўстаноўкі і абнаўлення перакладаў (працэс можа заняць некалькі хвілін).

Пакажам назву сайта, зададзім email сайта (ад імя якога будуць прыходзіць апавяшчэнні сайта), лагін, пароль і email ўліковага запісу адміністратара 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

Увядзем свой e-mail, пагодзімся з умовамі сэрвісу (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 Мб) падыдзе большасці сайтаў, і не можа перавышаць 512 Мб.

Для актывацыі ўсталюем модуль 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