Главная » Полезное » Webinoly: управляем VPS с Ubuntu Server 18.04

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

Как сэкономить время на установке и настройке Nginx, PHP и MariaDB и управлять сервером, хостящим сайты, через консоль.

Webinoly: управляем VPS с Ubuntu Server 18.04ЛайкнутьЛайкнутьТвитнутьОглавление

  • Предисловие
  • Почему Ubuntu Server 18.04?
  • KiTTy
  • Midnight Commander
  • WinSCP
  • Fail2ban
  • Webinoly
  • Установка
  • Документация к Webinoly
  • httpauth
  • log
  • site
  • stack
  • webinoly
  • Редактирование настроек Nginx и прочего софта
  • Бекапы
  • Резюме

ПредисловиеЗдесь нет пошаговых инструкций для начинающих. Это заметка о том, как можно управлять сервером без браузера через текстовый терминал. Мой опыт, предпочтения и мнение могут отличаться от вашего.

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

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

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

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

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

Чуть позже выяснилось, что вроде бы проблема в почтовом веб-клиенте 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 сервера и настройки. Остальное наработается со временем.

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

Так работает сохранение настроек в 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/vash_fail.conf

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

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/ssh_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 — это инструмент без особых замашек на всеядность, но зато в нём нормально работают заявленные функции:

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

    Установка

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

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

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

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

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

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

    Успешная установка 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.

    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]

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

    -wp — создание сайта с WordPress. Во время установки Webinoly спросит вас, хотите ли вы изменить некоторые настройки вроде базы данных, вы можете просто нажимать Enter, чтобы использовать настройки по умолчанию. Либо выключить запрос настроек и использовать готовый шаблон:

    sudo site example.com -wp=default -cache

    Можно также сразу задать в команде все нужные опции согласно синтаксису:

    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 и -nocache включают и выключают соответственно кеширование FastCgi с помощью Nginx.

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

    sudo site domain.com -cache

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

    sudo site domain.com -nocache

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

    sudo site domain.com -wp -cache

    Кстати, для 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.

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

    -delete — удаление указанного сайта. -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 сам определяет, указали ли вы домен или субдомен, но разработчики реализовали возможность указать это вручную.

    stack

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

    sudo stack <option> <option2>

    Пригодится, если вам не нужен весь серверный софт и вы поставили Webinoly такой командой (обратите внимание на 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=5.6

    -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. Настраиваются три срока хранения кеша:

  • Код HTTP 200: успешные запросы страниц.
  • Время бездействия: удалить кешированные данные, которые не запрашивались определённое время.
  • 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», всё остальное правьте как вам угодно.

    Бекапы

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

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

    Резюме

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

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

    Источник

    Интересные публикации по этой теме: