Последняя часть цикла — чек-лист сервера под WordPress. Каждый пункт — авария или потерянный вечер, которые мы уже пережили. Проходить его стоит при запуске нового сайта и раз в год на старых.
Это 14-я, заключительная часть цикла «Сервер для WordPress».
Пул PHP-FPM
request_terminate_timeoutне ноль — без него один зависший запрос кладёт сайт до перезапуска (вторая часть);- медленные запросы пишут стек в журнал (
request_slowlog_timeout); - есть страница статуса пула, и она закрыта снаружи (четвёртая часть);
- настройки проверены тем же путём, каким запускается мастер-процесс (
php-fpm -tt -y …); - режим пула подходит трафику:
ondemandдля сайта из кэша,dynamicс тёплым запасом для живого трафика;min_spareне задран (третья часть).
Образ, база, кэш
- Dockerfile образа PHP лежит в git (пятая часть);
- буферы базы подобраны под сайт и память сервера, а не по умолчанию (первая часть);
- политика памяти Redis соответствует тому, что в нём лежит: вытеснение для объектного кэша, запрет вытеснения и журнал — для кэша фрагментов (шестая часть);
- Redis — во внутренней сети без выхода наружу и без опубликованного порта.
Сеть
- у базы нет сетевого псевдонима в общей сети; PHP ходит в неё через сокет (седьмая часть);
- запросы сайта к самому себе идут в nginx по имени контейнера с нужными Host и X-Forwarded-Proto;
- наружу открыт только прокси на входе.
Крон
- встроенный запуск выключен (
DISABLE_WP_CRON), системный крон раз в минуту (статья про крон); - крон запускается от пользователя веб-сервера, а не от root, — проверено по владельцу новых файлов;
- после правки задания перезапущен планировщик и проверен его журнал;
- на виртуальном хостинге поля планировщика — это моменты, а не интервалы (12-я часть).
Почта
- письма уходят через SMTP ящика на домене, а не своим почтовым сервером (восьмая часть);
- отправитель — свой ящик, все параметры почты в
.envсайта; - у заявок видно, дошло ли письмо.
Сертификаты
- раз в неделю — проверка по сети: корень,
www, поддомены каждого сайта (девятая часть); - покупные сертификаты: новый на руках за две недели до срока;
- цепочка полная:
Verify return code: 0, а не только «в браузере открывается».
Индексация
- тестовые копии закрыты от поиска на уровне прокси;
- живой сайт открыт — проверено заголовком ответа, а не настройкой (десятая часть).
Диск и сборка
- WordPress не режет размеры картинок, которые сайт не показывает (11-я часть);
- версия Node — свойство команды сборки, а не сервера (13-я часть);
- перед коммитом линтер прогнан по всему коду, как в CI;
- после прерванного линтера или сборки не осталось живых контейнеров.
Одна мысль на весь цикл
Почти все аварии, которые мы разбирали, случились не от нагрузки, а от настроек по умолчанию. Пул без предохранителя, сертификат без напоминания, крон от root, имя в сети, о котором никто не думал. Чек-лист — это просто список умолчаний, которые стоит поменять до того, как они выстрелят.
Хотите пройти этот чек-лист на своём сервере?
Пришлите адрес и доступы — проверю по каждому пункту и скажу, что поменять в первую очередь.
// загружаю комментарии…