Verification: a143cc29221c9be0

Nginx php fpm для drupal

Nginx php fpm для drupal

Введение


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

  • У вас есть доменное имя, указывающее на IP-адрес вашего публичного сервера. Мы будем использовать example.com .
  • У вас установлен Nginx, следуя этим инструкциям .
  • У вас установлен сертификат SSL для вашего домена. Вы можете установить бесплатный SSL-сертификат Let's Encrypt, следуя этим инструкциям .

Прежде чем вы начнете

    Обновите индекс пакетов и системные пакеты до последних версий:

sudo apt update && sudo apt upgrade 

1. Создайте базу данных MySQL


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

sudo apt install mysql-server 

      Для новых установок MySQL рекомендуется выполнить mysql_secure_installation команду, чтобы повысить безопасность вашего сервера MySQL.

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

Чтобы войти в оболочку 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'; 

2. Установите PHP


PHP 7.2, который является версией PHP по умолчанию в Ubuntu 18.04, полностью поддерживается и рекомендуется для Drupal 8.6. Поскольку мы будем использовать Nginx в качестве веб-сервера, мы также установим PHP-FPM.

Чтобы установить все необходимые модули PHP, выполните следующую команду:

sudo apt install php7.2-cli php7.2-fpm php7.2-mysql php7.2-json php7.2-opcache php7.2-mbstring php7.2-xml php7.2-gd php7.2-curl 


    Служба PHP-FPM автоматически запустится после завершения процесса установки, вы можете проверить это, распечатав статус службы:

systemctl status php7.2-fpm 


    В выводе должно быть указано, что служба fpm активна и работает.

● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-05-19 19:54:13 UTC; 9h ago
     Docs: man:php-fpm7.2(8)
 Main PID: 17781 (php-fpm7.2)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 507)
   CGroup: /system.slice/php7.2-fpm.service
           ├─17781 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
           ├─17796 php-fpm: pool www
           └─17797 php-fpm: pool www
 

3. Установите Composer


    Composer - это менеджер зависимостей для PHP, и мы будем использовать его для загрузки шаблона Drupal и установки всех необходимых компонентов Drupal.

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


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

composer --version 

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

Composer version 1.6.5 2018-05-04 11:44:59
 

4. Установите Drupal

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

sudo 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 и информацию о пользователе, созданную на шаге 1:

cd /var/www/my_drupal sudo 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. Consider using the --notify global option.
[success] Installation complete.  User name: admin  User password: XRkC9Q5WN9
 

    Наконец, нам нужно установить правильные разрешения, чтобы веб-сервер мог иметь полный доступ к файлам и каталогам сайта. И Nginx, и PHP работают как www-data пользователь и www-data группа, поэтому нам нужно выполнить следующую команду:

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

5. Настройте Nginx


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

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

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

sudo nano /etc/nginx/sites-available/example.com 

/etc/nginx/sites-available/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/php7.2-fpm.sock;
    }

    # Fighting with Styles? This little gem is amazing.
    # location ~ ^/sites/.*/files/imagecache/ { # For Drupal     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;
    }

}
 

Включите серверный блок, создав символическую ссылку на sites-enabled каталог:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ 

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

sudo nginx -t 

    Если ошибок нет, результат должен выглядеть так:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
sudo systemctl restart nginx 

6. Протестируйте установку

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

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

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


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

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

cd /var/www/my_drupal sudo -u www-data composer require drupal/pathauto 
Using version ^1.3 for drupal/pathauto
./composer.json has been updated
> DrupalProject\composer\ScriptHandler::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
> DrupalProject\composer\ScriptHandler::createRequiredFiles
 

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

8. Обновите ядро ​​Drupal

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

Для резервного копирования установочных файлов вы можете использовать следующую команду 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 
cd /var/www/my_drupal vendor/bin/drush sql-dump > /var/www/my_drupal_database_$(date +%F).sql 

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

