Glashkoff.com

Полезные советы и софт, создание и оптимизация сайтов на WordPress

Администрирование

Webinoly: управляем VPS с Ubuntu Server 18.04

Предисловие

Вы можете заказать у меня настройку сервера. Либо настроить и управлять сайтами самостоятельно, следуя советам ниже.

Немногим более года назад я рассказал про возможности панели управления VestaCP. На тот момент это был оптимальный бюджетный способ поднятия своего веб-сервера без заморочек с настройкой. Прошло время и я понял, что нужно двигаться дальше.

Почему я потерял доверие к VestaCP

Первый тревожный звоночек — выпуск новой версии панели 0.9.8-18 аккурат перед праздниками 29 декабря 2017 года. Никто в здравом уме не будет обновлять софт перед длинными выходными, особенно если предыдущая версия вышла целый год назад (25 ноября 2016-го). За это время можно было написать уйму костылей, не проверенных на совместимость с новой версией. Вот только панель по умолчанию обновляется автоматически! Естественно, что у некоторых владельцев серверов, в том числе моих читателей, всё поломалось. Исправления вышли 10 января, то есть новогодние праздники у некоторых админов и владельцев сайтов были испорчены.

Второй тревожный сигнал — поведение разработчиков во время массовых сообщений о взломе VPS с установленной Вестой. Хотя сама панель бесплатная, наличествуют платные модули, а значит, предполагается какой-то уровень ответственности. Но во время всеобщей паники разработчики отмалчивались, правили скрипты входа в панель наугад и давали инструкцию по удалению трояна вместо инструкции о предотвращении заражения.

Чуть позже выяснилось, что вроде бы проблема в почтовом веб-клиенте roundcube, который ставится вместе с VestaCP и к серверной панели прямого отношения не имеет. Но неприятный осадочек никуда не делся.

Третьего предупреждения свыше я ждать не стал и активно зарылся в GitHub в поисках достойной бесплатной замены с открытым исходным кодом.

Веб-серверами можно управлять тремя способами.

  • Через веб-интерфейс. Заходите на страничку, кликаете по кнопкам, ставите галки и так далее. Это просто, удобно, приятно. Для этого и нужны VestaCP, cPanel, Webmin, ISPmanager, DirectAdmin и десяток других программных продуктов.
  • Через консоль, редактируя конфиги. Хардкорный вариант — прямое редактирование конфигурационных файлов. Это сложновато, зато из-за максимального контроля всех аспектов веб-сервер идеально подгоняется под нужды владельца.
  • Через консоль с помощью скриптов. Компромиссный вариант между веб-интерфейсом и ручной правкой конфигов. Можно написать самостоятельно или воспользоваться готовыми скриптами для быстрой установки серверного софта, базовой настройки и дальнейшего управления сайтами. Это упростит редактирование конфигов.

Также можно пользоваться готовыми Docker образами, но в рамках дешёвых виртуальных серверов с ними сложно достичь хорошей производительности. Да и с безопасностью у контейнеризации, как ни странно, не всё гладко.

Скажу прямо — я не супер-мега-админ, готовый ковыряться в конфигах круглые сутки. Мне нужна надёжность и простота, чтобы я мог сосредоточиться на оптимизации и стабильности работы сервера. Веб-интерфейс, конечно, сильно облегчит добавление нового сайта, но можно обойтись одной консолью. Поэтому я стал искать скрипты для управления своей VPS-ки и нашёл три кандидата.

  • EasyEngine. Заточена под управление сайтами на WordPress. Ставит Nginx, PHP, MySQL-совместимую базу данных. Фатальный недостаток EasyEngine — разработчики подзабили на развитие проекта. Между последними версиями прошло более полутора лет (3.7.4 — 26 августа 2016 г., 3.7.5 — 30 марта 2018 г.), причём изменения незначительные.
  • lnmp. Набор скриптов китайского происхождения, поэтому официальный сайт и документация нечитабельны (онлайн-переводчик не помогает из-за изобилия технических терминов). Преимущество и одновременно проблема этого продукта — софт ставится не из репозиториев операционной системы, а собирается из исходников. Это великолепно в том плане, что скрипты заработают на всех популярных *nix операционных системах и на сервере с ARM процессором можно обеспечить максимальную производительность. Недостаток — долгое время установки. На компьютере с Core i7-2600K компиляция полного комплекта софта (там помимо Nginx+PHP+MySQL много чего ещё) заняла 30 минут. На дешёвой VPS время можно смело умножить в десять раз. 5 часов полной недоступности сайта и возможные заморочки каждый раз при обновлении до свежих версий — не то, что мне хочется.
  • Webinoly —  испанский наследник идеи EasyEngine, созданный из-за неторопливой разработки оного. Ставит минимальный набор софта, скрипты довольно простые, всё понятно организовано. Проект свежий, новые версии выходят ежемесячно.

Как вы уже догадались, я сделал свой выбор в пользу Webinoly. Пока что это самое простое и эффективное решение с грамотной поддержкой WordPress. Сайты на других CMS запускать тоже можно.

Почему Ubuntu Server 18.04?

