Устанавливаем и настраиваем высокопроизводительный веб сервер для движка livestreet.
Погнали!
Проверяем дату и время:
# date
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Подключаем репозиторий:
# nano /etc/apt/sources.list
# DotDeb
deb http://packages.dotdeb.org stable all
Импортируем ключ dotdeb'а:
# wget http://www.dotdeb.org/dotdeb.gpg -O - -q | apt-key add -
Обновляем список зеркал и пакеты:
# apt-get update && apt-get upgrade
Создаем пользователя:
C отключенным шелом и одноименной группой.
# useradd web -b /home/ -m -U -s /bin/false
- задаем пароль пользователю web
# passwd web
В случае чего, можем включить доступ к шеллу.
# usermod -s /bin/bash web
Создаем необходимые каталоги:
mkdir -p -m 710 /home/web/www/{iqadm.ru,logs.iqadm.ru}
Предоставляем пользователю web права на них:
# chown -R web:web /home/web
Предоставим Nginx доступ в домашнюю директорию пользователя web: (… добавив пользователя www-data в группу web)
# usermod -a -G web www-data - Добавить пользователя к группе web.
# gpasswd -d www-data web - Удалить пользователя из группы web.
# id www-data - Проверить в какие группы входит пользователь www-data.
Устанавливаем необходимые пакеты:
Для livestreet 1.0.3:
# apt-get install php5-fpm php-pear php5-common php5-mcrypt php5-mysqlnd php5-cli php5-gd php5-dev php-mail sendmail nginx mariadb-server unzip
Для livestreet 2.0:
# apt-get install php7.0-fpm php-pear php7.0-common php7.0-mcrypt php7.0-mysqlnd php7.0-cli php7.0-gd php7.0-dev php-mail sendmail php7.0-mbstring php7.0-curl nginx mariadb-server unzip
В процессе установки будет предложено задать пароль:
MySQL-Root = pass
PHP-FPM:
Задаем настройки воркеров:
[php5-fpm] - [php7.0-fpm]
# nano /etc/php5/fpm/pool.d/www.conf
- # nano /etc/php/7.0/fpm/pool.d/www.conf
; Динамическое изменение количества воркеров.
pm = dynamic
; Максимальное число воркеров, создаются под нагрузкой, не может быть меньше pm.max_spare_servers.
pm.max_children = 5
; Сколько воркеров запускать при старте FPM.
pm.start_servers = 1
; Минимальное количество запасных воркеров (остаются в памяти при отсутствии нагрузки).
pm.min_spare_servers = 1
; Максимальное количество запасных воркеров (при простое, остальные неиспользуемые будут завершаться).
pm.max_spare_servers = 3
; Максимальное количество запросов, которые выполняет один воркер, прежде чем перезапуститься.
pm.max_requests = 500
Проверяем, чтобы php-fpm работал через сокет: (+ в пуле вписываем нашего пользователя и группу)
[php5-fpm] - [php7.0-fpm]
# nano /etc/php5/fpm/pool.d/www.conf
- # nano /etc/php/7.0/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock
- listen = /run/php/php7.0-fpm.sock
- задаем имя пула;
[web]
- задаем пользователя и группу,
user = web
group = web
- запрещаем какой-попало программе писать в сокет,
listen.owner = web
listen.group = web
listen.mode = 0660
# /etc/init.d/php5-fpm restart
- # /etc/init.d/php7.0-fpm restart
Nginx:
Очищаем старые конфиги:
# rm /etc/nginx/sites-enabled/default
# cp /etc/nginx/sites-available/default /etc/nginx/sites-available/iqadm.ru
# cp /dev/null /etc/nginx/sites-available/iqadm.ru
Настраиваем конфиг нашего сайта:
# nano /etc/nginx/sites-available/iqadm.ru
GitHub Listing
Для php7.0-fpm: меняем fastcgi_pass unix:/var/run/php5-fpm.sock; на
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
Включаем его созданием симлинка в папку sites-enabled:
# ln -s /etc/nginx/sites-available/iqadm.ru /etc/nginx/sites-enabled/iqadm.ru
Настройка Nginx:
# nano /etc/nginx/nginx.conf
* GitHub Listing
Перезагружаем nginx:
# /etc/init.d/nginx reload
Немного тестируем:
# nano /home/web/www/iqadm.ru/index.php
<?php
phpinfo();
?>
MariaDB:
Создаем новую базу, пользователя и присваиваем ей привилегии:
# mysql -uroot -p
CREATE USER ls@localhost IDENTIFIED BY 'pass_user';
CREATE DATABASE ls;
GRANT ALL PRIVILEGES ON ls.* TO ls@localhost IDENTIFIED BY 'pass_user';
FLUSH PRIVILEGES;
quit;
LiveStreet:
Устанавливаем Livestreet:
# wget -P /tmp https://github.com/livestreet/livestreet/archive/1.0.3.zip
# unzip /tmp/livestreet-1.0.3.zip -d /home/web/www/iqadm.ru/
# chown -R web:web /home/web/www/iqadm.ru
# rm -r /home/web/www/iqadm.ru/install/
Выставляем рекурсивно права на файлы и каталоги:
# cd /home/web/www/iqadm.ru
# for directories:
find . -type d -exec chmod 0710 {} \;
# for files:
find . -type f -exec chmod 0644 {} \;
Включаем компрессию css-файлов и js-файлов
# nano /home/web/www/iqadm.ru/config/config.local.php
/**
* Параметры компрессии css-файлов
*/
$config['smarty']['compile_check'] = false; // Проверять или нет файлы шаблона на изменения перед компиляцией, false может значительно увеличить быстродействие, но потребует ручного удаления кеша при изменения шаблона
$config['compress']['css']['merge'] = true; // указывает на необходимость слияния файлов по указанным блокам.
$config['compress']['css']['use'] = true; // указывает на необходимость компрессии файлов. Компрессия используется только в активированном режиме слияния файлов.
/**
* Параметры компрессии js-файлов
*/
$config['compress']['js']['merge'] = true; // указывает на необходимость слияния файлов по указанным блокам.
$config['compress']['js']['use'] = true; // указывает на необходимость компрессии файлов. Компрессия используется только в активированном режиме слияния файлов.
Отключаем отображение ошибок PHP: тем самым предотвращаем раскрытие путей на сервере
# nano /home/web/www/iqadm.ru/index.php
ini_set('display_errors', 0);
Чтобы при обновлении движка эта правка не слетела: лучше эту запись сделать в конце файла
/config/config.local.php до строки:
return $config;
Memcached:
[php5-fpm] - [php7.0-fpm]
# apt-get install memcached php5-memcache
- # apt-get install memcached php7.0-memcache
# nano /home/web/www/iqadm.ru/config/config.local.php
$config['sys']['cache']['type'] = 'memory';
# /etc/init.d/php5-fpm restart
- # /etc/init.d/php7.0-fpm restart
OPcache:
Включаем его и редактируем настройки:
[php5-fpm] - [php7.0-fpm]
# nano /etc/php5/fpm/php.ini
- # nano /etc/php/7.0/fpm/php.ini
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
# /etc/init.d/php5-fpm restart
- # /etc/init.d/php7.0-fpm restart
BBClone - статистика для сайта:
# wget -P /tmp http://bbclone.de/dist/bbclone-0.6.4.zip
# unzip /tmp/bbclone-0.6.4.zip -d /home/web/www/iqadm.ru/
# nano /home/web/www/iqadm.ru/index.php
<?php
define("_BBC_PAGE_NAME", "iQAdm");
define("_BBCLONE_DIR", "bbclone/");
define("COUNTER", _BBCLONE_DIR."mark_page.php");
if (is_readable(COUNTER)) include_once(COUNTER);
?>
# chown -R web:web /home/web/www/iqadm.ru/bbclone - назначаем пользователя и группу.
# nano /home/web/www/iqadm.ru/bbclone/conf/config.php - отключаем показ конфига.
$BBC_SHOW_CONFIG = "";
PHP-FPM:
Там где нужно, исправляем значения:
Показать листинг:
[php5-fpm] - [php7.0-fpm]
# nano /etc/php5/fpm/php.ini
- # nano /etc/php/7.0/fpm/php.ini
# Максимальное время исполнения скрипта.
max_execution_time = 30
# Максимальное время, которое может потратить скрипт на обработку данных запроса.
max_input_time = 60
# Максимальное количество памяти, выделяемое каждому скрипту.
memory_limit = 16M
# Максимальный размер данных, отсылаемых скрипту с помощью метода POST.
post_max_size = 8M
# Максимальный размер загружаемых файлов.
upload_max_filesize = 2M
# Не показывать ошибки PHP-скриптов пользователям.
display_errors = Off
# Защищаемся от утечки информации о PHP.
expose_php = Off
# Запрещаем открытие удаленных файлов.
allow_url_fopen = Off
# Обеспечиваем поддержку правильных PATH_INFO/PATH_TRANSLATED в CGI.
cgi.fix_pathinfo = 0
# /etc/init.d/php-fpm restart
- # /etc/init.d/php7.0-fpm restart
Значения системных переменных:
Настроим в "sysctl.conf" параметры ядра сетевого стека. Данными настройками можно снизить последствия "DDoS-атак" и их эффективность.
Там где нужно, исправляем значения:
Показать листинг:
# nano /etc/sysctl.conf
# Защита от smurf-атак;
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Защита от неправильных ICMP-сообщений;
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Защита от SYN-флуда;
net.ipv4.tcp_syncookies = 1
# Защита от ICMP-флуда;
net.ipv4.icmp_echo_ignore_all = 1
# Увеличение очереди полуоткрытых TCP-соединений;
net.ipv4.tcp_max_syn_backlog = 1024
# Уменьшение времени удержания полуоткрытых соединений;
net.ipv4.tcp_synack_retries = 1
# Проверять TCP-соединение каждую минуту. Если на другой стороне - легальная машина, она сразу ответит. Дефолтовое значение - 2 часа;
net.ipv4.tcp_keepalive_time = 60
# Повторить пробу через пятнадцать секунд;
net.ipv4.tcp_keepalive_intvl = 15
# Количество проверок перед закрытием соединения;
net.ipv4.tcp_keepalive_probes = 5
# Запрещаем маршрутизацию от источника;
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Защита от спуфинга;
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Мы не маршрутизатор;
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Запрещаем маршрутизацию от источника
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Расширяем диапазон доступных портов;
net.ipv4.ip_local_port_range = 2000 65000
# Увеличиваем максимальный размер TCP-буферов;
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
# IPv6 disabled;
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.ens192.disable_ipv6 = 1
# Tweaks;
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_orphan_retries = 0
# Использование SWAP, 100-10=90% | Default 60%;
vm.swappiness=10
- Активируем изменения, без перезапуска системы:
# sysctl -p /etc/sysctl.conf
Оптимизируем изображения без потери качества:
# apt-get install optipng jpegoptim
# cd /home/web/www/iqadm.ru/uploads
# find -type f -iname "*.jpg" -exec jpegoptim --strip-all --all-progressive -pm85 {} \; -exec chmod 644 {} \;
# find -type f -iname "*.png" -exec optipng -strip all -o4 {} \; -exec chmod 644 {} \;
# chown -R web:web /home/web/www/iqadm.ru
Скрипт очистки логов:
clear-ls.sh
Полезные ссылки:
Настройка веб сервера: | Полный тюнинг движка | Очень шустрый блог на WordPress |
Настройка переменных ядра для сетевого стека: | FractalizeR’s |
* Проверяем сайт на скорость работы: | tools.pingdom | developers.google | loadimpact |