sudo -u www-data composer update drupal/core webflo/drupal-core-require-dev symfony/* --with-dependencies 

Шаг 1. Установите HTTP-сервер Nginx

Для работы Drupal требуется веб-сервер, а Nginx — один из самых популярных веб-серверов с открытым исходным кодом, доступных сегодня.

Чтобы установить Nginx в Ubuntu, выполните следующие команды:

sudo apt update
sudo apt install nginx

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

sudo systemctl stop nginx.service
sudo systemctl start nginx.service
sudo systemctl enable nginx.service

Чтобы проверить, установлен ли и работает ли Nginx, откройте свой веб-браузер и перейдите к IP-адресу или имени хоста сервера.

http://localhost

Если вы видите указанную выше страницу в своем браузере, значит, Nginx работает должным образом.

Шаг 2: Установите сервер базы данных MariaDB

Вам также понадобится сервер базы данных для запуска Drupal. Сервер базы данных — это место, где хранится контент Drupal.

Настоящим сервером базы данных с открытым исходным кодом, который вы можете использовать с Drupal, является сервер базы данных MariaDB. Это быстрый, безопасный и используемый по умолчанию сервер почти для всех серверов Linux.

Чтобы установить MariaDB, выполните следующие команды:

sudo apt-get install mariadb-server mariadb-client

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

sudo systemctl stop mariadb.service
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

Затем запустите приведенные ниже команды, чтобы защитить сервер базы данных паролем root, если вам не было предложено сделать это во время установки.

sudo mysql_secure_installation

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

  • Enter current password for root (enter for none): Just press the Enter
  • Set root password? [Y/n]: Y
  • New password: введите пароль
  • Re-enter new password: повторите пароль
  • Remove anonymous users? [Y/n]: Y
  • Disallow root login remotely? [Y/n]: Y
  • Remove test database and access to it? [Y/n]:  Y
  • Reload privilege tables now? [Y/n]:  Y

Чтобы проверить и убедиться, что MariaDB установлена ​​и работает, войдите в консоль базы данных, используя следующие команды:

sudo mysql -u root -p

при появлении запроса введите пароль root.

Если вы видите экран, похожий на показанный выше, значит сервер успешно установлен.

Шаг 3. Установите PHP 7.4 и связанные модули

Drupal — это приложение на основе PHP, и для его запуска требуется PHP. Поскольку в некоторых версиях Ubuntu нет последней версии PHP, вы можете добавить сторонний репозиторий PPA для установки PHP оттуда.

Приведенная ниже команда добавит сторонний PPA в Ubuntu.

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php

Затем обновите и обновите до PHP 7.4.

sudo apt update

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

sudo apt install php7.4-fpm php7.4-common php7.4-mysql php7.4-gmp php7.4-curl php7.4-intl php7.4-mbstring php7.4-xmlrpc php7.4-gd php7.4-xml php7.4-cli php7.4-zip

После установки PHP 7.4 перейдите и настройте некоторые базовые параметры, которые могут потребоваться для правильной работы Drupal.

Выполните команды ниже, чтобы открыть PHP.

sudo nano /etc/php/7.4/fpm/php.ini

Ниже приведены хорошие настройки для большинства веб-сайтов Drupal.

file_uploads = On
allow_url_fopen = On
short_open_tag = On
memory_limit = 256M
cgi.fix_pathinfo = 0
upload_max_filesize = 100M
max_execution_time = 360
date.timezone = America/Chicago

При этом должен быть установлен PHP 7.4 с некоторыми базовыми настройками, чтобы позволить Drupal функционировать.

Шаг 4: Создайте базу данных Drupal

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

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

sudo mysql -u root -p

Затем создайте базу данных с именем drupal.

CREATE DATABASE drupal;

Cоздайте пользователя базы данных с именем drupaluser и установите пароль

CREATE USER 'drupaluser'@'localhost' IDENTIFIED BY 'new_password_here';

Затем предоставьте пользователю полный доступ к базе данных.

GRANT ALL ON drupal.* TO 'drupaluser'@'localhost' WITH GRANT OPTION;

Наконец, сохраните изменения и выйдите.

FLUSH PRIVILEGES;
EXIT;

Шаг 5: Загрузите Drupal

На этом этапе Drupal готов к загрузке и установке. Используйте команды ниже, чтобы загрузить последнюю версию Drupal.

Чтобы получить последнюю версию Drupal, вы можете использовать репозиторий Github … Установите Composer, Curl и другие зависимости, чтобы начать.

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

После установки curl и Composer, указанных выше, перейдите в корневой каталог Nginx и загрузите пакеты Drupal с Github … Всегда заменяйте номер ветки на последнюю ветку.

Чтобы просмотреть выпуски Drupal, перейдите на страницу .

cd /var/www/
sudo git clone --branch 8.8.5 https://git.drupal.org/project/drupal.git
cd /var/www/drupal
sudo composer install

Затем запустите команду ниже, чтобы позволить www-dataпользователю владеть каталогом Drupal.

sudo chown -R www-data:www-data /var/www/drupal/
sudo chmod -R 755 /var/www/drupal/

Шаг 6. Настройте Nginx

Ниже вы настраиваете файл Nginx VirtualHost для создаваемого сайта Drupal. Этот файл определяет, как обрабатываются и обрабатываются клиентские запросы.

Выполните приведенные ниже команды, чтобы создать новый файл VirtualHost с именем drupalв каталоге /etc/nginx/sites-available/ .

sudo nano /etc/nginx/sites-available/drupal

Ниже приведены очень хорошие настройки конфигурации для большинства сайтов Drupal на сервере Nginx. Эта конфигурация должна отлично работать.

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

server {
    listen 80;
    listen [::]:80;
    root /var/www/drupal;
    index  index.php index.html index.htm;
    server_name  example.com www.example.com;

    client_max_body_size 100M;
    autoindex 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' {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Fighting with Styles? This little gem is amazing.
    # location ~ ^/sites/.*/files/imagecache/ { # 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;
    }
}