Это релиз со статусом LTS (Long Term Support, «поддержка в течение длительного периода»), для которого будут выходить обновления аж до 2023 года. Поддержка старой 16.04 заканчивается тоже не завтра, а в 2021 году, но я всё же хочу чуть большей безопасности, чем может предоставить 16.04.

Кстати, в пользу Webinoly сыграл тот факт, что хотя на момент написания статьи версии с поддержкой Ubuntu Server 18.04 не было (сейчас поддерживает), всё нормально установилось и заработало. Такой уровень говорит о продуманности и/или простоте решения.

Про инсталляцию Ubuntu Server 18.04 писать не буду, так как обычно хостер предоставляет готовый образ системы. Вам нужно лишь подключиться по протоколу SSH и начать управление сервером через консоль.

KiTTy

Советую программу KiTTy в качестве SSH-клиента. Это форк популярной софтины PuTTy с полезными улучшениями.

Главное при использовании — разобраться с сохранением сессий, чтобы не вводить каждый раз IP сервера и настройки. Остальное наработается со временем.

Так работает сохранение настроек в KiTTy и PuTTy

Так работает сохранение настроек в KiTTy и PuTTy

Кстати, для удобочитаемости текста в консоли я использую моноширинной шрифт Cousine четырнадцатым кеглем. Шрифты настраиваются в разделе Window — Appearance.

Midnight Commander

Это файловый менеджер №1 в мире *nix. С его помощью удобно смотреть содержимое каталогов и редактировать файлы конфигурации через встроенный mcedit. MC сильно облегчит жизнь.

Сначала обновите софт:

sudo apt update
sudo apt upgrade

Затем ставьте сам MC:

sudo apt install mc

Midnight Commaner запускается командой mc.

Редактор mcedit, идущий в комплекте, отдельно запускается так:

mcedit -e /dir/ваш_файл_для_редактирования

К программе есть неполная документация на русском языке.

WinSCP

Для передачи файлов с/на сервер нельзя использовать протокол FTP из-за его полной небезопасности: пароль и другие данные легко перехватить. Вместо этого файлы можно передать через SFTP, используя тот же порт, логин и пароль, что и для консоли SSH.

Скачать WinSCP можно на домашней странице программы. Доступен файл русификации, его нужно сохранить в папке с WinSCP. При смене версии нужно обязательно перезакачать русификацию, иначе язык сбросится на английский.

Fail2ban

Инсталлятор Webinoly не ставит Fail2ban, поэтому защищаться от подбора паролей к службам сервера придётся самостоятельно.

Сначала ставим с параметром -y, чтобы не было лишних вопросов:

sudo apt install fail2ban -y

И… на этом всё! После 5 неудачных попыток логина IP-адрес атакующего будет забанен на 600 секунд.

В интернете есть много инструкций по настройке Fail2ban. Подозреваю, что многие устарели, потому что Fail2ban работает «из коробки» с SSH, хоть правила и не жёсткие.

Если по какой-то причине в логах /var/log/fail2ban.log пусто (любой сервер подвергается атаке через ssh несколько раз за день, там просто обязано что-то быть), убедитесь что существует лог-файл /var/log/auth.log. Если его нет, установите rsyslog (apt install rsyslog), в файле /etc/ssh/sshd_config раздел #Logging приведите к такому виду:

# Logging
SyslogFacility AUTH
LogLevel VERBOSE

И настройте Fail2ban так:

1. Создайте файл конфигурации командой

touch /etc/fail2ban/jail.local

2. Вставьте туда конфиг для защиты SSH:

[sshd]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
findtime = 600
maxretry = 3
bantime = 43200

3. Перезапустите сервисы командами:

sudo service ssh restart
sudo service fail2ban restart

Позже советую погуглить документацию, чтобы настроить защиту других служб сервера. В файле конфигурации fail2ban.conf есть готовые секции для различных SSH, Nginx, Openwebmail и других, их можно «оттюнинговать» путём копирования секции настроек в файл jail.local, как в примере с настройкой ssh.

Я же расскажу о снятии блокировки по IP, что сильно выручило, когда увлёкся редактированием настроек Fail2ban и забанил самого себя.

Быстро разбанить любой IP можно с помощью утилиты fail2ban-client. Сначала смотрим, забанен ли адрес вообще.

iptables -L -n

Затем даём команду на разбан.

sudo fail2ban-client set sshd unbanip tyt_ip

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

Webinoly

Главная цель скриптов Webinoly — запустить на вашем сервере с Убунтой сайты. Вы не найдёте управление пользователями, мониторинг производительности и прочие фишечки. Webinoly — прекрасное решение для тех, кому нужен сервер для личных проектов.

В качестве софта используется стек LEMP: Nginx+PHP+MySQL. Правда, в качестве сервера баз данных авторы предпочли MariaDB, но это даже хорошо — так можно покрыть потребности большего количества систем управления контентом.

В отличии от VestaCP, какой-либо «защиты от дурака» здесь не существует. Неправильно отредактировали конфиг — сами виноваты. Но зато Webinoly не сильно вмешивается в файлы конфигурации, лишь генерируя базовые конфиги как для полностью статических, так и динамических сайтов на PHP. Особое внимание уделено WordPress: для быстрого создания сайта на этой CMS есть отдельная команда.

