Переезд на новый сервер

В апреле этого года вышла ubuntu 16.04LTS, которая "из коробки" поддерживает php7. А в свете глобальных изменений в ядре php стало очень заманчиво переехать на обновлённую систему. Кроме этого, давно хотел перейти с apache на ngnix и с mysql на mariadb. Этим мы сегодня и займёмся.

Переезжать будут:

  • пара сайтов на wordpress;
  • сайт на joomla;
  • форум на fluxbb;
  • тестовый opencart;
  • тестовый hotbackup.

1. Шаг первый, создаём сервер

Заказываем новую виртуалку и ставим на неё ubuntu 16.04X32. Подключаемся и первым делом устанавливаем mariadb. По опыту работы с mysql, знаю, что его нужно ставить в первую очередь. На разных хостингах установочные образы вроде бы одной и той же ubuntu могут очень сильно отличаться, и часто пакет mysql идёт в комплекте битый. Digitalocean этим никогда не грешил, но перестраховаться стоит.

> apt-get install mariadb-server

Установка проходит без проблем. База ставится с пустым паролем от пользователя root.

Подключаемся к базе и меняем пароль:

> mysql -u root -h localhost
> use mysql;
> update user set password='your_new_password' where User='root';

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

> CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';
> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
> FLUSH PRIVILEGES;

2. База готова, переходим к ngnix

Для этого есть шикарный мануал: http://help.ubuntu.ru/wiki/nginx-phpfpm. Только не забываем, что у нас php7, а не php5.

В дополнении к мануалу, в конфиг ngnix (/etc/ngnix/ngnix.conf), в секцию "http" нам нужно будет добавить строчку:

client_max_body_size 16m;

По умолчанию client_max_body_size выставлен в 1Мб, этого будет очень мало.

3.После этого можем переносить сайты

Для каждого сайта создаём отдельный конфиг в /etc/nginx/sites-available/

> touch any_domain.ru

Пример конфига для wordpress:

server {
        server_name any_domain.ru;
        root /var/www/any_domain.ru; # путь к WP
        index index.html index.htm index.php;
        proxy_read_timeout 20;
        proxy_send_timeout 20;
        gzip on; # включаем сжатие gzip
        gzip_disable "msie6";
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

        location ~ /. {
                deny all; # запрет для скрытых файлов
        }

        location ~* /(?:uploads|files)/.*.php$ {
                deny all; # запрет для загруженных скриптов
        }

        location ~* ^.+.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
                access_log off;
                log_not_found off;
                # expires max;
                # кеширование статики
        }

        location / {
                try_files $uri $uri/ /index.php?$args; # permalinks
        }

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

После чего делаем ссылку на него:

> ln -s /etc/ngnix/sites-available/any_domain.ru ../sites-enabled/any_domain.ru

И создаём папку для нашего сайта:

> mkdir /var/www/any_domain.ru

Копируем всё со старого сервера на новый, переносим дб, и повторяем эти действия для всех сайтов. Всё, теперь можем посмотреть что получилось.

4. Совместимость

Открываю свой свежеперенесённый allwebstuff.info и вижу, что отвалился плагин "WP Code Highlight". Чтобы узнать, в чём именно ошибка, открываем index.php и в самом верху добавляем:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

Обновляем страницу и видим следующую ошибку:

Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /var/www/allweb/wp-content/plugins/wp-code-highlight/wp-code-highlight.php on line 68

Это значит, что плагин не готов к переезду на php7. Отключаем его, и, перебрав пачку никчёмных модулей, находим "Crayon Syntax Highlighter", его и оставляем.

Больше проблем нет, joomla 3.5, fluxbb 1.5.9 и hotbackup запускаются без каких-либо проблем.

5. Результаты

Ещё перед переездом, замерил скорость работы wordpress (этот сайт) на старом сервере. Теперь сравним, что мы получили.

Старый сервер (apache/2.4.12, mysql/5.6.28, php/5.6.11)

apache2 php5.6 apache2 php5.6

Среднее (n=10) время генерации главной страницы: 0.2373621с. Минимальное: 0.120145. Максимальное: 0.320761.

Новый сервер: (nginx/1.9.15, mariadb/10.0.24, php/7.0.4-7)

nginx php7 nginx php7

Среднее (n=10) время генерации главной страницы: 0.0518795с. Минимальное: 0.046535. Максимальное: 0.071338.

Итого: выиграли пару секунд на загрузку всего сайта и на порядок ускорили генерацию страниц. Вывод однозначный- оно того стоит!



Обратная связь Opencart, email отправителя

При отправке заявки через форму обратной связи клиент указывает свой email. Затем, если нужно, можно с ним связаться, используя этот адрес. Но на одном из сайтов возникла проблема: уведомление об обращении на почту прилетает без клиентского email'а.

Парсинг ajax сайтов (Casperjs)

Существуют некоторое количество сайтов, которые не хотят отдавать нормальную страницу по прямому запросу. Будь то защита от копирования, использование сорт оф ReactJS либо, как в моём случае, SSO технология.


(0) Комментариев