Сохраните файл и выйдите.

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

sudo ln -s /etc/nginx/sites-available/drupal /etc/nginx/sites-enabled/
sudo systemctl restart nginx.service

На этом этапе drupal готов и его можно запустить, перейдя на IP-адрес сервера или имя хоста.

http://localhost

Однако, если вы хотите включить SSL или принимать веб-трафик через HTTPS, вы можете продолжить ниже, чтобы установить и настроить бесплатные SSL-сертификаты Let’s Encrypt.

Шаг 7. Установите сертификаты Let’s Encrypt Wildcard

На шаге 6 Drupal готов к использованию без SSL. Однако, если вы хотите обслуживать веб-трафик через HTTPS, необходимо установить и настроить SSL-сертификат Let’s Encrypt или другие общедоступные сертификаты.

Чтобы установить Let’s Encrypt, выполните следующие команды.

sudo apt update
sudo apt-get install letsencrypt

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

Let’s Encrypt предлагает множество способов проверить, что вы владеете доменом, для которого хотите предоставить сертификаты SSL. Вы не сможете создавать сертификаты, если не сможете доказать, что владеете доменом, который хотите защитить.

Для сертификатов с подстановочными знаками единственный метод запроса, который принимает Let’s Encrypt, — это запрос DNS, который мы можем вызвать с помощью  флага предпочтительных вызовов = dns .

Итак, чтобы сгенерировать сертификат с подстановочными знаками для домена * .example.com , вы выполните следующие команды:

sudo certbot certonly --manual --preferred-challenges=dns --email admin@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d example.com -d *.example.com

Параметры команды выше описаны ниже:

  • certonly:                                     Obtain or renew a certificate, but do not install
  • –manual:                                    Obtain certificates interactively
  • –preferred-challenges=dns:      Use dns to authenticate domain ownership
  • –server:                                      Specify the endpoint to use to generate
  • –agree-tos:                                 Agree to the ACME server’s subscriber terms
  • -d:                                               Domain name to provide certificates for

После выполнения приведенной выше команды Let’s Encrypt предоставит текстовую строку для добавления текстовой записи в вашу запись DNS.

Пример:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: y
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for example.com

-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: y

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

x4MrZ6y-JqFJQRmq_lGi9ReRQHPa1aTC9J2O7wDKzq8

Before continuing, verify the record is deployed.

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

Подготовка

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

  • Укажите доменное имя, указывающее на общедоступный IP-адрес вашего сервера. В этом руководстве мы будем использовать example.com .
  • Вы вошли в систему как пользователь с привилегиями sudo .
  • Nginx устанавливается, следуя этим инструкциям .
  • У вас установлен сертификат SSL для вашего домена. Вы можете сгенерировать бесплатный SSL-сертификат Let's Encrypt, следуя этим инструкциям .

Создание базы данных MySQL

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

Если на вашем сервере Ubuntu еще не установлены MySQL или MariaDB, вы можете установить его, следуя одной из следующих инструкций:

  • Установите MySQL на CentOS 7 .
  • Установите MariaDB на CentOS 7 .

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

mysql -u root -p

Из оболочки MySQL выполните следующие операторы SQL, чтобы создать базу данных с именем wordpress , пользователем с именем wordpressuser и предоставить пользователю все необходимые разрешения:

CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'change-with-strong-password';FLUSH PRIVILEGES;EXIT;

Установка PHP 7.2

CentOS 7 поставляется с PHP версии 5.4. Рекомендуемая версия PHP для WordPress — PHP 7.2.

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

sudo yum install epel-release yum-utilssudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpmsudo yum-config-manager --enable remi-php72sudo yum install php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl

Мы установили 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

Скачивание WordPress

Перед загрузкой архива WordPress сначала создайте каталог, в который мы поместим файлы WordPress:

sudo mkdir -p /var/www/html/example.com

Следующим шагом будет загрузка последней версии WordPress со страницы загрузки WordPress с помощью следующей команды wget :

cd /tmpwget https://wordpress.org/latest.tar.gz

