Как установить Drupal на CentOS 7

Drupal — одна из ведущих мировых платформ CMS с открытым исходным кодом. Он гибкий, масштабируемый и может использоваться для создания различных типов веб-сайтов, от небольших личных блогов до крупных корпоративных, политических и правительственных сайтов.

В этом руководстве мы объясним, как установить Drupal 8.6 на CentOS 7.

Есть несколько способов установить Drupal. В этом руководстве описаны шаги, необходимые для установки Drupal с использованием шаблона композитора для проектов Drupal, называемого drupal-project.

Мы будем использовать Nginx в качестве веб-сервера, последнюю версию PHP 7.2 и MySQL / MariaDB в качестве сервера базы данных.

Подготовка

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

Создать базу данных MySQL

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

Если MySQL или MariaDB уже установлены на вашем сервере, вы можете пропустить этот шаг, в противном случае вы можете установить серверный пакет MariaDB 5.5 из репозиториев CentOS по умолчанию, набрав:

sudo yum install mariadb-server
Для новых установок MariaDB / MySQL рекомендуется выполнить команду mysql_secure_installation чтобы повысить безопасность вашего сервера базы данных.

Войдите в оболочку MySQL, набрав следующую команду и введите пароль при появлении запроса:

mysql -u root -p

Чтобы создать базу данных с именем drupal , пользователь с именем drupaluser и предоставить необходимые разрешения пользователю, выполните следующие команды:

CREATE DATABASE drupal CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES ON drupal.* TO 'drupaluser'@'localhost' IDENTIFIED BY 'change-with-strong-password';

Установить PHP

CentOS 7 поставляется с PHP версии 5.4, которая устарела и больше не поддерживается. Рекомендуемая версия PHP для Drupal — PHP 7.2.

Чтобы сначала установить PHP 7.2 на CentOS 7, нам нужно включить репозитории EPEL и Remi:

sudo yum install epel-release yum-utilssudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpmsudo yum-config-manager --enable remi-php72

После включения репозиториев для установки PHP 7.2 и всех необходимых расширений PHP выполните следующие команды:

sudo yum install php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl git

Мы установили PHP FPM, потому что мы будем использовать Nginx в качестве веб-сервера.

По умолчанию PHP FPM запускается как пользовательский apache на порту 9000. Мы изменим пользователя на nginx и переключимся с сокета TCP на сокет Unix. Для этого откройте файл /etc/php-fpm.d/www.conf и отредактируйте строки, выделенные желтым:

/etc/php-fpm.d/www.conf
...
user = nginx
...
group = nginx
...
listen = /run/php-fpm/www.sock
...
listen.owner = nginx
listen.group = nginx

Убедитесь, что каталог /var/lib/php имеет правильного владельца, используя следующую команду chown :

sudo chown -R root:nginx /var/lib/php

Наконец, включите и запустите службу PHP FPM:

sudo systemctl enable php-fpmsudo systemctl start php-fpm

Установить Composer

Composer — это менеджер зависимостей для PHP. Мы скачаем шаблон Drupal и установим все необходимые компоненты Drupal с помощью composer.

Следующая команда установит композитор глобально, загрузив установщик Composer с помощью curl и переместив файл в каталог /usr/local/bin :

curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Проверьте установку, выполнив следующую команду, которая распечатает версию композитора:

composer --version

Результат должен выглядеть примерно так:

Composer version 1.8.4 2019-02-11 10:52:10

Установить Drupal

Теперь, когда композитор установлен, создайте новый проект Drupal, используя шаблон Drupal внутри каталога /var/www/my_drupal :

sudo /usr/local/bin/composer create-project drupal-composer/drupal-project:8.x-dev /var/www/my_drupal --stability dev --no-interaction

Приведенная выше команда загрузит шаблон, загрузит все необходимые пакеты php и запустит сценарии, необходимые для подготовки проекта к установке. Процесс может занять несколько минут, и в случае успеха конец вывода будет выглядеть так:

Create a sites/default/settings.php file with chmod 0666
Create a sites/default/files directory with chmod 0777

Следующим шагом будет установка Drupal с помощью Drush. В приведенной ниже команде мы передаем базу данных MySQL и информацию о пользователе, которую мы создали в первом разделе:

cd /var/www/my_drupalsudo vendor/bin/drush site-install --db-url=mysql://drupaluser:change-with-strong-password@localhost/drupal

Установщик предложит вам следующее сообщение, просто нажмите Enter, чтобы продолжить.

You are about to DROP all tables in your 'drupal' database. Do you want to continue? (yes/no) [yes]:

После завершения установки сценарий распечатает имя пользователя и пароль администратора. Результат должен выглядеть примерно так:

[notice] Starting Drupal installation. This takes a while.
[success] Installation complete.  User name: admin  User password: frxka2Db5v

Наконец, установите правильные разрешения, чтобы веб-сервер мог иметь полный доступ к файлам и каталогам сайта:

sudo chown -R nginx: /var/www/my_drupal

Настроить Nginx

К настоящему времени у вас уже должен быть установлен Nginx с сертификатом SSL в вашей системе, если нет, проверьте предварительные требования для этого руководства.