Поддержка кеширования с помощью средств Nginx, Redis и Memcached также присутствует. Причём для WP при включении кеша будет предложена установка соответствующих плагинов.

PhpMyAdmin для управления базами данных тоже наличествует.

В общем, Webinoly — это инструмент без особых замашек на всеядность, но зато в нём нормально работают заявленные функции:

  1. Добавление, удаление сайтов.
  2. Быстрое включение кеширования.
  3. Быстрая конфигурация HTTPS (встроенный шаблон настроек SSL очень даже неплох, получает A+ на SSL Labs).
  4. Автоматическое обновление сертификатов SSL от Let’s Encrypt.
  5. Просмотр в реальном времени всех основных журналов событий.

Это хороший старт для тех, кому не лень прочитать мануалы и донастроить сервер под свои нужны самостоятельно, на 100% используя имеющиеся ресурсы сервера.

Установка

Ставится достаточно просто, нужно выполнить несколько шагов.

1. Выполните в консоли команду загрузки и запуска инсталлятора:

wget -qO weby qrok.es/wy && sudo bash weby 3

Первоначальная установка пакетов займёт 5-15 минут.

Затем вы получите два пароля от базы данных — админский (admin) и полный (root), запишите их. Если что, в phpMyAdmin достаточно заходить под админом.

Успешная установка Webinoly

Успешная установка Webinoly

В принципе, серверный софт уже будет работать, но нужно его донастроить.

2. Кое-какие средства администрирования окажутся доступны на 22222 порту. Не облегчайте жизнь сканирующим ботам и злоумышленникам, измените порт на любой случайный командой:

sudo webinoly -tools-port=xyz

Вместо xyz — любой порт, кроме 22, 80 и 443.

Попытавшись зайти по адресу http://ip_вашего_сервера:тот_случайный_порт, вы обнаружите, что у вас требуют логин и пароль. Их нужно добавить командой:

sudo httpauth -add=[user,password]

Полагаю, вы догадались, что нужно ввести вместо user и password.

Пароли, передающиеся методом HTTP Authentication, можно перехватить. Не админьте сервер, подключившись к публичной Wi-Fi сети.

Зайдя по этому адресу, вы сможете глянуть некоторую статистику сервера и воспользоваться phpMyAdmin.

Также этим же логином и паролем можно защитить админки сайтов на WordPress. Просто выполните команду:

sudo httpauth -wp-admin=on

Это не защитит от слишком настойчивого хакера, но в целом полезно.

Документация к Webinoly

Эта консольная панель управления сервером облегчает размещение сайтов, помогает настроить бекап, быстро сконфигурировать кеширование в nginx и подключить SSL-сертификаты Let’s Encrypt.

На момент написания этой статью доступно 5 модулей, у каждого своя команда и своя зона ответственности.

httpauth — управление пользователями для проверки подлинности с помощью HTTP Authentication. Как уже писал выше, с его помощью можно защитить и админку сайта на WordPress.

log — для просмотра логов в режиме реального времени.

site — создание, удаление сайтов и изменение их настроек.

stack — установка и удаление серверного софта. Например, можно полностью убрать nginx и сервер базы данных, чтобы хостить только статические сайты.

webinoly — управление самой панелью, её обновление и регулировка некоторых параметров.

Каждый модуль требует прав администратора, т.е. команды вводятся вместе с sudo:
sudo site <набор опций>

httpauth

Команда «httpauth» позволяет ограничить доступ к страницам с помощью аутентификации по HTTP. Обычно это phpMyAdmin, /wp-admin и /wp-login.

Синтаксис:

sudo httpauth <опция>

Опции:

-add — создать пользователя для доступа к разделам, защищённым через HTTP Authentication. К системным пользователям Убунты отношения не имеют! После нажатия Enter Webinoly спросит имя пользователя и пароль. Можно этого избежать, сразу указав вот так:

sudo httpauth -add=[user,password]

-delete — удалить пользователя. Можно сразу указать вот так:

sudo httpauth -delete=user

-list — вывести список добавленных пользователей.

-wp-admin=on — включение защиты паролем страниц /wp-admin и /wp-login — админки сайтов на WordPress. Зайти можно будет под любым добавленным пользователем. Это не какая-то суперсильная защита от взлома, в админку можно попасть многими способами, просто дополнительное (весьма эффективное!) препятствие.

 -wp-admin=offглобальное выключение защиты /wp-admin и /wp-login. Для выключения на отдельных сайтах используйте sudo httpauth domain.com -wp-admin=off.

Для защиты отдельных разделов сайта есть набор команд:

# Закрытие паролем /folder и всех подразделов. Чтобы закрыть только /folder, допишите опцию "-exact".
sudo httpauth example.com -path=/folder

# Указание "-path=/" закроет доступ ко всему сайту. Удобно для разработки сайтов - никто, кроме знающих пароль, не будет иметь доступа:
sudo httpauth example.com -path=/

# Удалить блокировку указанного пути:
sudo httpauth example.com -path=/folder -purge

# Удалить всю защиту паролем, поставленную на сайт:
sudo httpauth example.com -path=all -purge

