8Dle
Авторизация

Разгон и Оптимизация VDS под сайт на Wordpress

Данный мануал является результатом экспериментов по оптимизации WordPress и разгону VPS серверов. Путем проб и ошибок, был найден оптимальный софт и плагины для MFA сайтов, удовлетворяющих следующим критериям:

Устойчивый и относительно дешёвый сервер (в пределах ~500 руб)
  • Способность выдерживать от 50 человек онлайн и выше
  • Ось Debian 7 wheezy x64 min


ЧТО БЫЛО ОПРОБОВАНО НА VPS:


  • Nginx – как основной веб сервер.
  • Varnish – как кеш, перед nginx.
  • PHP 5.4 / 5.5 – fast-cgi, проверялось всё: fast-cgi-cache, opCache (APC, xAPC) и т.д.
  • Memcached
  • Mysql – не стал тестировать MariaDB, почему, опишу чуть дальше.


ЧТО БЫЛО ОПРОБОВАНО ИЗ ПЛАГИНОВ НА WORDPRESS:


  • Множество кеш плагинов: W3, вариации File cache, SJ cache, WP-FFPC, WP Super Cache
  • Оптимизация: Autoptimize и ему подобные.


ТЕСТИРОВАНИЕ НАГРУЗКИ:


  • blitz.io
  • loadstorm.com
  • loadimpact.com
  • ab / siege


Какие связки тестировались (по умолчанию в php уже был включен опкеш, не заметил существенной разницы между APC, APCu. Остановился на новом opCache из коробки для версии php 5.5):
  • varnish + nginx (fast-cgi-cache, gzip) + wp-ffpc (memcached) + Autoptimize
  • varnish + nginx (pagespeed кеширование в tmpfs, gzip) + wp-ffpc (memcached) + Autoptimize
  • nginx + fast-cgi-cache (gzip) + wp-ffpc (memcached) + Autoptimize
  • nginx + fast-cgi(gzip) + wp-ffpc (memcached) + Autoptimize

В целом вариантов было больше, это основные направления. Менялись плагины и места для кеша (memcached, tmpfs, fs)

Идеальный вариант получился такой:
  • nginx + pagespeed_mod (кеширование в memcached) + gzip – это то, что касается вебсервера.
  • WordPress + wp-ffpc + wp-super-cache + autoptimize
  • Mysql – как основная БД. Не было смысла ставить, что-то иное, так, как запросов в БД у нас минимум, только при формировании кеша.


В качестве сервера был выбран VPS:


  • 1 ядро Intel Xeon E5 не менее 2.5 ГГц
  • 4 GB оперативной памяти
  • 15 GB (RAID-1)

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

УСТАНОВКА NGINX И PAGESPEED MODULE



1) Добавить репозитарий:
deb http://packages.dotdeb.org wheezy all
gpg --keyserver keys.gnupg.net --recv-key 89DF5277
gpg -a --export 89DF5277 | sudo apt-key add -


2) Если нет русского языка
dpkg-reconfigure locales


3) Добавим репозитарий: Ngninx http://nginx.org/ru/linux_packages.html
wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key


Добавим пакеты в /etc/apt/sources.list
deb http://nginx.org/packages/debian/ wheezy nginx
deb-src http://nginx.org/packages/debian/ wheezy nginx


4) Ставим Nginx + pagespeed_mod http://serverfault.com/questions/605056/adding-pagespeed-module-to-installed-nginx/637116#637116
sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
mkdir -p /usr/src/nginx-pagespeed/
cd /usr/src/nginx-pagespeed/
sudo apt-get source nginx-full
cd nginx-1.6.2/


Скачиваем версию ngx_pagespeed
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.9.32.2-beta.zip
unzip release-1.9.32.2-beta.zip
cd ngx_pagespeed-release-1.9.32.2-beta/
wget https://dl.google.com/dl/page-speed/psol/1.9.32.2.tar.gz
tar -xzvf 1.9.32.2.tar.gz
cd /usr/src/nginx-pagespeed/nginx-1.6.2