Когда загрузка будет завершена, извлеките архив WordPress и переместите файлы в корневой каталог документов домена:

tar xf latest.tar.gzsudo mv /tmp/wordpress/* /var/www/html/example.com/

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

sudo chown -R nginx: /var/www/html/example.com

Настройка Nginx

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

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

Откройте текстовый редактор и создайте новый серверный блок nginx :

sudo nano /etc/nginx/conf.d/example.com.conf

Добавьте следующие строки:

/etc/nginx/conf.d/example.com.conf

# 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/html/example.com;
    index index.php;

    # 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;
    include snippets/letsencrypt.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 / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index   index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

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

}

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

sudo nginx -t

Если ошибок нет, результат должен выглядеть так:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

и вы можете перезапустить Nginx , набрав:

sudo systemctl restart nginx

Завершение установки WordPress

Теперь, когда WordPress загружен и настройка сервера завершена, вы можете завершить установку через веб-интерфейс.

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

Выберите язык, который вы хотите использовать, и нажмите кнопку « Continue .

Затем вы увидите следующую информационную страницу, нажмите Let's go! кнопка.

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

Запустите установку WordPress, нажав кнопку « Run the Installation .

На следующем шаге вам нужно будет ввести имя для вашего сайта WordPress и выбрать имя пользователя (в целях безопасности не используйте «admin»).

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

Введите свой адрес электронной почты и выберите, хотите ли вы, чтобы поисковые системы не индексировали сайт (не рекомендуется).

Щелкните Install WordPress и после завершения установки вы попадете на страницу, информирующую вас о том, что WordPress установлен.

Чтобы получить доступ к странице входа в WordPress, нажмите кнопку « Log in .

Введите ваше имя пользователя и пароль.

Вы будете перенаправлены на панель администрирования WordPress.

Отсюда вы можете приступить к настройке вашей установки WordPress, установив новые темы и плагины.

Требования к серверу

Для использования 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, cогласимся с условиями сервиса (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 с рекомендованным размером памяти для кеша, в панели управления вы можете увидеть предупреждение, что размер выделенной памяти для кеша отличается от рекомендованного, но фактически все работает правильно, а некорректное предупреждение скорее всего исправят в ближайших обновлениях.

Или если предупреждение режет глаз, можно использовать соответствующий патч с оффсайта.

Установка PHP 7.4 с Apache

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

sudo apt updatesudo apt install php libapache2-mod-php

После установки пакетов перезапустите Apache, чтобы модуль PHP загрузился:

sudo systemctl restart apache2

Установка PHP 7.4 с Nginx

В отличие от Apache, Nginx не имеет встроенной поддержки обработки файлов PHP. Мы будем использовать PHP-FPM («менеджер процессов fastCGI») для обработки файлов PHP.

Выполните следующие команды, чтобы установить пакеты PHP и PHP FPM:

sudo apt updatesudo apt install php-fpm

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

systemctl status php7.4-fpm
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-06-09 19:07:05 UTC; 37s ago

Теперь вы можете отредактировать блок сервера Nginx и добавить следующие строки, чтобы Nginx мог обрабатывать файлы PHP:

server {

    # . . . other code

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
}

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

sudo systemctl restart nginx

Установка расширений PHP

Расширения PHP — это скомпилированные библиотеки, которые расширяют основные функции PHP. Расширения доступны в виде пакетов и могут быть легко установлены с помощью apt :

sudo apt install php-[extname]

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

sudo apt install php-mysql php-gd

После установки нового расширения PHP, в зависимости от ваших настроек, не забудьте перезапустить службу Apache или PHP FPM.

Тестирование обработки PHP

Чтобы проверить, правильно ли настроен веб-сервер для обработки PHP, создайте новый файл с именем info.php внутри каталога /var/www/html со следующим кодом:

/var/www/html/info.php

Сохраните файл, откройте браузер и посетите: http://your_server_ip/info.php .

Вы увидите информацию о своей конфигурации PHP, как показано на изображении ниже:

Установка предыдущих версий PHP

Ондржей Сури, разработчик Debian, поддерживает репозиторий, включающий несколько версий PHP. Чтобы включить репозиторий , запустите:

sudo apt install software-properties-commonsudo add-apt-repository ppa:ondrej/php

Теперь вы можете установить любую нужную версию PHP, добавив номер версии к имени пакета:

sudo apt install php[version]

Например, чтобы установить PHP 7.1 и несколько распространенных модулей PHP, вы должны запустить:

sudo apt install php7.1 php7.1-common php7.1-opcache php7.1-mcrypt php7.1-cli php7.1-gd php7.1-curl php7.1-mysql