Как я написал выше, с помощью Webinoly можно легко закрыть весь сайт от доступа извне. Но вдруг вы не хотите вводить пароль? Добавьте ваш IP в список доверенных адресов:

# Добавление:
sudo httpauth -whitelist=123.123.123.123

# Очистка списка доверенных:
sudo httpauth -whitelist -purge

log

Командой «log» можно быстро глянуть журналы событий. Причём они будут отображаться в реальном времени, что очень удобно для отладки сайтов.

Синтаксис:

sudo log <домен> <опция>

Запуск «log» без опций и указания доменов покажет логи доступа (не ошибок) ко всем сайтам на VPS. Чтобы увидеть ошибки, выполните:

sudo log <домен> -error

Либо ошибки сразу всех сайтов:

sudo log -error

Специально для WordPress есть полезная команда:

sudo log <домен> -wp

Команда покажет содержимое файла /wp-content/debug.log. Работает только при включенном параметре WP_DEBUG=TRUE и записи ошибок в вышеуказанный файл.

Показ ошибок PHP:

sudo log -php

Ошибки сервера баз данных MariaDB:

sudo log -mysql

Ошибки при работе с почтой (логи postfix):

sudo log -mail

Для прерывания показа, как и в случае с любыми скриптами, жмите Ctrl+C.

site

Создание и управление сайтами — самая проработанная часть Webinoly.

Синтаксис команды site таков:

sudo site <домен> <опция_1> <опция_2>

Возможные опции:

-html — создание статического сайта.

-php — создание сайта с поддержкой PHP и без базы данных.

-mysql — если указан домен, создаёт сайт с поддержкой PHP и базу данных. Чтобы не было лишних вопросов, можно использовать настройки по умолчанию:

sudo site <домен> -mysql=default

Либо указать собственные:

sudo site <домен> -mysql=[host,dbname,dbuser,password,external_dbuser,external_dbpass]

Либо можно не вписывать пароли и данные в длинную команду, а запустить пошаговый мастер вопросов:

sudo site <домен> -mysql=custom

Кстати, если домен не указан, то команда просто создаёт БД. Пригодится на случай, если, например, сайту требуется несколько баз.

-wp — создание сайта с WordPress:

sudo site example.com -wp

Webinoly самостоятельно скачает эту CMS, создаст базу данных и пропишет базовые настройки. Вам остаётся лишь зайти на сайт и ответить на несколько базовых вопросов: какое название дать, какое имя и email у администратора и т.п. Если вы изначально добавили пароль для HTTP-аутентификации и включили защиту админки, то ненастроенный сайт будет прикрыт указанным паролем, что позволит не спешить с первоначальной настройкой.

Обычно я создаю сайты на сервере, вводя несколько команд по очереди. Часть из них можно указать в одной строке, но сайты бывают разные, да и запутаться недолго. Поэтому, если вкратце, делаю так:

# Сначала создаю пустой сайт на CMS WordPress
sudo site domain.com -wp 
# Затем включаю плагин кеширования через Nginx
sudo site domain.com -cache=on
# При необходимости включаю поддержку плагина Yoast SEO (будьте осторожны - с этой опцией при некоторых конфигурациях даже при установленном плагине файл /sitemap.xml может оказаться недоступен!)
sudo site domain.com -yoast-sitemap=on
# Затем, убедившись, что на DNS серверах уже прописалась связь доменнного имени и IP адреса сервера, запрашиваю сертификат Let's Encrypt:
sudo site domain.com -ssl=on

Любители контролировать всё и вся могут во время генерации сайта вместо «-wp» указать «-wp=custom» и тогда Webinoly спросит вас, хотите ли вы указать некоторые настройки: имя базы данных, пароль к ней и т.п. Вы можете просто нажимать Enter, чтобы использовать настройки по умолчанию. А ещё можно сразу задать в команде опции согласно синтаксису:

sudo site example.com -wp=[<setup_db>, <setup_wp>, <host>, <dbname>, <dbuser>, <dbpass>, <wp_prefix>, <external_db_user>, <external_db_pass>])

Для WordPress Multisite есть два варианта установки — для подкаталога:

sudo site example.com -wpsubdir=default -cache

И субдомена:

sudo site example.com -wpsubdom=default -cache

Как только вы войдете на свой новый сайт, WordPress, как обычно, попросит вас выбрать язык, пользователя, почту и другие настройки. Загляните в Инструменты — Настройка сети, чтобы снова выбрать тип установки — субдомен или подкаталог. Можно донастроить WP Multisite и другим способом, раскомментировав добавленные Webinoly строки в wp-config.php файле.

Помните о том, что на нагруженных сайтах вы всегда можете с помощью -cache=on и -cache=off включить и выключить кэширование FastCgi с помощью Nginx. Это позволит держать на дешёвом виртуальном сервере сайт, который посещают десятки тысяч человек в сутки при условии, что на нём контент меняется редко (люди не заходят в Личный кабинет, не устраивают дискуссии в режиме чата и тому подобное).

Чтобы включить FastCgi:

sudo site domain.com -cache=on

Чтобы отключить FastCgi:

sudo site domain.com -cache=off

Вы также можете активировать кеш сразу при создании нового сайта:

sudo site domain.com -wp -cache=on

