Table of Contents
1 Предисловие
Вы можете заказать у меня настройку сервера. Либо настроить и управлять сайтами самостоятельно, следуя советам ниже.
Немногим более года назад я рассказал про возможности панели управления 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 запускать тоже можно.
2 Почему Ubuntu Server 18.04?
Это релиз со статусом LTS (Long Term Support, «поддержка в течение длительного периода»), для которого будут выходить обновления аж до 2023 года. Поддержка старой 16.04 заканчивается тоже не завтра, а в 2021 году, но я всё же хочу чуть большей безопасности, чем может предоставить 16.04.
Кстати, в пользу Webinoly сыграл тот факт, что хотя на момент написания статьи версии с поддержкой Ubuntu Server 18.04 не было (сейчас поддерживает), всё нормально установилось и заработало. Такой уровень говорит о продуманности и/или простоте решения.
Про инсталляцию Ubuntu Server 18.04 писать не буду, так как обычно хостер предоставляет готовый образ системы. Вам нужно лишь подключиться по протоколу SSH и начать управление сервером через консоль.
3 KiTTy
Советую программу KiTTy в качестве SSH-клиента. Это форк популярной софтины PuTTy с полезными улучшениями.
Главное при использовании — разобраться с сохранением сессий, чтобы не вводить каждый раз IP сервера и настройки. Остальное наработается со временем.
Кстати, для удобочитаемости текста в консоли я использую моноширинной шрифт Cousine четырнадцатым кеглем. Шрифты настраиваются в разделе Window — Appearance.
4 Midnight Commander
Это файловый менеджер №1 в мире *nix. С его помощью удобно смотреть содержимое каталогов и редактировать файлы конфигурации через встроенный mcedit. MC сильно облегчит жизнь.
Сначала обновите софт:
sudo apt update sudo apt upgrade
Затем ставьте сам MC:
sudo apt install mc
Midnight Commaner запускается командой mc
.
Редактор mcedit, идущий в комплекте, отдельно запускается так:
mcedit -e /dir/ваш_файл_для_редактирования
К программе есть неполная документация на русском языке.
5 WinSCP
Для передачи файлов с/на сервер нельзя использовать протокол FTP из-за его полной небезопасности: пароль и другие данные легко перехватить. Вместо этого файлы можно передать через SFTP, используя тот же порт, логин и пароль, что и для консоли SSH.
Скачать WinSCP можно на домашней странице программы. Доступен файл русификации, его нужно сохранить в папке с WinSCP. При смене версии нужно обязательно перезакачать русификацию, иначе язык сбросится на английский.
6 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 может быть название любой другой службы, для которой сработала блокировка.
7 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 достаточно заходить под админом.
В принципе, серверный софт уже будет работать, но нужно его донастроить.
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
Это не защитит от слишком настойчивого хакера, но в целом полезно.
8 Документация к 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. Настраиваются три срока хранения кеша:
- Код 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», всё остальное правьте как вам угодно.
Чтобы не забивался диск сервера
Это не совсем проблема 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/ можно смело очищать.
Чтобы корректно обновлялись сертификаты
В cron сервера Webinoly добавляет команду
15 3 * * 7 certbot renew --post-hook "service nginx restart"
для регулярного обновления сертификатов сайта, полученных в сервисе Let’s Encrypt. Однако утилита certbot (это не часть webinly) не всегда работает корректно. Иногда сертификат обновляется, но не всегда применяется к работающему сайту из-за несрабатывания команды service nginx restart. Поэтому советую добавить в cron вот такую строку:
0 0 * * * service nginx reload >/dev/null 2>&1
Редактор планировщика заданий вызывается командой
sudo crontab -e -u root
Тогда каждые сутки будут применяться настройки nginx, новый сертификат также обновится.
Другая проблема — иногда авторы утилиты certbot решают, что нужно изменить формат хранения настроек, и обновление сертификатов ломается совсем. То есть в /etc/letsencrypt/live за неделю до окончания трёхмесячного сертификата не появится новый. Выхода два:
- Обновите webinoly и certbot’а, затем выключите и включите ssl у сайтов через webinoly, таким образов пересоздав конфигурационные файлы.
- Вручную доработайте конфиги (файлов *.conf) certbot в /etc/letsencrypt/renewal до актуальной версии.
Оба метода имеют право на жизнь, но, очевидно, первый проще, если вы понятия не имеете, что должно быть в конфиге certbot.
Бекапы
Панель ставит Duplicity и Duply для возможности использования резервного копирования, но настраивать создание резервных копий придётся самостоятельно.
Возможностей Duplicity (Duply — это надстройка) очень много, сценариев использования десятки, если не сотни. Я не хочу раздувать свою заметку до объёма Войны и мира, поэтому смотрите здесь: duply.net.
9 Создание сайта на WordPress
Чтобы было более понятно, для чего вообще нужен Webinoly, покажу, как можно быстро поднять сайт на Вордпрессе. Почти весь процесс: с нуля до полностью рабочего интернет-ресурса. В моменты с доступом по SSH вдаваться не буду, чтобы не раздувать инструкцию до циклопических размеров, но постараюсь дать работоспособный алгоритм. Подразумеваю, что вы знаете, как подключиться к серверу по SSH и хотя бы в общих чертах понимаете, что такое IP, домен и Linux.
Шаг 1. Покупка домена
О выгодной покупке доменного имени я написал целый трактат: «Покупка домена: как придумать имя, где купить дешевле и что настроить». Благодаря ему вам вы не увидите дно кошелька после того, как приобретёте имя для сайта.
С точки зрения администрирования всё, что вам нужно знать о доменном имени — нужно в редакторе записей DNS указать IP вашего сервера (см. главу «Связывание домена с сервером» вышеуказанной статьи).
Шаг 2. Покупка сервера
Про выбор виртуального сервера писал заметку «Как выбрать VPS хостинг — несколько советов». Несмотря на то, что она 2016-го года выпуска, советы в неё актуальны по-прежнему. Но можно поступить проще и выбрать из небольшого списка хостеров, которыми я пользуюсь регулярно.
Учтите — это не топ, а равнозначный список. Все ссылки реферальные — за рекламу хостеры мне не платят, должен же я получить хоть какую-то выгоду.
VDSina.ru — минималистичный (в хорошем смысле) сервис, рассчитанный на тех, кому нужны резервные копии, возможность загрузки с собственного ISO-образа и больше ничего. Интересен тарифом VPS за 60 рублей (0,5 Гб ОЗУ, 5 Гб диск, одноядерный ЦП, 1 Тб трафика на месяц), которого достаточно для работы небольшого сайта. Когда пишу инструкции (так было и с этой), все конфигурации проверяю на VPS этого тарифа.
Beget.com — недорогой хостинг, про который нельзя ничего сказать ни плохого, ни хорошего. Он просто работает. Удобен для проектов «на вырост»: можно взять VPS на базовом тарифе и со временем менять характеристики в сторону увеличения без переустановки ПО.
Smartape.ru — сервис с не самыми дешёвыми тарифами, зато каналом связи в 200 Мбит и своим ЦОД для серверов. Можно у них же купить доменное имя (.ru за 195 рублей в год), а также приобрести FTP-хранилище для хранения бекапов (20.00 рублей за месяц за 10 Гб). За более чем 5 лет работы со Смартэйпом у меня накопилось достаточно негатива к этому сервису (по объективным причинам), поэтому горячо рекомендовать не могу, но как вариант — ну, пойдет.
DigitalOcean — всемирно известный зарубежный хостинг. У меня на нём постоянно какой-нибудь сервер да запущен. К сожалению, новым VPS в 9 из 10 случаев попадаются заблокированные в РФ IP, меняются лишь пересозданием сервера с нуля — учтите этот момент.
Scaleway — французский сервис, один из самых недорогих. За много лет использования у меня нет претензий к качеству сервиса, но в интернете много плохих отзывов. Почему так — не знаю.
На всех вышеуказанных хостингах можно создать виртуальный сервер с 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:
Всё! Можно входить в админку, открывать сайт — всё будет работать!
Обратите внимание — для доступа к административной части /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 нужно привести страницу плагина в такой вид:
Этого должно быть достаточно, чтобы сайт даже на самой дешёвой VPS выдерживал тысячи посетителей в минуту, так как вместо ресурсоёмких запросов к WordPress вебсервер Nginx будет подставлять зашедшим сохранённые в кэше статичные страницы.
Конечно, это далеко не всё, что можно выжать из сервера. Желательно настроить PHP-FPM на работу через сокеты, подкрутить настройки MySQL, но для базовой установки уже неплохо. С помощью Webinoly удалось избежать возни с созданием базы данных, что существенно сэкономило время, и настроить кэширование, чтобы сайт радовал стабильной работой при высокой посещаемости.
10 Резюме
Webinoly — достаточно простой инструмент, автоматизирующий администрирование VPS или VDS. В нём нет «защиты от дурака», поэтому внимательно читайте мануалы перед тем, как что-то делать.
А как вы управляете своим сервером (если он у вас есть)?