Установка Drupal 10 на хостинг с Ubuntu 22.04, LAMP, ISP manager Lite 6.68

Главные вкладки

Аватар пользователя karmike karmike 15 марта 2023 в 13:29
1

Обновляю два сайта на Друпале с 8 до 10. Старые сайты снес, содержимое сохранено, буду избирательно переносить на новые сайты, поэтому Друпал ставлю заново.

Сам я не специалист, можно сказать, продвинутый поневоле пользователь.
Поэтому буду писать сюда проблемы и решения для других "чайников".
Может быть, слишком подробно, но иначе нам, самоделкиным, никак.

Ставил Друпал Композером, как рекомендовано, да тако оно и проще, на самом деле.
Тут есть моменты.
а) Нужно иметь доступ SSH, чтобы работать с терминалом, и клиент. Обычно рекомендуют Putty, но есть штука много лучше. Это такой Bitvise SSH client, бесплатный, графический, запоминает много сайтов (если надо) и в дополнение имеет файловый менеджер, типа Total Commander.
б) Многие вещи я делаю через ISP manager, о чем и упомянул в названии. Хостинг 1VDS.

Теперь о проблемах.

Вводная часть. У вас заранее должны быть DNS имена, обычно можно получить их через хостинг. Сначала я создаю сайт на хостинге с имеющимся именем, используя ISP менеджер (Сайты > создать сайт). При этом он создает директорию для сайта и файлы конфигурации для Apache и nginx (если у провайдера используется т.н. связка). Собственно, веб-сервер просто отправляет запросы из интернет в эту дир., а там уже должны быть файлы для обработки запросов.
Никакого сайта пока нет, но если в дир. положить файл index.html или info.php, будут работать.

Далее, иду в SSH client, захожу на хостинг (провайдеры дают логин и пароль), файл менеджером нахожу дир. сайта (можно найти через ISP сайт - файлы конфигурации), копирую для запуска Композера.

Получается команда типа такого (у вашего хостинга путь может быть другой):
sudo composer create-project drupal/recommended-project /var/www/www-root/data/www/mysite.ru

1. Композер ругается на запуск от имени администратора, но без sudo установка не происходит. Пишет что-то типа, что не может создать какую-то директорию...

На всякий случай я делаю другого юзера (по ssh попадаете в консоль Linux как root) и даю ему права администратора. Root может больше безобразий натворить...

2. Композер засовывает Друпал в поддир. сайта web, а ISP при создании сайта устанавливает root dir по имени сайта, без web, поэтому, при попытке открыть сайт вы видите вместо Друпала листинг директории mysite.ru.

Чтобы исправить эту проблему, нужно указать Апачу и Nginx где на самом деле находятся файлы Друпал. Композер не правит конфиг. файлы серверов.
Я открываю конфигурационные файлы ISP менеджером (Сайты - выбрать сайт - файлы конфигурации) и дописываю web во все позиции, где указывается корень сайта.

Для nginx:
set $root_path /var/www/www-root/data/www/mysite.ru/web; (два раза)

Для Apache:
DocumentRoot /var/www/www-root/data/www/mysite.ru/web
(три раза)

После чего все работает и можно провести установку Друпал.

После установки Друпал можно зайти в админку и посмотреть отчеты (может понадобиться запустить Cron).

Проблема 2. У меня в отчете была одна ошибка: Настройки доверенного хоста. Выключено. В settings.php не настроена переменная trusted_host_patterns.

Сделал все по рекомендациям, правил файл с помощью Bitvise SSH client, все равно ошибка осталась, хотя изменения в файле налицо. (это пока не победил)

Проблема 3. Предупреждение в отчете Друпал: Кеширование PHP APCu. Включено (32 МБ). В зависимости от конфигурации, Drupal может работать с лимитом APCu 32 МБ. Однако рекомендуется устанавливать APCu (базовый) лимит 32 MB или выше, особенно если Ваш сайт использует дополнительные модули.

Иду в ISP , Сайты - выбрать нужный - в верхнем меню PHP - находим поиском APC - видим список переменных, увидел только одну с 32 мб. - apc.shm_size.
Справа три точки: изменить, сделал 128 мб., оно сохранилось. Для активации нужно перезапустить Апач (тем же ISP).

В результате вижу в отчете: PHP Версия 8.2.3 Ограничение памяти 128M, а кэш APCu так и остался 32 МБ.

Пока все, буду дописывать по мере появления ответов.

Лучший ответ

Аватар пользователя karmike karmike 15 марта 2023 в 15:56

По проблеме 2: trusted_host_patterns.