Кстати, для WordPress используйте плагин Nginx Helper, чтобы кеш очищался корректно. В его настройках укажите прямую очистку файлов вместо запроса через url (опция «Delete local server cache files» или «Удалить локальные файлы кеша на сервере»).

-parked — указание, что это альтернативный домен сайта. Таким образом один сайт может быть доступен на разных доменах. Синтаксис такой:

sudo site domain.com -parked=mainsite.com

Обязательный момент: основной сайт должен быть на этой же VPS-ке, иначе ничего не заработает.

-proxy — включение обратного прокси в Nginx. Синтаксис такой:

sudo site example.com -proxy=localhost:8080

Пригодится, например, если сайт работает на Python вместо PHP или нужно привязать доменное имя к контейнеру Docker.

-on и -off — активация и деактивация сайта. Допустим, вы проводите какие-то технические работы и посетители вам не нужны, можно временно отключить сайт.

-delete — удаление указанного сайта.  Если не хотите, чтобы удалилась связанная БД, используйте «-delete=keep-db» (но про резервные копии не забывайте!).

-delete-all удаляет ВСЕ сайты. Если сайт на WP, удалится и привязанная база данных, в остальных случаях может что-то остаться.

-list — вывод списка сайтов на VPS.

-ssl=on — включение шифрования по HTTPS. Запрашивается бесплатный сертификат у сервиса Let’s Encrypt, который будет сам обновляться. Каждую неделю Webinoly будет присылать вам письма со статусом используемых сертификатов, чтобы максимально контролировать этот процесс.

Важный момент: если ваш сайт использует «припаркованные» (зеркальные) домены, нужно использовать параметр -root с указанием основного. Синтаксис получения сертификата будет такой:

sudo site domain.com -ssl=on -root=mainsite.com

-ssl=off — выключение HTTPS у сайта.

-subdomain=true — принудительное указание поддомена. Обычно Webinoly сам определяет, указали ли вы домен или субдомен, но разработчики реализовали возможность указать это вручную.

Если вам всё ещё непонятно, как создаётся пустой сайт на Вордпрессе через команды «site …», гляньте практический пример далее по тексту.

stack

Команда «stack» управляет набором софта, который инсталлирует Webinoly. Синтаксис команд:

sudo stack <option> <option2>

Пригодится, если вам не нужен весь серверный софт и вы поставили панель управления сервером такой командой (обратите внимание на 0 в конце):

wget -qO weby qrok.es/wy && sudo bash weby 0

Опции:

-html или -nginx — установка Nginx. Для особенных случаев можно указать источник версий:

sudo stack -nginx=mainline

или

sudo stack -nginx=stable

-php — PHP-интерпретатор.

-mysql — MySQL (MariaDB).

-pma — phpMyAdmin.

-web-tools — дополнительные утилиты: Let’s Encrypt, Duply & Duplicity (для бекапов), Postfix (для отправки почты с VPS), Redis и Memcached (кеширование), Php Info & Status (страница, доступная через порт 22222), phpMyAdmin. По умолчанию ставятся вместе с nginx, поэтому, если всё это добро вам не нужно, используйте опцию -notools:

sudo stack -nginx -notools

-lemp — установка Nginx, PHP, MySQL и всех дополнительных утилит.

-php-ver — (пере)установка PHP на определённую версию. Например:

sudo stack -php-ver=7.3

-purge — добавление этой команды к -php, -nginx, -mysql, -pma, -web-tools вызовет удаление указанного софта.

-purge-server-all — удаление всего софта, кроме Webinoly. Чтобы не было вопросов от консоли управления, можно форсировать операцию:

sudo stack -purge-server-all=force

-info — вывод информации об установленных пакетах, софте.

webinoly

Модуль, отвечающий за настройку консоли. Синтаксис:

sudo webinoly <опция>

-update — обновление Webinoly до последней версии.

-dbpass — по идее эта команда восстановит изначально сгенерированные логины и пароли пользователей баз данных, но пока лучше не пользоваться — разработчики сообщают, что нужно доработать.

-tools-port — указание порта для доступа к phpMyAdmin и другим инструментам.

-login-www-data — разрешить пользователю www-data доступ к загрузке файлов по протоколу SFTP. -nologin-www-data запрещает.

-config-cache — настройка кеша FastCgi в Nginx. Настраиваются три срока хранения кеша:

  1. Код HTTP 200: успешные запросы страниц.
  2. Время бездействия: удалить кешированные данные, которые не запрашивались определённое время.
  3. HTTP-коды 301, 302, 307 и 404: перенаправления и «страница не найдена».

Формат времени: s — секунды, m — минуты, h — часы, d — дни, w — недели, M — месяцы, y — года.

Чтобы не проходить квест с вопросами и ответами, можно сразу указать в команде:

sudo webinoly -config-cache=[10d, 1w, 5m]

-clear-cache=<опция> — принудительная очистка кеша. Возможные опции: all (все), fastcgi, redis, memcached, opcache.

-verify — проверка целостности установки Webinoly. Запустится проверка всех файлов и некоторых настроек.

-info — информация о настройках Webinoly.

-uninstall — удаление консоли управления. Папки с сайтами останутся.

