Contents

Обновление интернет-магазина shopware.

| Ubuntu 20.04 | php5.6 | php7.4 | apache24 | mariadb 10.6 |

Переезд shopware 4 со старого хостинга, где отстутствует поддержка php7.4. Обновление на shopware 5.

Так как на старом хостинге нет поддержки php7.4, то придётся перенести базу данных и файлы на ноду, где установлена php5.6, а затем обновиться до php7.4.

Я уже подготовил данные:

  • скачал файлы со старого хостинга
  • сделал дамп базы MySQL через phpmyadmin.

Первым делом нужно просто перенести текущую версию интернет-магазина shopware 4. Для этого подготовим сервер.

Apache24:

1
2
3
sudo apt update
sudo apt install apache2
curl "http://localhost"

MariaDB:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
sudo apt install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirror.mephi.ru/mariadb/repo/10.6/ubuntu focal main'
sudo apt update
sudo apt install mariadb-server
sudo mysql_secure_installation
sudo mysql -uroot

Создать базу данных:
MariaDB [(none)]> CREATE DATABASE shopware4;

Создать пользователя только для входа с localhost:
MariaDB [(none)]> CREATE USER 'shop'@'localhost' IDENTIFIED BY 'Qaz123';

Не сработало, проверить ->
Дать полный доступ пользователю к базе данных:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON shopware4.* TO 'shop'@'localhost';

Перезагрузить привилегии:
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;

Дать права на всё (*)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO 'shop'@'localhost';

Загрузим дамп базы данных:
pass=Qaz123
mysql shopware4 -ushop -p$pass < ~/DB1754314.sql

Убедимся, что в базе теперь есть куча таблиц:
mysql -ushop -p$pass
MariaDB [(none)]> show databases;
MariaDB [(none)]> use shopware4;
MariaDB [shopware4]> show tables;

Сделать бэкап базы и файлов:

1
2
mysqldump -v -ushop -p$pass shopware4 > ~/shopwaredb5.1.6.sql
tar -zcvf ~/shopware5.1.6.tgz /var/www/html/shopware

PHP 5.6:

1
2
3
4
5
6
7
8
sudo add-apt-repository ppa:ondrej/php
sudo apt install php5.6 php5.6-cli php5.6-fpm php5.6-curl \
                 php5.6-json php5.6-zip php5.6-gd php5.6-xml \
                 php5.6-mbstring php5.6-opcache php5.6-mysql \
                 php5.6-intl unzip libapache2-mod-php5.6 php5.6-common \
                 php5.6-xmlrpc php5.6-mysql
sudo a2enmod rewrite
sudo systemctl restart apache2

PHP 7.4:

1
2
3
4
5
6
7
8
sudo add-apt-repository ppa:ondrej/php
sudo apt install php7.4 php7.4-cli php7.4-fpm php7.4-curl \
                 php7.4-json php7.4-zip php7.4-gd php7.4-xml \
                 php7.4-mbstring php7.4-opcache php7.4-mysql \
                 php7.4-intl unzip libapache2-mod-php7.4 php7.4-common \
                 php7.4-xmlrpc php7.4-mysql
sudo a2enmod rewrite
sudo systemctl restart apache2

Настраиваем согласно рекомендациям для shopware:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
cat /etc/php/5.6/apache2/php.ini

# PHP OPcache
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

# PHP settings
file_uploads = On
allow_url_fopen = On
short_open_tag = On
memory_limit = 256M
upload_max_filesize = 100M
max_execution_time = 360
date.timezone = Europe/Berlin
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
cat /etc/php/7.4/apache2/php.ini

# PHP OPcache
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

# PHP settings
file_uploads = On
allow_url_fopen = On
short_open_tag = On
memory_limit = 256M
upload_max_filesize = 100M
max_execution_time = 360
date.timezone = Europe/Berlin

Optional MySQL settings MySQL variable group_concat_max_len should be increased to 2048 (default: 1024) innodb_buffer_pool_size should be at least as large as the whole database query_cache_size should normally be between 100 - 200MB

1
2
3
4
5
6
cat /etc/mysql/mariadb.conf.d/150-custom-shopware.cnf
[mysqld]
group_concat_max_len = 2048M
innodb_buffer_pool_size = 2G
query_cache_limit = 10M
query_cache_size = 100M

Для проверки установленных значений: mysql> SHOW VARIABLES LIKE ‘have_query_cache’

Variable_name Value
have_query_cache YES

YES указывает на то, что кеш включён.

Для мониторинга: mysql> show status like ‘%Qcache%’;

Variable_name Value
Qcache_free_blocks 165
Qcache_free_memory 3893664
Qcache_hits 4654886
Qcache_inserts 352314
Qcache_lowmem_prunes 301
Qcache_not_cached 66691
Qcache_queries_in_cache 147
Qcache_total_blocks 469

Значение Qcache_hits должно быть очень большим.

