ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Настройка Magento 2 с Redis, Varnish и Nginx как termination SSL в Ubuntu

В этой статье мы покажем вам, как установить Magento 2 на Ubuntu 16.04 VPS с MariaDB, PHP-FPM 7.0, Varnish как полный кэш страниц, Nginx, как termination SSL и Redis для сеанс хранения и кэширования страниц. Это руководство должно работать на других системах Linux VPS, но была испытана и написана для Ubuntu 16.04.

Войдите на свой VPS через SSH

ssh destroyer@my_server

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

sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get -y install curl nano git

Установка MariaDB 10,0

Установите последнюю версию 10.0 сервера MariaDB из официальных репозиториев Ubuntu:

sudo apt-get install -y mariadb-server

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

mysql_secure_installation

Далее, нам необходимо создать базу данных для нашей установки Magento.

MySQL -p -uroot
MariaDB [(none)]> CREATE DATABASE magento;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON magento.* TO 'magento'@'localhost' IDENTIFIED BY 'my_very_strong_password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q

Установка PHP 7.0, composer и все необходимые модули PHP

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

sudo apt-get -y install php-fpm php-cli php-gd php-imagick php-mysql php-mcrypt php-pear php-curl php-intl php-xsl php-zip php-mbstring

Изменение нескольких параметров PHP по умолчанию:

sudo sed -i "s/memory_limit = .*/memory_limit = 256M/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 128M/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/zlib.output_compression = .*/zlib.output_compression = on/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/max_execution_time = .*/max_execution_time = 18000/" /etc/php/7.0/fpm/php.ini

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

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Установка Magento 2 из Github

Клонирование репозиторий Magento в каталог ~/myMagentoSite.ru, используя следующую команду:

sudo git https://github.com/magento/magento2.git /var/www/myMagentoSite.ru

Получите последнюю стабильную версию, в момент написания это Magento 2.1.2:

CD /var/www/myMagentoSite.ru
sudo git checkout $(git describe --tags $(git rev-list --tags --max-count=1))

Запуск composer, чтобы установить все зависимости Magento:

sudo composer install

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

sudo bin/magento setup:install \
--base-url=http://myMagentoSite.ru/ \
--db-host=localhost \
--db-name=magento \
--db-user=magento \
--db-password=my_very_strong_password \
--admin-firstname=First  \
--admin-lastname=Last \
--admin-email=user@myMagentoSite.ru \
--admin-user=admin \
--admin-password=my_very_strong_password987 \
--language=ru_RU \
--currency=RU \
--timezone=Europe/Moscow \
--use-rewrites=1

Если установка прошла успешно, вы увидите что-то вроде этого:

[SUCCESS]: Magento installation complete.
[SUCCESS]: Magento Admin URI: /admin_medj1n

Выполните команду crontab, чтобы создать cronjob

crontab -u www-data -e

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

* * * * * /usr/bin/php /var/www/myMagentoSite.ru/bin/magento cron:run | grep -v "Запуск задачи по расписанию" >> /var/www/myMagentoSite.ru/var/log/magento.cron.log

И, наконец, установить правильные разрешения:

sudo chown -R www-data: /var/www/myMagentoSite.ru

Установка и настройка Nginx

Установка Nginx из репозиториев Ubuntu :: Официальный

sudo apt-get -y install nginx

Создание нового блока сервера Nginx со следующим содержанием:

sudo nano /etc/nginx/sites-available/myMagentoSite.ru
upstream fastcgi_backend {
  server   unix:/run/php/php7.0-fpm.sock;
}

server {
    server_name myMagentoSite.ru www.myMagentoSite.ru;
    listen 80;
    set $MAGE_ROOT /var/www/myMagentoSite.ru;
    set $MAGE_MODE developer; # or production

    access_log /var/log/nginx/myMagentoSite.ru-access.log;
    error_log /var/log/nginx/myMagentoSite.ru-error.log;

    include /var/www/myMagentoSite.ru/nginx.conf.sample;        
}

Активировать блок сервера, создав символическую ссылку:

sudo ln -s /etc/nginx/sites-available/myMagentoSite.ru /etc/nginx/sites-enabled/myMagentoSite.ru

Удалить конфигурацию по умолчанию:

sudo rm -f /etc/nginx/sites-enabled/default

Проверка конфигурации Nginx и перезапуск Nginx:

sudo nginx -t
sudo service nginx restart

Вы должны быть теперь в состоянии войти в свой бэкэнд Magento, перейдя в

http://myMagentoSite.ru/admin_medj1n

Используйте информацию, которую вы установили при запуске

bin/magento setup:install.

Установка и настройка Varnish

Установка Varnish так просто, выполнив следующую команду:

sudo apt-get install varnish

Зайдите в приборную панель администратора Magento, нажмите на ссылку МАГАЗИН (левый боковой панели) -> Конфигурация -> Дополнительно -> Система -> Full Page Cache.
Используйте системное значение Unselected, из списка приложений Caching, выберите Varnish Cache (Recommended), сохраните конфигурацию, нажмите на ссылку Конфигурация Varnish и нажмите на Export VCL для кнопки Varnish 4. Файл varnish.vcl, который мы будем использовать, будет экспортирован в каталог /var/www/myMagentoSite.ru/var/.

Кэш Flush  Magento:

sudo php bin/magento cache:flush

Удалите файл /etc/varnish/default.vcl и создайте симлинк на экспортируемую конфигурацию varnish.

sudo rm -f /etc/varnish/default.vcl
sudo ln -sf /var/www/myMagentoSite.ru/var/varnish.vcl /etc/varnish/default.vcl

Для изменения порта varnish от 6081 до 80, нам нужно изменить конфигурацию службы Systemd.