Все элементарно, запись:
$settings['trusted_host_patterns'] = [
'^www\.mysite\.ru$',
];
^www нужно, чтобы сайт открывался и с www и без него
нужно не тупо раскомментировать, а вынести за пределы записи, которая начинается с /** и кончается */
(в данном случае, после
* @see https://www.drupal.org/docs/installing-drupal/trusted-host-settings
*/
Интересно, что ошибка исчезает даже без перезапуска сайта и Cron

Комментарии

Аватар пользователя karmike karmike 15 марта 2023 в 15:56

По проблеме 2: trusted_host_patterns.

Все элементарно, запись:
$settings['trusted_host_patterns'] = [
'^www\.mysite\.ru$',
];
^www нужно, чтобы сайт открывался и с www и без него
нужно не тупо раскомментировать, а вынести за пределы записи, которая начинается с /** и кончается */
(в данном случае, после
* @see https://www.drupal.org/docs/installing-drupal/trusted-host-settings
*/
Интересно, что ошибка исчезает даже без перезапуска сайта и Cron

Аватар пользователя karmike karmike 15 марта 2023 в 16:29

Прошу прощения, наврал. ^ - это знак начала строки. Чтобы сайт работал как mysite.ru и как www.mysite.ru, нужна такая запись:

$settings['trusted_host_patterns'] = [
'^www\.mysite\.ru$',
'^mysite\.ru$',
];
Да, помещенная после */ и до следующего /**

Аватар пользователя karmike karmike 16 марта 2023 в 14:27

По проблеме 3: Проблема с кешированием APCu

Предупреждение в отчете Друпал: Кеширование PHP APCu
Включено (32 МБ) В зависимости от конфигурации, Drupal может работать с лимитом APCu 32 МБ. Однако рекомендуется устанавливать APCu (базовый) лимит 32 MB или выше, особенно если Ваш сайт использует дополнительные модули.

Пробовал изменять apc.shm_size с помощью ISP manager, почему-то не работает. Нашел, как управлять APCu.

Файл конфигурации APCu находится тут: etc/php/8.2/mods-available/apcu.ini
У меня там всего две строки:
extension=apcu.so
apc.shm_size = "32M"

изменил на
extension=apcu.so
apc.shm_size = "128M"

Изменения появляются в отчете Друпал после рестарта php
(если вы не знаете, какой php активен, используйте php -v. узнать, где расположен его конфиг, можно командой # php -i |grep "php.ini", однако в этом конфиге про APCu ничего нет, хотя раньше, в PHP до 5.5, вроде, было, но это неточно)

# systemctl restart php8.2-fpm

и перезапуска сайта через ISP панель (выбрать сайт, выключить и снова включить).

Да, новый размер кэш PHP APCu (128 МБ) у меня появился в отчете на обоих сайтах (PHP у них общий), без перезапуска второго сайта.

Аватар пользователя karmike karmike 21 марта в 21:20

Вот это работает, чтобы все время не выскакивала ошибка по лимиту APCu 32 МБ:
https://blog.mailns.ru/notes/1607/

Заменить в файле /core/modules/system/system.install

if (Bytes::toNumber($apcu_actual_size) < Bytes::toNumber($apcu_recommended_size)) {
$requirements['php_apcu']['severity'] = REQUIREMENT_WARNING;
$requirements['php_apcu']['description'] = t('Depending on your configuration, Drupal can run with a @apcu_size APCu limit. However, a @apcu_default_size APCu limit (the default) or above is recommended, especially if your site uses additional custom or contributed modules.', [
'@apcu_size' => $apcu_actual_size,
'@apcu_default_size' => $apcu_recommended_size,

на

if ($memory_info['seg_size'] < Bytes::toNumber($apcu_recommended_size)) {
$requirements['php_apcu']['severity'] = REQUIREMENT_WARNING;
$requirements['php_apcu']['description'] = t('Depending on your configuration, Drupal can run with a @apcu_size APCu limit. However, a @apcu_default_size APCu limit (the default) or above is recommended, especially if your site uses additional custom or contributed modules.', [
'@apcu_size' => $apcu_actual_size,

Аватар пользователя jura12 jura12 22 марта в 16:58

Патч 37 помог для друпал 10.2 . Пропатчил через composer . Плагином composer require cweagans/composer-patches

сначала сохраните потом в composer.json добавляете:

    "extra": {
        "enable-patching": true,
        "patches": {
            "drupal/core": {
                "Status report wrongly warns of APCu memory limit when admin lan
guage is not English"
: "https://www.drupal.org/files/issues/2023-12-16/status-re
port-apcu-3142928.patch"

            }
        },

потом composer install или update вроде.

Аватар пользователя karmike karmike 23 марта 2023 в 13:54

Установка модулей Media и Media Library (очень полезные для управления изображениями и видео) через Расширения.

Директории /sites/default установить права 777, после установки сделать обратно 775

Друпал ругался, что
Каталог public://media-icons/generic не существует
Почему-то не мог создать такой каталог даже через SSH (обычно public - это sites/default/files). Но модули работают и без него.

После установки в Отчетах вижу:

Предупреждение
The Drupal media toolbar item requires the Встроенный медиа filter to be enabled.

Без фильтра при использовании ссылок на внешние медиа-файлы злобные хакеры могут вам набедокурить.
Очень старательно эта проблема описана здесь:
https://www.webwash.net/manage-media-using-entity-browser-and-entity-emb...
Но на Друпал 10 оно не работает (написано еще для 8.5), начиная с
4. Enter in a name for the asset in the Name field and select an image using the Image, then click on Save (нет там поля Name)

И далее везде, в том числе, Configure “Allowed HTML tags” list - в Друпал 10 не соответствует описанию. Многое уже встроено, например, здесь можно включить Remote video:

http://smart-karelia.ru/admin/structure/media/add

Однако, где включить этот "Встроенный медиа filter" (embedded media) не нашел.

Аватар пользователя filinkov.ru filinkov.ru 24 марта 2023 в 18:59

По проблеме 3: Проблема с кешированием APCu - забей это баг в ядре никак не могут исправить это уже несколько лет ))) Это просто уведомление

Аватар пользователя filinkov.ru filinkov.ru 24 марта 2023 в 19:04
1

Я могу тебе одно посоветовать. Сам я очень много сделал развертываний на ISP manager. Выполняй все операции от пользователя не root, создавай отедельно учетку под каждую группу проектов и из под нее копируй файлы на сервер и выполняй скрипты и тогда не нужно будет заморачиваться за настройку прав, Drupal все сделает за тебя.

PHP 8.2 - использовать пока крайне не рекомендую даже для Drupal 10. Не пришло еще время, слишком много сторонних модулей, которые не совместимы будут. PHP 8.1 только его.

Аватар пользователя karmike karmike 8 апреля 2023 в 17:07

Спасибо, но мне не помогло. Создавал пользователя test-user в ISP менеджере, переходил под него, там создавал новый сайт, который оказался не в дир. /var/www/www-root/data/www/mysite.ru/ , как обычно на 1VDS, а в дир. /var/www/test-user/data/www/test.mysite.ru Ю но сайт не работал.

Видимо, настройки веб-сервера дают работать только из дир. /var/www/www-root/data/ (пользователь www-root).
Дальше копать не стал.

Аватар пользователя bsyomov bsyomov 10 апреля 2023 в 12:22

/var/www/www-root/data/

Это точно не так. Надо разбираться, смотреть логи. Что-то перекорёжено вероятно в настройках.

Аватар пользователя karmike karmike 11 апреля 2023 в 11:23

Да все понятно. 1VDS для всех сайтов хозяина выделенного сервера создает пользователя www-root, директорию, внутри data, www, и туда пихает все сайты. Если самому создать пользователя и от него сайты, то ему создается своя дир. Наверно, нужно конфиг Апач подправить, но зачем, если все работает?
Конечно, если зачем-то нужно изолировать сайты друг от друга, то лучше новых пользователей создавать для каждого.

Аватар пользователя karmike karmike 8 апреля 2023 в 17:37

Поборол проблему с закачкой картинок через CKEditor, также не закачивались аватары, в т.ч. для админа.

С помощью хороших людей:
https://drupal.ru/node/141340
Ошибка при закачке аватара
ivnish
29 февраля 2020 в 20:26
Узнай от какого имени работает твой веб сервер и принудительно примени этого юзера и его группу как владельца всех файлов и каталогов

Как узнать тут:
https://unlix.ru/как-узнать-от-какого-пользователя-веб/
Цитата:
"Чтобы это сделать, необходимо создать файл php со следующим содержимым:

Если файл у нас в корневой директории и называется user.php, а адрес веб-сервера 192.168.1.100, то зайдем на веб-сервер по ссылке http://192.168.1.100/user.php
Получаем: uid=33(www-data) gid=33(www-data) groups=33(www-data)"

Узнавши пользователя сервера, дал ему права записи в дир. sites, default, files (775, может быть, исполние запретить?) , и загрузка заработала. теперь админ у меня такой:

Аватар пользователя bsyomov bsyomov 28 апреля 2023 в 17:08

У вас что-то не так с apache-itk, или с конфигом apache, или пулов php, судя по всему. Потому, что php должен не от www-data запускаться, а от соответствующего пользователя, владельца сайта.

В общем, это не решение проблемы, а борьба с последствиями других проблем.