Чтобы создать новый серверный блок для нашего нового проекта Drupal, мы будем использовать рецепт Nginx с официального сайта Nginx.

Откройте текстовый редактор и создайте следующий файл:

sudo nano /etc/nginx/conf.d/example.com
/etc/nginx/conf.d/example.com
# Redirect HTTP -> HTTPS
server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://example.com$request_uri;
}

# Redirect WWW -> NON WWW
server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    root /var/www/my_drupal/web;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;

    # log files
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location ~ ..*/.*.php$ {
        return 403;
    }

    location ~ ^/sites/.*/private/ {
        return 403;
    }

    # Block access to scripts in site files directory
    location ~ ^/sites/[^/]+/files/.*.php$ {
        deny all;
    }

    # Block access to "hidden" files and directories whose names begin with a
    # period. This includes directories used by version control systems such
    # as Subversion or Git to store control files.
    location ~ (^|/). {
        return 403;
    }

    location / {
        try_files $uri /index.php?$query_string;
    }

    location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1;
    }

    # Don't allow direct access to PHP files in the vendor directory.
    location ~ /vendor/.*.php$ {
        deny all;
        return 404;
    }


    location ~ '.php$|^/update.php' {
        fastcgi_split_path_info ^(.+?.php)(|/.*)$;
        include fastcgi_params;
        # Block httpoxy attacks. See https://httpoxy.org/.
        fastcgi_param HTTP_PROXY "";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/run/php-fpm/www.sock;
    }

    # Fighting with Styles? This little gem is amazing.
    # location ~ ^/sites/.*/files/imagecache/ { # For Drupal <= 6
    location ~ ^/sites/.*/files/styles/ { # For Drupal >= 7
        try_files $uri @rewrite;
    }

    # Handle private files through Drupal. Private file's path can come
    # with a language prefix.
    location ~ ^(/[a-z-]+)?/system/files/ { # For Drupal >= 7
        try_files $uri /index.php?$query_string;
    }

    location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        try_files $uri @rewrite;
        expires max;
        log_not_found off;
    }

}
Не забудьте заменить example.com своим доменом Drupal и указать правильный путь к файлам сертификатов SSL. Все HTTP-запросы будут перенаправлены на HTTPS . Фрагменты, используемые в этой конфигурации, созданы в этом руководстве .

Перед перезапуском сервиса Nginx проверьте, нет ли синтаксических ошибок:

sudo nginx -t

Перезапустите службу Nginx, чтобы изменения вступили в силу, набрав:

sudo systemctl restart nginx

Проверить установку

Откройте браузер, введите свой домен и, если установка прошла успешно, появится экран, подобный следующему:

Вы можете войти в систему как администратор и приступить к настройке новой установки Drupal.

Установите модули и темы Drupal

Теперь, когда у вас установлен проект Drupal, вы захотите установить некоторые модули и темы. Модули и темы Drupal размещаются в настраиваемом репозитории композитора, который drupal-project настраивает для нас из коробки.

Чтобы установить модуль или тему, все, что вам нужно сделать, это composer require drupal/module_or_theme_name cd в каталог проекта и ввести composer require drupal/module_or_theme_name . Например, если мы хотим установить модуль Pathauto , нам нужно выполнить следующую команду:

cd /var/www/my_drupalsudo -u nginx /usr/local/bin/composer require drupal/pathauto
Добавляя sudo -u nginx мы запускаем команду как пользователь nginx
Using version ^1.3 for drupal/pathauto
./composer.json has been updated
> DrupalProjectcomposerScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
  - Installing drupal/token (1.5.0): Downloading (100%) 
  - Installing drupal/ctools (3.2.0): Downloading (100%)
  - Installing drupal/pathauto (1.3.0): Downloading (100%)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
> DrupalProjectcomposerScriptHandler::createRequiredFiles

Как видно из выходных данных выше, композитор также устанавливает для нас все зависимости пакетов.

Обновить Drupal Core

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

Для резервного копирования установочных файлов вы можете использовать следующую команду rsync , конечно, вам нужно будет использовать правильный путь к установочному каталогу:

sudo rsync -a /var/www/my_drupal/  /var/www/my_drupal_$(date +%F)

Для резервного копирования базы данных мы можем использовать стандартную команду mysqldump :

mysqldump -u root -p > /var/www/my_drupal_database_$(date +%F).sql

или drush sql-dump :

cd /var/www/my_drupalvendor/bin/drush sql-dump > /var/www/my_drupal_database_$(date +%F).sql

Теперь, когда мы создали резервную копию, мы можем продолжить и обновить все файлы ядра Drupal, выполнив следующую команду:

sudo -u nginx /usr/local/bin/composer update drupal/core webflo/drupal-core-require-dev symfony/* --with-dependencies

Выводы

Поздравляем, вы успешно установили Drupal 8 с помощью composer и узнали, как устанавливать модули и темы. Теперь вы можете приступить к настройке своего сайта. Руководство пользователя Drupal 8 — хорошее место для начала, чтобы узнать больше о том, как управлять вашей установкой Drupal. Также не забудьте посетить проект шаблона Drupal Composer на Github.

Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Оставьте комментарий