Это полное руководство по теме: ускорение WordPress для самостоятельного решения задачи. Выполняя инструкции вы сможете существенно ускорить ваш сайт. Далее идет пошаговая инструкция, но если вам лень читать или лень все это делать самостоятельно, то я могу предоставить вам это как услугу.
Рано или поздно перед каждым встает задача — ускорение WordPress. Объемы данных вырастают до такой степени, что сайт начинает еле-еле выдавать информацию порциями. Это совершенно не приемлемо, в случае, если вашим сайтом пользуется огромное количество людей или от его аптайма зависит чья-то работа.
Решение задачи основано на методе, описанном Дэйвом Хилдичем(Dave Hilditch).
Технология такая: берем быстрый web-сервер(Nginx), быстрый транслятор PHP(HHVM) в режиме запуска(SAPI) PHP-FPM, быстрый движок БД(Percona XtraDB), после перевода исходников PHP в байт-код кэшируем байт-код(APC) и кладем кэш в оперативку(Memcached), кэшируем страницы(W3 Total Cache), кэшируем HTTP запросы(Varnish).
Переход на Nginx это уже адское ускорение WordPress. Это позволит обрабатывать гораздо больше посетителей, но добавьте сюда все остальные фичи и ваш сайт станет предметом зависти других владельцев сайтов на WordPress.
Шаги реализующие ускорение WordPress
Вам понадобится доступ по SSH и знание некоторых команд Linux, если вы решите все делать самостоятельно. Далее идут шаги:
- Зарегистрируйте VPS хостинг на Reg.ru (или любой другой хостинг Ubuntu 14.04+ VPS);
- Зарегистрируйте домен;
- Следуйте инструкциям Ansible Playlist;
- Установите cURL, mcrypt и настройте фаервол:1234567sudo apt-get install php5-curlsudo apt-get install php5-mcryptsudo ufw allow sshsudo ufw allow 80/tcpsudo ufw allow 443/tcpsudo ufw allow 25/tcpsudo ufw enable
- Установите PHP7 для быстрого запастного плана:12345sudo add-apt-repository ppa:ondrej/phpsudo apt-get updatesudo apt-get install -y tmux curl wget nginx php7.0-fpm php7.0-cli php7.0-curl php7.0-gd php7.0-intlsudo apt-get install php7.0-mysql php-memcached php7.0-mbstring php7.0-zip php7.0-xmlvi /etc/nginx/conf.d/upstream.conf
(Измените сокет php на новый сокет php7)123upstream php {server unix:/var/run/php/php7.0-fpm.sock;} - Установите fail2ban для защиты сервера от атак(отредактируйте jail.local после того как он будет создан, найдите блок nginx и измените на true):12sudo apt-get install fail2bancp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local1vi /etc/fail2ban/filter.d/wordpress.conf
Вставьте следующие строки:12[Definition]failregex = ^<HOST>.*POST.*(wp-login\.php|xmlrpc\.php).* (403|499)
Далее:1vi /etc/fail2ban/jail.conf
Измените nginx enabled=true (вместо false)
Измените bantime на 86400 (1 день вместо 10 минут)
Вставьте следующее после блока nginx:123456[wordpress]enabled = trueport = http,httpsfilter = wordpresslogpath = /var/log/nginx/*access.logmaxretry = 3 - Установите sendmail (не нужно, если вы используете сторонний сервис типа Mandrill или Mailgun – примечание: настройка SPF-записей займет больше времени)12sudo apt-get install sendmailsudo sendmailconfig (укажите Y и Y в качестве ответов на вопросы)
- Настройка автоматического обновления (добавьте “kernel”; в черный список, так как на некоторых серверах, типа Digital Ocean, необходимо обновлять его из консоли, для обеспечения стабильной работы):12sudo apt-get install unattended-upgradesvi /etc/apt/apt.conf.d/50unattended-upgrades
- Запуск1update-rc.d xxx disable (где "xxx" - это сервис, который вы хотиете отключить)
для любых сервисов, которые вы не хотите запускать. Проверьте сервисы с помощью –status-all. Примечание: если у вас 1GB RAM или меньше, отключите Varnish и HHVM и используйте PHP7 – нужно будет внести изменения в файл /etc/nginx/sites-available/domain.com – три вещи: 1) Установить 80-й порт, вместо 8080-го, 2) Изменить приоритетный метод с hhvm на php, 3) Удалить резервную строку в первичном методе - Настройка cron – найдите свой wp-config.php файл (
/var/www/html/yourdomain/wp-config.php
) и добавьте следующий код:1define('DISABLE_WP_CRON', 'true');
Затем запустите crontab -e и добавьте:1*/1 * * * * wget -q -O – http://YOURWEBSITE.COM/wp-cron.php?doing_wp_cron - Измените часовой пояс:1sudo dpkg-reconfigure tzdata
- Выборочно настройте длину таймаутов и режим отладки — актуально, если будете делать объемный импорт или аналогичные вещи
Отредактируйте wp-config.php:123define ('WP_DEBUG', true);define('WP_DEBUG_DISPLAY', false);define('WP_DEBUG_LOG', true);
Отредактируйте /etc/nginx/sites-available/domain.com:
Добавьте fastcgi_read_timeout 120
Отредактируйте /etc/php/7.0/fpm/php.ini:
Измените max_execution_time на 120
Измените upload_max_filesize на что-то больше, чем 2M - Увеличьте количество создаваемых дочерних процессов:
Отредактируйте /etc/php/7.0/fpm/pool.d/www.conf и измените:1pm.max_children 251pm.start_servers 51pm.max_spare_servers 5
(вы можете «поиграть» с настройками в зависимости от объема оперативки на сервере) - Увеличьте число подключений nginx – отредактируйте /etc/nginx/nginx.conf – что-то подобное вначале:123456events {worker_connections 20000;multi_accept on;use epoll;}worker_rlimit_nofile 42000;
- Настройте MySQL:1vi /etc/mysql/my.cnf
Зависит от объема доступной памяти, используемого движка и того, что вы реализуете на WordPress12345678910[mysqld section]key_buffer = 512Mmax_allowed_packet = 512Mthread_stack = 192Kthread_cache_size = 8query_cache_limit = 512Mquery_cache_size = 4192M (или 0 может улучшить производительность)innodb_buffer_pool_size = 20000M (в зависимости от памяти - тут должно быть указано 60% от объема)innodb_buffer_pool_instances = 16 (в зависимости от количества ядер, которое у вас есть)innodb_io_capacity = 5000 (так как Reg.ru использует быстрые SSD'ки мы не будем ограничивать InnoDB)
Перезапустите ключевые сервисы(nginx, varnish, hhvm, php7.0-fpm) или перезагрузите сервер shutdown -r now. Ваш новый сервер и WordPress готовы, быстры и защищены.
Перенос существующего сайта
- Войдите на ваш сервер
- cd в папку wp-content
- Сделайте бэкап БД используя: mysqldump -u root -p dbname > sqldump.sql
- Если у вас нет доступа по SSH, создайте временный файл и добавьте следующий код: <?php shell_exec(‘mysqldump -u root -p dbname > sqldump.sql’); ?> затем создайте страницу с этим шаблоном и затем перейдите на нее — у вас должен получиться файл бэкапа БД — это полезно, в случае использования хостингов, которые не предоставляют доступ по SSH и не делают резервное копирование
- Войдите на ваш новый сервер
- cd в папку wp-content
- Подключитесь по FTP к старому серверу: sftp root@ipaddress
- Заберите все: get -r *
- Выходите из FTP
- Восстановите БД, используя:
- mysql -u root -p
- create database dbname;
- use dbname;
- source sqldump.sql; — замените sqldump.sql на полный путь к файлу sqldump.sql (например /var/www/html/websitename/wp-content/sqldump.sql)
- Выходите из mysql и удаляйте файл sqldump.sql
- Скопируйте wp-config.php, возможно понадобится его изменить — смотрите на различая по FTP.
- Обновите /etc/nginx/sites-available/domain.com чтобы указать папку, которую вы скачали со старого сервера
- Как только вы закончили — переключите DNS на новый сервер
Установка W3 Total Cache
- Авторизуйтесь на сайте
- Установите W3 Total Cache
- Настройте кэширование страниц, минимизацию, кэширование БД используя OpCode:APC Caching. Тут полное руководство по настройке W3 Caching НО используйте Disk:Enhanced только для кэширования страниц — используйте OpCode:APC Caching для всего остального. Если вы используете Datafeedr (или для максимальной совместимости с другими плагинами), не используйте кэширование объектов.
- Выборочно настройте Cloudflare или аналогичный CDN – если будете настраивать, установите плагин Cloudflare, он устранит некоторые проблемы
- Добавьте в файл wp-config.php:1define('WP_CACHE', true);
Настройка email
Отредактируйте/etc/hosts найдите строку с 127.0.0.1 и добавьте полное название домена(hostname.yourdomain.com):
1 | 127.0.0.1 hostname.yourdomain.com hostname |
Далее запускаем следующее:
1 2 | apt-get install exim4-daemon-light mailutils dpkg-reconfigure exim4-config |
Далее выбираем:
- Интернет сайт
- Введите полное название домена
- Добавьте имя хоста и localhost в список серверов, которые могут вести рассылку(а так же полное доменное имя) разделяя точкой с запятой
- Оставьте Domains to relay for и Machines to relay пустыми
- Ответьте No на Keep number of DNS-queries minimal (Dial-on-Demand)?
- Остальные настройки оставьте по умолчанию
Теперь ваш сервер может отсылать письма, которые не конфликтуют с WordPress.
Вот и все — теперь у вас супер быстрый сайт на WordPress — самый быстрый, какой только может быть с вашей конфигурацией сервера. Можно считать, что ускорение WordPress прошло более, чем успешно!
Если не хотите выполнять пошаговую инструкцию описанную выше, у вас нет времени, или не хочется разбираться как работает ускорение WordPress — вы можете обратиться ко мне и я помогу вам с этим за отдельную плату.
Добавление нового сайта
Самый лучший способ — скопировать файл в /etc/nginx/sites-available и настроить новый файл как новый сайт.