10 миллионов хитов в день на WordPress блоге
Не так давно на Хабре впалил интересную ссылку на пост одного чела, который умудряется иметь блог на WordPress с 10 миллионами хитов в день, и при этом сидеть на сервере за $15 долларов. Рассматривается вариант, когда на сервер устанавливается Ubuntu 11.10, MySQL, PHP с PHP FPM, APC и модулем MySQL, Nginx с конфигурацией для WordPress, сам WordPress и плагины - W3 Total Cache и Varnish.
Немного статистики:
Ахуеть, ага. На Хабре была просто ссылочка на англоязычную версию, я же взялся за её перевод. Английский мой хромает на обе ноги, но вроде что то и получилось. По крайней мере я понял всё. :)
10 миллионов хитов в день на WordPress блоге за $15
Данная инструкция довольно подробна, и я надеюсь, что из неё понятно как поставить сервер Linux с ноля, а так же запилить на него Varnish, Nginx, W3 Total Cache, и WordPress. В данном примере устанавливать всё это безобразие мы будем на сервер Amazon Micro, а обойдётся нам это всё в менее, чем $15 в месяц.
Итак. В начале установите Ubuntu 11.10 на новый виртуальный сервер. Ставьте именно 11.10, в статье разбирается именно эта версия, да и версии новее - нестабильное говно, старее - старое говно.
Я использовал Amazon EC2 для своего тестового сервера, но и Linode так же хорош.
Заранее упомяну данные своего сервера, у вас они будут отличаться:
- Public DNS Name: ec2-23-20-235-223.compute-1.amazonaws.com
- Public IP Address: 23.20.235.223
Заходим на сервер и входим под root-пользователем:
ssh ubuntu@ec2-23-20-235-223.compute-1.amazonaws.com
sudo -i
Теперь настроим брандмауэр
Итак, раз мы будем настраивать сеть, то не плохо было бы поиграться с брандмауэром. В Ubuntu это очень просто, для этого нам потребуется пакет ufw. Вот команды, которые нам пригодятся:
ufw allow ssh
ufw allow http
ufw logging off
ufw enable
После этих манипуляций, ваш уютенький серверок становится относительно безопасным.
Установка и настройка MySQL
Для этого потребуются следующие команды:
apt-get update
apt-get install mysql-server
После установки задайте пароль для root-пользователя в MySQL:
mysql -u root -p
После этого вновь введите свой свежеустановленный пароль для root-пользователя. Затем отправьте следующий запрос к MySQL (не забудьте заменить слово "ХУЙ" на свой пароль)
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO "wp_user"@"localhost" IDENTIFIED BY "ХУЙ";
FLUSH PRIVILEGES;
EXIT
Вот и всё, мускуль настроен. PHP и nginx, настало твоё время!
Установка и настройка PHP
Итак, нам нужно установить не просто ПЭ-ХЭ-ПЭ, а, блять, систему PHP FPM, APC, и ахуенный MySQL модуль:
apt-get install php5-fpm php-pear php5-common php5-mysql php-apc
Теперь отредактируйте файл /etc/php5/fpm/php.ini, добавив туда следующие строки:
[apc]
apc.write_lock = 1
apc.slam_defense = 0
А в файле /etc/php5/fpm/pool.d/www.conf сделайте следующее:
Замените
listen = 127.0.0.1:9000
на
listen = /dev/shm/php-fpm-www.sock
А ниже вставьте такие строки:
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
После, в этом же файле, замените эти строчки
user = www-data
group = www-data
на эти
user = nginx
group = nginx
Вот и всё, если вы не забыли сохранить изменения в файлах выше, то система PHP FPM настроена. Осталась очередь Nginx.
Установка и настройка Nginx
Все инструкции написаны на основе официальной: nginx.org.
Итак, для начала скачаем суперсекретный ключ для подтверждения пакетов (виндузятники, не заморачивайтесь, это всё какие то глупые антивирусные проверки линуксоидов, вот дебилы):
cd /tmp/
wget http://nginx.org/keys/nginx_signing.key
apt-key add /tmp/nginx_signing.key
Добавим нужные репозитории. Не проебите меня ">>", это важно!
echo "deb http://nginx.org/packages/ubuntu/ lucid nginx" >> /etc/apt/sources.list
echo "deb-src http://nginx.org/packages/ubuntu/ lucid nginx" >> /etc/apt/sources.list
Скачаем и установим nginx следующими командами:
apt-get update
apt-get install nginx
Теперь настроим nginx
Для начала нужно отредактировать файл /etc/nginx/nginx.conf. В http секции добавьте такую строчку:
port_in_redirect off;
После перейдите в категорию /etc/nginx/conf.d, создайте файл drop и пропишите в нём всё то, что прописано в файле drop отсюда.
Далее по ссылке, что я дал выше, скачайте файл default.conf и поместите по адресу /etc/nginx/conf.d/default.conf (с заменой оригинального файла), затем в этом файле везде замените домен domainname.com на свой.
Теперь создадим категорию /var/www/ и присвоим ей нужные права:
mkdir -p /var/www/
chown nginx:nginx /var/www/
chmod 775 /var/www
Всё, nginx настроен. Теперь нужно перезагрузить сервисы:
service nginx restart
service php5-fpm restart
Всё готово к установке WordPress!
Для установки движка просто выполните данные команды:
cd /tmp
wget http://wordpress.org/latest.tar.gz
tar zxvf latest.tar.gz
cd wordpress
mv * /var/www/
chown -R nginx:nginx /var/www
Для настройки WordPress введите следующие команды:
cp /var/www/wp-config-sample.php /var/www/wp-config.php
chown nginx:nginx /var/www/wp-config.php
У себя в браузере откройте api.wordpress.org/secret-key/1.1/salt и скопируйте результат. Затем отредактируйте файл /var/www/wp-config.php и вставьте то, что только что скопировали.
Затем измените следующие строчки (вводите данные не root-пользователя):
define("DB_NAME", "название_базы");
define("DB_USER", "юзер");
define("DB_PASSWORD", "пароль");
После всех этих действий, если вы не налажали с настройками и прописали верный IP у домена, то должен открыться ваш сайт. Перейдите на страницу ваш-говносайт.ком/install.php для настройки WordPress.
Займёмся кешированием
Итак, для начала установите плагин "W3 Total Cache", и в настройках включите следующие секции:
- Database Cache
- Object Cache
Казалось бы вот и всё, а нихуя! Установим varnish 3!
Для этого введите следующую команду:
apt-get install varnish
Замените файл /etc/varnish/default.vcl, взяв такой же файл отсюда.
Затем отредактируйте /etc/default/varnish.
Измените данную секцию:
DAEMON_OPTS="-a :6081 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
На эту:
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,64m"
Далее нужно настроить nginx под порт 8080, вместо 80-го порта, ибо на 80-ом порту будет запущен Varnish.
Откройте файл /etc/nginx/conf.d/default.conf и замените
listen 80;
на
listen 8080;
Сохраните файл и запустите следующие команды:
service nginx restart
service varnish restart
Вот и всё! Выше описан способ как настроить сервер, ценой менее 20-ти баксов на нагрузку в 10 миллионов хитов в день. Спасибо varnish и nginx за это!
Из инструкции я упустил некоторые очевидные шаги, ибо вы сами умнички и легко справитесь с установкой WordPress и плагина для него, а так же не стал писать про сервис blitz.io, ибо лишнее. Пофапать на нагрузку можно и в админке Amazon.
Внимание! В скором времени я переведу один блог по данной инструкции на сервер Amazon, и естественно опишу в блоге процесс, то есть будет живой пример данной статьи. Подписывайтесь на RSS и читайте в Twitter, что бы не пропустить такое событие.
Теперь меня волнует другой вопрос. Нахуя я покупал MaxCache? Сейчас вот думаю, может Убунтовод перенести на Amazon, а то хостер опять выёбывается.