-server-update или -server-reset — сброс всех файлов конфигурации на дефолтные.

Редактирование настроек Nginx и прочего софта

Файл конфигурации панели управления находится по пути /opt/webinoly/webinoly.conf. Особо менять там нечего, но если что — смотрите официальную документацию.

Когда вы создаёте сайт командой sudo site, в указанных ниже директориях генерируются конфигурационные файлы на основе шаблонов из /opt/webinoly/templates/.

/var/www/имя_сайта/htdocs/ — сюда нужно поместить файлы сайтов.

/etc/nginx/sites-available — конфиги nginx, сгенерированные на основе шаблонов Webinoly.

/etc/mysql/ — конфиги сервера баз данных.

/etc/nginx/ — конфиги Nginx.

/etc/php/ — настройки PHP.

Так вот, почти всё это добро редактировать можно. В конфигах, которые перезапишутся при обновлении панели, так и будет написано — «Do not modify, all changes lost after update Webinoly», всё остальное правьте как вам угодно.

Чтобы не забивался диск сервера

Это не совсем проблема Webinoly, а скорее странность дефолтных настроек MySQL/MariaDB. Сразу после установки Webinoly поищите в файле /etc/mysql/my.cnf указанные ниже строки и закомментируйте (поставьте знак «#» в начале строк), чтобы получилось вот так:

#server-id = 1
#report_host = master1
#auto_increment_increment = 2
#auto_increment_offset = 1
#log_bin = /var/log/mysql/mariadb-bin
#log_bin_index = /var/log/mysql/mariadb-bin.index

Файл редактируется только под root’ом, то есть редактор можно запустить вот так:

sudo nano /etc/mysql/my.cnf

Если каких-то строк нет — не добавляйте. После правки и сохранения перезапустите службу MySQL:

sudo service mysql restart

Данные настройки нужны для работы БД сразу на нескольких серверах. Кому такое нужно — настроит. Для одиночного VPS опции log_bin и log_bin_index только мешают, ибо в каталоге /var/log/mysql/ начнут плодиться файлы mariadb-bin*. Когда на сервере 5-10 Гб свободного места, каждый гигабайт на счету.

После отключения настроек, связанных с репликацией БД, и рестарта службы, каталог  /var/log/mysql/ можно смело очищать.

Бекапы

Панель ставит Duplicity и Duply для возможности использования резервного копирования, но настраивать создание резервных копий придётся самостоятельно.

Возможностей Duplicity (Duply — это надстройка) очень много, сценариев использования десятки, если не сотни. Я не хочу раздувать свою заметку до объёма Войны и мира, поэтому смотрите здесь: duply.net.

Создание сайта на WordPress

Чтобы было более понятно, для чего вообще нужен Webinoly, покажу, как можно быстро поднять сайт на Вордпрессе. Почти весь процесс: с нуля до полностью рабочего интернет-ресурса. В моменты с доступом по SSH вдаваться не буду, чтобы не раздувать инструкцию до циклопических размеров, но постараюсь дать работоспособный алгоритм. Подразумеваю, что вы знаете, как подключиться к серверу по SSH и хотя бы в общих чертах понимаете, что такое IP, домен и Linux.

Шаг 1. Покупка домена

О выгодной покупке доменного имени я написал целый трактат: «Покупка домена: как придумать имя, где купить дешевле и что настроить». Благодаря ему вам вы не увидите дно кошелька после того, как приобретёте имя для сайта.

С точки зрения администрирования всё, что вам нужно знать о доменном имени — нужно в редакторе записей DNS указать IP вашего сервера (см. главу «Связывание домена с сервером» вышеуказанной статьи).

Шаг 2. Покупка сервера

Про выбор виртуального сервера писал заметку «Как выбрать VPS хостинг — несколько советов». Несмотря на то, что она 2016-го года выпуска, советы в неё актуальны по-прежнему. Но можно поступить проще и выбрать из небольшого списка хостеров, которыми я пользуюсь регулярно.

Учтите — это не топ, а равнозначный список. Все ссылки реферальные — за рекламу хостеры мне не платят, должен же я получить хоть какую-то выгоду.

VDSina.ru — минималистичный (в хорошем смысле) сервис, рассчитанный на тех, кому нужны резервные копии, возможность загрузки с собственного ISO-образа и больше ничего. Интересен тарифом VPS за 60 рублей (0,5 Гб ОЗУ, 5 Гб диск, одноядерный ЦП, 1 Тб трафика на месяц), которого достаточно для работы небольшого сайта. Когда пишу инструкции (так было и с этой), все конфигурации проверяю на VPS этого тарифа.

Smartape.ru — сервис с не самыми дешёвыми тарифами, зато каналом связи в 200 Мбит и своим ЦОД для серверов. Можно у них же купить доменное имя (.ru за 195 рублей в год), а также приобрести FTP-хранилище для хранения бекапов (20.00 рублей за месяц за 10 Гб). За более чем 5 лет работы со Смартэйпом у меня есть только одна претензия к качеству услуг — из-за события, случившегося 28 ноября 2019 г. В этот день все их сервера были недоступны около трёх часов, сайт хостинга не работал, а аккаунты в соцсетях хранили молчание (в рабочее время, между прочим!). Уже после того, как всё починили, в Фейсбуке мне ответили, что был DDoS. В Твиттере и ВК аналогичный вопрос проигнорировали. Из этого можно сделать вывод, что их защита от DDoS работает недостаточно хорошо, а сотрудники не любят социальные сети.

Beget.com — недорогой хостинг, про который нельзя ничего сказать ни плохого, ни хорошего. Он просто работает. Удобен для проектов «на вырост»: можно взять VPS на базовом тарифе и со временем менять характеристики в сторону увеличения без переустановки ПО.

DigitalOcean — всемирно известный зарубежный хостинг. У меня на нём постоянно какой-нибудь сервер да запущен. К сожалению, новым VPS в 9 из 10 случаев попадаются заблокированные в РФ IP, меняются лишь пересозданием сервера с нуля — учтите этот момент.

Scaleway — французский сервис, один из самых недорогих, если не самый лоукостерный. На самой дешёвой VPS от них запущен данный сайт. У меня претензий к качеству сервиса, но в интернете очень, очень много плохих отзывов. Почему так — не знаю.

На всех вышеуказанных хостингах можно создать виртуальный сервер с 64-битной Ubuntu 18.04. Кому-то больше по душе Debian, CentOS или FreeBSD — это их право. Webinoly работает лучше всего с Убунтой, поэтому в данном случае выбор однозначен.

Шаг 3. Установка софта

Далее я приведу список команд, которые позволят запустить сайт на WP. Всё делается из-под пользователя root, что не очень безопасно. В будущем советую почитать про команду sudo, настройку пользователей и права на каталоги с файлами в Linux.

Знаком решётки отделил комментарии на тот случай, если решите командовать сервером по принципу copy&paste.

# Обновляем софт и перезагружаем сервер.
apt update && sudo apt upgrade -y && reboot
# Ставим fail2ban, чтобы затруднить подбор пароля к root,
# и утилиту screen, которая поможет в будущем.
apt install fail2ban screen -y
# Редактируем конфиг службы SSH.
nano /etc/ssh/sshd_config
# Здесь смотрим главу "fail2ban" и редактируем нужные строчки.
# Затем жмём Ctrl+X, y, Enter, чтобы сохранить конфиг.
# Создаём конфиг fail2ban.
touch /etc/fail2ban/jail.local
# Редактируем его, добавляя конфиг из той же главы.
nano /etc/fail2ban/jail.local
# Сохраняем файл и перезагружаем службы для применения новых настроек.
service sshd restart && service fail2ban restart
# На всякий случай включаем службу fail2ban, чтобы запускалась при рестарте сервера
systemctl enable fail2ban
# Запускаем screen, чтобы в случае разрыва соединения 
# с сервером установка Webinoly не прервалась.
screen
# И Enter, чтобы попасть в терминал. В будущем, если связь прервётся, 
# в новой сессии SSH вы сможете вернуться к процессу командой "screen -r".
# Затем ставим собственно Webinoly в готовой конфигурации.
wget -qO weby qrok.es/wy && sudo bash weby 3
# Ждём. После установки появятся пароли от БД - запишите куда-нибудь.
# Далее можете закрыть screen командой exit или отсоединиться от сеанса сочетанием Ctrl+D,
# а можете продолжать прямо в ней.
# Выключаем бинарный лог в БД.
nano /etc/mysql/my.cnf
# Смотрите главу "Чтобы не забивался диск сервера", чтобы понять, что редактировать.
# Перезапускаем службу MySQL, чтобы применить настройки
service mysql restart
# Меняем порт на случайный, например - 8301, у закрытого раздела с утилитами
webinoly -tools-port=8301
# Добавляем пользователя для доступа через HTTPauth.
httpauth -add
# и по очереди вводите имя пользователя (любое) 
# и пароль (придумайте что-нибудь посложнее даты рождения).
# Затем создаём пустой сайт на WordPress с настройками по умолчанию.
site example.com -wp
# Если всё успешно, вы ничего не увидите в консоли. Нужно перейти в браузер.

На этом этапе попытайтесь открыть в браузере свежесозданный сайт. Если у вас появится запрос пароля — значит, всё нормально. Если нет (ошибка ERR_NAME_NOT_RESOLVED) — записи DNS ещё не обновились и домен не связан с сервером, нужно подождать час-другой. Вы ведь прописали нужную запись типа A, как я сказал в статье про покупку домена, не так ли?

Логин и пароль для доступа, кстати, те, что вы указали после вызова команды «httpauth -add». Можно создать сколько угодно пар логин/пароль — подойдут все.

Итак, раз спрашивает логин и пароль, значит — Nginx работает, Вордпресс установлен, всё идёт по плану. Возвращайтесь в терминал.

# Получаем сертификат Let's Encrypt, чтобы сайт открывался
# по защищённому протоколу HTTPS.
site example.com -ssl=on
# На этом этапе будет несколько вопросов, можете пропускать все,
# кроме адреса электронной почты - туда придёт оповещение,
# если возникнет трудность с автоматическим продлением сертификата (такое бывает).

Снова возвращайтесь в браузер, вводите логин и пароль. Вы попадёте в знаменитую пятиминутную установку сайта на WordPress:

Сначала выбор языка

Сначала выбор языка

Затем указание имени сайта, пароля администратора и прочей важной информации

Сообщение об успешной установке

Всё! Можно входить в админку, открывать сайт — всё будет работать!

Сайт на WordPress создан!

Обратите внимание — для доступа к административной части /wp-admin/ сайт будет спрашивать во всплывающем окне логин и пароль для HTTP-авторизации, затем от администратора сайта. То есть получается дополнительная защита админки. Это не всегда удобно, потому что обычные пользователи не смогут авторизоваться. В таком случае HTTP-авторизацию можно выключить:

httpauth example.com -wp-admin=off

Шаг 4. Включение кэширования

Вишенкой на торте будет включение кэширования страниц средствами Nginx и Redis, благо Webinoly поставит вам плагины для этого.

site example.com -cache=on

Ответьте кнопкой «Y» на вопросы об установке плагинов и заходите в админку сайта. Активируйте Nginx Helper и Redis Object Cache.

После этого нужно их включить. Для Redis Object Cache это кнопка «Enable Object Cache» в разделе НастройкиRedis, а для Nginx Helper нужно привести страницу плагина в такой вид:

Настройки Nginx Helper

Этого должно быть достаточно, чтобы сайт даже на самой дешёвой VPS выдерживал тысячи посетителей в минуту, так как вместо ресурсоёмких запросов к WordPress вебсервер Nginx будет подставлять зашедшим сохранённые в кэше статичные страницы.

Конечно, это далеко не всё, что можно выжать из сервера. Желательно настроить PHP-FPM на работу через сокеты, подкрутить настройки MySQL, но для базовой установки уже неплохо. С помощью Webinoly удалось избежать возни с созданием базы данных, что существенно сэкономило время, и настроить кэширование, чтобы сайт радовал стабильной работой при высокой посещаемости.

Резюме

Webinoly — достаточно простой инструмент, автоматизирующий администрирование VPS или VDS. В нём нет «защиты от дурака», поэтому внимательно читайте мануалы перед тем, как что-то делать.

А как вы управляете своим сервером (если он у вас есть)?

11 комментариев

  1. Айдос

    Приветствую. Сегодня разворачивал 2 сайта и оба не создались. Впервые такое, обычно всегда как по маслу. Хотя на этот раз сервер от другой компании.
    Пишет, что создались оба, но при наборе адреса ни одного нет. Ну и перед созданием первого что-то пишет, не понял на что жалуется. Что делать?

    Ответить

    • Дмитрий Глашков

      Айдос, вижу, что проблему решили, но всё же отвечу: в таком случае надо удалить и создать сайт заново, т.к. ошибки в консоли сообщают, что архив с WordPress повреждён. То есть файлы конфигурации Nginx создались, остальное — нет, потому что архив с WP не распаковался.

      Ответить

      • Айдос

        хоть и поздний ответ, но все равно спасибо! Вебиноли шикарна, чем больше работаю, тем больше нравится!

        Ответить

  2. Ruslan Banochkin

    Там ошибка выше, не «sudo httpauth -wp-admin-on», а «sudo httpauth -wp-admin=on».

    Ответить

    • Дмитрий Глашков

      Ruslan Banochkin, спасибо, обновил. Иногда у Webinoly меняется синтаксис команд.

      Ответить

  3. Vadim

    Подскажите, что значит команда создать сайт?
    На WP понятно, скрипт зальёт установщик WP в каталог с сайтом, а если создаю сайт, без WP, тогда панель просто создаст каталог с одноимённым названиванием?

    Ответить

    • Дмитрий Глашков

      Vadim, не только. Не забудьте про БД и файлы конфигурации nginx. Для WP — создаст БД с пользователем, пропишет параметры в wp-config.php, создаст файл конфигурации nginx, для обычного сайта — в зависимости от доп. ключей в команде, создаст БД, пропишет обработчик php в конфиге nginx.

      Ответить

  4. Миха

    может fail2ban не нужен если по ключам SSH логиниться и отключить вход по паролю?

    Ответить

    • Дмитрий Глашков

      Миха, может и не нужен. Но для начальной настройки связка fail2ban с авторизацией по паролю — вполне надёжное решение.

      Ответить

  5. Александр

    Подскажите, пожалуйста будет ли работать Webinoly на Raspberry Pi 4B (ARM64)?

    Ответить

    • Дмитрий Глашков

      Александр, должно работать, т.к. исполняемые файлы Webinoly — обычные bash скрипты. Однако во время установки могут появиться ошибки, т.к. в добавляемых репозиториях для nginx и другого софта ARM64 софта может не оказаться. Впрочем, ничто не мешает добавить совместимые репозитории вручную.

      Ответить

Ответить Отменить ответ

Правила:
  • 1. Уважайте стороннее мнение. Токсичные комментарии удаляются.
  • 2. Комментарии со ссылками видны после проверки модератором.
  • 3. Обсуждение нелицензионного софта и других незаконных тем запрещено.

Тема Rowling от Anders Norén. Копирование материалов сайта разрешается только с указанием автора и активной ссылкой на источник.