Собираем nginx, по дефолту пути отличаются, поэтому задаём их руками:
./configure --add-module=/usr/src/nginx-pagespeed/nginx-1.6.2/ngx_pagespeed-release-1.9.32.2-beta/ \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-file-aio \
--with-ipv6


Если нет ошибок. собираем!!
make
checkinstall


(Обратите внимание!!! не make install, а checkinstall) Подробно тут: https://debian.pro/628
sudo checkinstall --pkgname nginx --pkgversion 1.6-custom --install


Далее видим сообщение:
Done. The new package has been installed and saved to
/usr/src/nginx-pagespeed/nginx-1.6.2/nginx_1.6-custom-1_amd64.deb
You can remove it from your system anytime using:
     dpkg -r nginx


Создаем каталоги:
mkdir -p /var/log/nginx/ /var/cache/nginx/client_temp


Идем на http://kbeezie.com/debian-ubuntu-nginx-init-script/ и создаем /etc/init.d/nginx, меняя только путь до Демона.
DAEMON=/usr/sbin/nginx


Добавляем nginx в автозагрузку
/usr/sbin/update-rc.d -f nginx defaults


УСТАНОВКА PHP-FPM И ZEND OPCACHE


sudo apt-get install php5-fpm php5-cli php5-common php5-cgi php5-mysql php5-gd php5-apc memcached php5-memcached


Установка Zend OPCache (если php ниже версии 5.5)
apt-get install -y php-pear
apt-get install -y build-essential php5-dev
pecl install zendopcache-7.0.3


Полезный источник по данной теме: http://hardrockprogramming.com/

Далее настраиваем:
mkdir /home/www
chmod -R a-rwx,u+rwX,g+rX /home/www && chown www-data:www-data -R /home/www


Дирректория для кеша
mkdir /run/shm/fcgi-cache/
chown www-data:www-data -R /run/shm/fcgi-cache/