Для очистки кеша: FLUSH QUERY CACHE

/var/www/html/phpinfo.php

1
2
3
<?php
  phpinfo();
?>

curl http://localhost/phpinfo.php http://k8s/phpinfo.php

HINT! Piping to xargs is a dirty way of doing that which can be done inside of find.

find . -type d -exec chmod 0755 {} ; find . -type f -exec chmod 0644 {} ; You can be even more controlling with other options, such as:

find . -type d -user harry -exec chown daisy {} ;

Переключение версии php через CLI: sudo update-alternatives –config php или sudo update-alternatives –set php /usr/bin/php7.4 sudo update-alternatives –set php /usr/bin/php5.6

Переключение с помощью apache c 7.4 на 5.6: sudo a2dismod php7.4 sudo a2enmod php5.6 sudo service apache2 restart

эти команды по сути удаляют и создают симлинки. Убедиться можно заглянув в каталог mods*:

1
2
3
4
5
ls -l /etc/apache2/mods-*/*php*
-rw-r--r-- 1 root root 867 сен 23 21:57 /etc/apache2/mods-available/php5.6.conf
-rw-r--r-- 1 root root 102 сен 23 21:57 /etc/apache2/mods-available/php5.6.load
lrwxrwxrwx 1 root root  29 окт  5 17:23 /etc/apache2/mods-enabled/php5.6.conf -> ../mods-available/php5.6.conf
lrwxrwxrwx 1 root root  29 окт  5 17:23 /etc/apache2/mods-enabled/php5.6.load -> ../mods-available/php5.6.load

распаковываем данные в /var/www/html/shopware/ и модифицируем файл:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
cat /var/www/html/shopware/config.php
<?php return array (
  'db' =>
  array (
    'username' => 'shop',
    'password' => 'Qaz123',
    'host' => 'localhost',
    'port' => '3306',
    'dbname' => 'shopware4',
  ),
);

Решаем проблему с правами:

1
2
3
4
5
sudo find /var/www/html/shopware/ -type d -exec chmod 0755 {} \;
sudo find /var/www/html/shopware/ -type f -exec chmod 0644 {} \;
# sudo rm -rf /var/www/html/shopware/cache/*
# sudo rm -rf /var/www/html/shopware/logs/*
sudo chown -Rv www-data:www-data /var/www/html/shopware

Сконфигурируем virtualhost apache:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
cat /etc/apache2/sites-available/shopware.conf
<VirtualHost *:80>
     ServerAdmin admin@example.com
     DocumentRoot /var/www/html/shopware
     ServerName example.com

     <Directory /var/www/html/shopware/>
          Options FollowSymlinks
          AllowOverride All
          Require all granted
     </Directory>

     ErrorLog ${APACHE_LOG_DIR}/shopware-error.log
     CustomLog ${APACHE_LOG_DIR}/shopware-access.log combined

</VirtualHost>

sudo a2ensite shopware.conf
sudo a2dissite 000-default.conf
sudo a2enmod rewrite
sudo systemctl reload apache2.service

При входе будет выкидывать на оригинальный сайт, чтобы обойти это можно указать в файле /etc/hosts переопределив значение dns-имени : ip-адресу нового сервера. Затем зайти в админку и поменять внутри CMS установить доменное имя на нужное. (для 4й версии shopware alias /backend).

Теперь можно приступать к обновлению. Скачать их можно тут. Официальный гайд по обновлению Секция Update via shell.

Я проводил обновление с 4й версии shopware на 5. Не получалось обновиться с помощью веб-интерфейса, из-за того что автопдейтер предлагал обновиться сразу на версию с php7.4+. Чтобы решить эту проблему я обновил на переходную версию (указана поддержка php5.6+ и php7.4+) shopware 5.5.7, затем переключил c php5.6+ на php7.4+ и стал обновлять дальше.

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

1
2
3
4
# список всех плагинов:
sudo -u www-data php bin/console sw:plugin:list
# удалить плагин:
sudo -u www-data php bin/console sw:plugin:uninstall SwagPaymentPaypal

Опишу здесь порядок обновлений до версии 5.5.7:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
sudo -u www-data bash
cd /tmp
wget https://www.shopware.com/en/Download/redirect/version/sw5/file/update_5.5.7_5a8d8cb57f6d70de39231060532ac81e4831d40d.zip
unzip -d /var/www/html/shopware /tmp/update_5.5.7_5a8d8cb57f6d70de39231060532ac81e4831d40d.zip
cd /var/www/html/shopware
php recovery/update/index.php
rm -rf /var/www/html/shopware/update-assets
exit
sudo a2dismod php5.6
sudo a2enmod php7.4
sudo systemctl restart apache2

Если возникают ошибки, нужно не забывать заглядывать в логи. Например, в /var/log/apache2/shopware-error.log

На этом обновление до 5й версии можно считать законченным.