Создайте новый файл customexec.conf

sudo mkdir -p /etc/systemd/system/varnish.service.d
sudo nano /etc/systemd/system/varnish.service.d/customexec.conf

вставьте следующее:

[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

и перезагрузите Systemd

sudo systemctl daemon-reload

Теперь нам нужно изменить порт прослушивания Nginx от 80 до 8080 и включить termination Nginx SSL с http2, чтобы сделать это откройте файл конфигурации Nginx и измените его следующим образом:

sudo nano /etc/nginx/sites-available/myMagentoSite.ru
upstream fastcgi_backend {
  server   unix:/run/php/php7.0-fpm.sock;
}

server {
    server_name myMagentoSite.ru www.myMagentoSite.ru;
    listen 8080;
    set $MAGE_ROOT /var/www/myMagentoSite.ru;
    set $MAGE_MODE production; # or developer

    access_log /var/log/nginx/myMagentoSite.ru-access.log;
    error_log /var/log/nginx/myMagentoSite.ru-error.log;

    include /var/www/myMagentoSite.ru/nginx.conf.sample;        
}

server {

    listen 443 ssl http2;
    server_name myMagentoSite.ru www.myMagentoSite.ru;

    ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; # change with your SSL cert
    ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; # change with your SSL key
    ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers               'AES128+EECDH:AES128+EDH:!aNULL';
    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout 24h;
    keepalive_timeout 300s;

    location / {
        proxy_pass http://127.0.0.1;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Ssl-Offloaded "1";
        #proxy_hide_header X-Varnish;
        #proxy_hide_header Via;

        proxy_set_header X-Forwarded-Proto $scheme;

    }

}

Если вы еще не имеете сертификат SSL, вы можете приобрести сертификат доверенного SSL или получить его бесплатно с помощью Let’s Encrypt.

Перезапуск Varnish и Nginx:

sudo systemctl restart nginx
sudo systemctl restart varnish

Изменить базовый URL для протокола HTTPS и очистите кэш

sudo bin/magento setup:store-config:set --base-url="https://myMagentoSite.ru"
sudo php bin/magento cache:flush

Если все настроено правильно, то вы должны быть в состоянии войти в свой бэкэнд Magento, перейдя по ссылке https://myMagentoSite.ru/admin_medj1n.

Установка и настройка кэширования Redis

Redis является одним из ключевых значений в памяти хранилища данных, и мы будем использовать его для замены бэкэнда Magento 2 Zend_Cache_Backend_File по умолчанию. Установите Redis, выполнив следующую команду:

apt-get install php-redis redis-server

Чтобы настроить установку Magento используйте Redis для хранения сессии, откройте файл app/etc/env.php и измените/добавьте следующее:

sudo nano /var/www/myMagentoSite.ru/app/etc/env.php

изменение:

'session' =>
  array (
    'save' => 'files',
  ),

с:

'session' => 
   array (
   'save' => 'redis',
   'redis' => 
      array (
	'host' => '127.0.0.1',
	'port' => '6379',
	'password' => '',
	'timeout' => '2.5',
	'persistent_identifier' => '',
	'database' => '0',
	'compression_threshold' => '2048',
	'compression_library' => 'gzip',
	'log_level' => '1',
	'max_concurrency' => '6',
	'break_after_frontend' => '5',
	'break_after_adminhtml' => '30',
	'first_lifetime' => '600',
	'bot_first_lifetime' => '60',
	'bot_lifetime' => '7200',
	'disable_locking' => '0',
	'min_lifetime' => '60',
	'max_lifetime' => '2592000'
    )
),

и использовать Redis для кэширования страниц:

'cache' =>
array(
   'frontend' =>
   array(
      'default' =>
      array(
         'backend' => 'Cm_Cache_Backend_Redis',
         'backend_options' =>
         array(
            'server' => '127.0.0.1',
            'port' => '6379'
            ),
    ),
    'page_cache' =>
    array(
      'backend' => 'Cm_Cache_Backend_Redis',
      'backend_options' =>
       array(
         'server' => '127.0.0.1',
         'port' => '6379',
         'database' => '1',
         'compress_data' => '0'
       )
    )
  )
),

И, наконец очистите кэш снова:

sudo php bin/magento cache:flush

Далее оптимизация

Для дальнейшей оптимизации вашей установки Magento в панели управления администратора Magento:

1. Перейдите в МАГАЗИН -> Конфигурация -> Каталог -> Каталог -> Используйте плоский каталог, выберите Да и нажмите кнопку Сохранить конфигурацию.
2. Перейдите к МАГАЗИН -> Конфигурация -> Дополнительно -> Инструменты разработчика -> Параметры JavaScript и установите Merge JavaScript Files и Minify JavaScript – Files на Да и нажмите кнопку Сохранить конфигурацию ..
3. Перейдите к МАГАЗИН -> Конфигурация -> Дополнительно -> Разработчик -> Настройки CSS и установить как Merge CSS Files и Minify CSS – Files на Да и нажмите кнопку Сохранить конфигурацию.
4. Рассмотрите вопрос об использовании CDN – сеть доставки контента

Не забудьте очистить кэш:

sudo php bin/magento cache:flush

Вот и все. Вы успешно установили Magento 2 с Redis в качестве хранилища сеанса и кэширования страниц, Varnish в качестве полного кэширования страниц и Nginx как SSL termination на вашем Ubuntu 16,04 VPS. Для получения дополнительных сведений о том, как управлять вашей установкой Magento, пожалуйста, обратитесь к официальной документации Magento.

Настройка Magento 2 с Redis, Varnish и Nginx как termination SSL в Ubuntu

Exit mobile version