Правим файл: /etc/php5/fpm/php-fpm.conf, он должен выглядеть примерно вот так:
[global]
pid = /var/run/php5-fpm.pid
include=/etc/php5/fpm/pool.d/*.conf
error_log = /var/log/php5-fpm/error.log
log_level = warning
daemonize = yes


Правим файл: /etc/php5/fpm/pool.d/www.conf
[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.$pool.sock
listen.owner = www-data
listen.group = www-data
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 100
slowlog = /var/log/php5-fpm/slow.$pool.log
request_slowlog_timeout = 9
chdir = /
catch_workers_output = yes
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php5-fpm/error.$pool.log
php_admin_flag[log_errors] = on


Создаем каталоги:
mkdir /var/log/php5-fpm && chown www-data:www-data /var/log/php5-fpm


Далее настраиваем модули /etc/php5/mods-available:
—>>> opcache.ini
# путь до opcache модуля
zend_extension=/usr/lib/php5/20100525/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
# если у вас не очень часто изменяемый сайт, можете увеличить это значение
opcache.revalidate_freq=60
opcache.fast_shutdown=1
# включаем интерфейс opcache для cli
opcache.enable_cli=1


Создаем линк:
sudo ln -s /etc/php5/mods-available/opcache.ini /etc/php5/conf.d/5-opcache.ini


Настройка memcached
sudo apt-get install memcached
sudo apt-get install php5-memcache
sudo apt-get install php5-memcached


Открываем конфигурацию Memcached по адресу /etc/memcached.conf и устанавливаем следующие значения, обратите внимание на -m можно указать больше оперативной памяти, если это необходимо:
-d
logfile /var/log/memcached.log
-m 256
-p 11211
-u nobody
-l 127.0.0.1


Мониторить состоянии memcached можно с помощью данного софта:
http://phpmemcacheadmin.googlecode.com/files/phpMemcachedAdmin-1.2.2-r262.zip

УСТАНОВКА MYSQL


sudo apt-get install bsdutils #если система чистая
sudo apt-get install mysql-server


Управление MySQL, скачиваем по желанию
wget http://dl.cihar.com/phpMyAdmin/master/phpMyAdmin-master-latest.tar.gz


Тюнинг MySQL доп. мануал: http://ekimoff.ru/410/


НАСТРОЙКА NGINX И PAGESPEED MODULE


Я не буду приводить тут конфиг nginx.conf и конфиг непосредственно под сайт. Их очень много в сети, единственное, что было добавлено мной в основной раздел nginx.conf, это такие строки:
# Настройка виртуальных доменов
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;


И непосредственно файл: /etc/nginx/conf.d/pagespeed_mod.conf с содержимым
pagespeed On;
pagespeed FileCachePath "/run/shm/ngx_cache";
pagespeed FileCacheSizeKb 25600;
pagespeed FileCacheCleanIntervalMs 3600000;
pagespeed FileCacheInodeLimit 500000;
pagespeed RewriteLevel PassThrough;
pagespeed EnableFilters canonicalize_javascript_libraries,extend_cache,extend_cache_pdfs,combine_css,combine_javascript,move_css_above_scripts,insert_dns_prefetch,rewrite_javascript,rewrite_images,prioritize_critical_css,rewrite_css,rewrite_style_attributes,convert_meta_tags,lazyload_images,collapse_whitespace,move_css_to_head,remove_comments,remove_quotes,defer_javascript,inline_css,inline_javascript;
pagespeed UseNativeFetcher on;
resolver 8.8.8.8;
pagespeed LRUCacheKbPerProcess     2048;
pagespeed LRUCacheByteLimit        8192;
pagespeed CreateSharedMemoryMetadataCache "/run/shm/ngx_shared" 6400;
pagespeed CssInlineMaxBytes 1024;
pagespeed JsInlineMaxBytes 1024;
# Memcached
pagespeed MemcachedServers "127.0.0.1:11211";


Тут стоит обратить внимание на EnableFilters, выставите, какие именно фильтры Вам нужны. Так же pagespeed_mod может использовать кеш в tmpfs, но это только в том случае, если не будет места в memcached, поэтому необходимо дать memcached памяти с запасом. По наблюдениям средний сайт с 500-1к страницами будет отъедать в memcached от 30 до 100mb, но тут всё индивидуально.

В заключении привожу тест данный сборки по одному посещаемому MFA:
Разгон и Оптимизация VDS под сайт на Wordpress

Состояние memcached во время теста:
Разгон и Оптимизация VDS под сайт на Wordpress

Пиковые нагрузки на сайт сейчас значительно меньше, всего 20-25 юзеров онлайн. Но, как показывает тест, сайт легко держит все 50 и думаю 100 не будет проблемой. Так же помимо тестируемого сайта, на сервере крутиться ещё пару сайтов с меньшей посещаемость.

СПИСОК ПЛАГИНОВ WORDPRESS УСТАНОВЛЕННЫХ НА САЙТЕ:


Autoptimize — хороший плагин, для мини оптимизации WordPress.
Cackle comments — платный плагин, решает вопрос со спамом и доп. ссылками из соц сетей.
Dagon Design Sitemap Generator
GoCodes
Google XML Sitemaps
MaxSite Russian Date
New Adman
No Image Link
Post Chapter — *собственный плагин, нет в паблике
Top Level Categories
Wordpress Popular Posts
WP-ASC
WP-FFPC — (отличный плагин для сохранения промежуточных данных, разгружает mysql, используется в связке memcached)
WPLANG Lite — (оптимизирует языковой файл, позволяет снизить нагрузку)
WP Super Cache — кеш на статику (в данном плагине уже нет необходимости)
Yandex Content (Original texts) — *собственный плагин, есть в паблике
Yet Another Related Posts Plugin
Правильный Robots для WordPress (Single) — *собственный плагин, нет в паблике

Жмите на Кнопу ниже, или подписывайтесь!


Читайте также
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


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

Авторизация