Top.Mail.Ru

Virtualmin на VPS: установка и первый сайт

3
Virtualmin на VPS: установка и первый сайт

Virtualmin — бесплатная панель для VPS: сайты, базы, сертификаты и бэкапы настраиваются из браузера. Ниже — установка Virtualmin на VPS UFO.Hosting от чистой системы до первого сайта на WordPress. Если вы ещё выбираете панель, начните с обзора «Какую панель выбрать».

Порядок такой: берёте чистый VPS на Ubuntu 24.04, задаёте имя сервера в виде домена, запускаете официальный скрипт с ключами --bundle LEMP --type mini (у нас он отработал за 3 минуты), входите на https://IP:10000, создаёте виртуальный сервер для домена, выпускаете Let’s Encrypt и ставите WordPress прямо из панели. После установки файрвол другой: UFW исчезает, а порт 10000 открыт всем.

Все шаги мы прошли на тестовом сервере: Ubuntu 24.04, 2 vCPU и 4 ГБ памяти, установщик Virtualmin 8.2.1, панель Virtualmin 8.3.0 GPL и Webmin 2.670. Экраны и вывод настоящие, адреса и пароли в них тестовые.

Что такое Virtualmin и чем он отличается от Webmin

Virtualmin — панель хостинга: для каждого домена она создаёт «виртуальный сервер» со своим пользователем, папкой сайта, базой и сертификатом. Webmin — веб-интерфейс администратора самой системы Linux (пакеты, службы, файрвол). Virtualmin работает как надстройка над Webmin, поэтому ставятся они вместе и открываются по одному адресу.

Редакций две. GPL бесплатна и закрывает типичные задачи: виртуальные серверы, базы, сертификаты Let’s Encrypt, бэкапы, установщики приложений (в GPL их девять, включая WordPress и phpMyAdmin). Pro платная: в меню GPL эти пункты помечены замком, например пакетное создание серверов, шифрование бэкапов, графики нагрузки, реселлерские аккаунты и больше установщиков приложений. Для первого сайта хватает GPL.

Хватит ли памяти на вашем тарифе

Документация Virtualmin делит установку на два вида. Полная (почта, спам-фильтр, антивирус, свой DNS, FTP) требует, по их словам, «около 4 ГиБ». Минимальная (--type mini) всё это убирает. У нас после минимальной установки и одного сайта на WordPress было занято 807 МБ из 3916 МБ. Отдельно: SpamAssassin легко занимает 1 ГБ, ClamAV — от 2 ГБ, а в mini их нет.

Тариф Ресурсы Как ставить
Naos 1 vCore, 1 ГБ, 25 ГБ NVMe Только mini и один небольшой сайт; мы на 1 ГБ не проверяли, запаса почти не будет
Haedus 2 vCore, 2 ГБ Mini, несколько лёгких сайтов
Brachium 2 vCore, 4 ГБ Mini с запасом (наш тестовый размер)

Не хватит памяти — тариф можно сменить: как перейти на другой тариф VPS. Как выбрать сразу — в статье как выбрать подходящий тариф.

Какая ОС подойдёт и два способа установки

Установщик показывает список систем, которые он поддерживает: Debian 12 и 13, Ubuntu 24.04 и 26.04 LTS, а также RHEL, AlmaLinux и Rocky 8-10. Ubuntu 22.04 в этом списке нет. Главное условие: система должна быть чистой. Virtualmin сам ставит веб-сервер, PHP и базу, и заранее установленные nginx или MySQL ему мешают.

Способ А. При заказе Linux VPS на любом тарифе выберите панель Virtualmin в списке (рядом Vesta, Hestia, CyberPanel, ISPmanager): сервер придёт с панелью, переходите к первому входу. Способ Б. Закажите чистую Ubuntu 24.04 и поставьте вручную — дольше, зато сами выбираете состав. Дальше описан он.

Шаг 1. Подготовка: обновления, имя сервера, пароль root

Подключитесь по SSH под root (как подключиться к серверу по SSH) и обновите пакеты.

apt update && apt -y upgrade

На только что созданном сервере система в фоне ставит обновления и держит блокировку пакетного менеджера. Если команда или установщик «висят», подождите несколько минут.

Задайте имя сервера в виде домена (FQDN). Наше имя было hiplet-135110, не домен. Установщик на шаге Configuring SSL for the hostname показал предупреждение, а при создании первого сайта Let’s Encrypt отказал: адрес владельца получился вида user@hiplet-135110.., и центр сертификации счёл его недопустимым. Чтобы не повторять, задайте имя сразу. Подставьте свой домен и IP сервера.

hostnamectl set-hostname panel.example.com
echo "203.0.113.10 panel.example.com panel" >> /etc/hosts
hostname -f

Первая команда задаёт имя, вторая добавляет его в /etc/hosts, чтобы система находила себя без DNS, третья проверяет. Вы должны увидеть одну строку panel.example.com. A-запись panel на IP создаётся так же, как для обычного домена (как прописать DNS для сервера).

Пароль root. В панель входят под root и системным паролем. Если вы подключаетесь к серверу только по ключу и пароля не знаете, задайте его командой passwd. Если вход всё равно не проходит, пароль Webmin можно задать отдельно: /usr/share/webmin/changepass.pl /etc/webmin root НОВЫЙ_ПАРОЛЬ.

Шаг 2. Запустите официальный скрипт установки

Скачиваем установщик с сайта разработчика. Ключи -fsSL заставляют curl молчать и падать на ошибке, а не сохранять страницу ошибки вместо скрипта.

curl -fsSL -o virtualmin-install.sh https://download.virtualmin.com/virtualmin-install.sh
sh virtualmin-install.sh --bundle LEMP --type mini
  • --bundle LEMP — веб-сервер nginx; LAMP — Apache. LAMP берите, если сайту нужен .htaccess: nginx его не читает;
  • --type mini — без локальной почты, спам- и антивирусного фильтра, своего DNS и FTP. Почту мы не настраиваем: исходящий порт 25 на VPS UFO закрыт до проверки аккаунта;
  • полный список ключей покажет sh virtualmin-install.sh --help; там есть, например, --hostname (задать имя при установке) и --swap (размер файла подкачки).

Установщик выведет приветствие со списком поддерживаемых систем и сообщит, сколько места нужно (для mini — до 1 ГиБ) и что будет создан swap размером 3 ГиБ. Swap — файл подкачки на диске, страховка от нехватки памяти, не замена ей. Скрипт спросит Continue? (y/n): ответьте y.

Дальше он идёт по четырём фазам: Check, Setup, Installation, Configuration, и в последней выводит 11 строк вида [1/11] Configuring AWStats. У нас всё заняло около трёх минут. Строка [9/11] Configuring SSL for the hostname завершилась значком предупреждения: это и есть не-FQDN имя из шага 1. В конце вы увидите [SUCCESS] Installation Complete! и адрес панели: https://имя-сервера:10000 или https://IP:10000. SSH-сессию на время установки не закрывайте.

Шаг 3. Войдите в панель и пройдите мастер настройки

Откройте https://IP:10000 (порт 10000 — общий вход в Webmin и Virtualmin). Логин — root, пароль системный. Браузер, скорее всего, предупредит о ненадёжном сертификате: панель стартует с самоподписанным. Шифрование при этом работает, продолжите вручную.

Форма входа Virtualmin: логин root и пароль
Форма входа Virtualmin на порту 10000.

Запустится Post-Installation Wizard. При типе mini в нём всего три экрана: приветствие, выбор баз данных и «All done». На экране Database servers предложат запустить MariaDB (по умолчанию Yes) и PostgreSQL (по умолчанию No). Оставьте так: для сайтов на WordPress нужна только MariaDB. Нажмите Next, затем Finish.

Не выключайте MariaDB. Когда мы пробовали переключатели на этом шаге, ответ No для MariaDB остановил службу базы и выключил её в настройках Virtualmin; сайты на WordPress без неё не заработают. Если нажали по ошибке: systemctl enable --now mariadb и повторите мастер через пункт Re-Run Install Wizard в System Settings, выбрав для MariaDB Yes.

Экран Database servers в мастере Virtualmin: MariaDB Yes, PostgreSQL No
Мастер для mini-установки: MariaDB Yes, PostgreSQL No.

Вы увидите главный экран Virtualmin Virtual Servers и синюю плашку о том, что настройка давно не проверялась. Нажмите Re-check and refresh configuration. Панель пройдёт по списку и в конце напишет .. your system is ready for use by Virtualmin. В списке будут версии: у нас PHP 8.3 (php8.3-fpm), MariaDB 10.11, плагины nginx и AWStats. Оранжевая строка Quotas are not enabled on the filesystem / — не ошибка: это отключённые дисковые квоты по домашним каталогам, для сайта они не нужны.

Главная страница Virtualmin 8.3.0 GPL: список виртуальных серверов пуст
Главный экран: версия 8.3.0 GPL, виртуальных серверов пока нет.

Шаг 4. Создайте первый виртуальный сервер

На главном экране нажмите Add new virtual server, owned by <New user> (или в меню слева Create Virtual Server). Форма:

  • Domain name — домен сайта, например example.com (нет домена — как зарегистрировать домен);
  • Description — подпись для себя, она же станет названием сайта в WordPress;
  • Administration password — пароль владельца сайта, нужен для SFTP;
  • Server configuration template и Account plan — Default Settings и Default Plan достаточно;
  • Administration username — Automatic: имя берётся из домена (у нас one30-49-177-214);
  • Enabled features — четыре галочки: Enable Nginx website, MariaDB database, Webmin login, AWStats reporting. Статистику AWStats на слабом VPS можно снять.
Форма Create Virtual Server с заполненным доменом, описанием и паролем
Create Virtual Server: домен, описание, пароль и четыре компонента.

Нажмите Create Server. Появится журнал: пользователь, виртуальный хост nginx, пул PHP, сертификат, база данных (Creating MariaDB database one30_49_177_214 у нас) и перезапуск служб. Строка Setting up initial SSL certificate .. keeping self-signed certificate означает, что сайт пока открывается с самоподписанным сертификатом. Файлы сайта лежат в /home/ИМЯ/public_html, где ИМЯ — логин владельца.

Журнал создания виртуального сервера Virtualmin
Журнал создания сайта: каждая строка заканчивается «done».

Нужен чистый сервер под Virtualmin? Промокод WIKI15 даёт 15% на заказ VPS в UFO.Hosting.

Шаг 5. Привяжите домен и выпустите Let’s Encrypt

Создайте A-записи example.com и www на IP VPS. Без них сертификат не выпустится: центр проверяет домен запросом на порт 80. Обновление DNS занимает от минут до нескольких часов. Проверка:

dig +short example.com A

Вы должны увидеть IP вашего VPS.

Проверьте контактный адрес владельца. Если имя сервера не домен, как у нас, Virtualmin подставит владельцу нерабочий адрес, и Let’s Encrypt откажет: в разделе SSL Certificate на вкладке SSL Providers в блоке Last failed renewal будет текст The ACME server believes ... is an invalid email address. Лечится в два шага. Откройте Edit Virtual Server, у пункта Contact email переключитесь со значения Administrator's mailbox на второе поле и впишите настоящий адрес на вашем домене, сохраните кнопкой Save Virtual Server.

Форма Edit Virtual Server: поле Contact email с введённым адресом
Edit Virtual Server: контактный адрес вместо подстановки по умолчанию.

Затем откройте в меню виртуального сервера Manage Virtual Server → Setup SSL Certificate (страница называется SSL Certificate), вкладка SSL Providers. Провайдер по умолчанию — Let’s Encrypt. Домен и поддомены www, admin, webmail уже перечислены; Automatically renew certificate переключите на Yes и нажмите Request Certificate.

Вкладка SSL Providers: домены, провайдер Let's Encrypt, автоматическое продление Yes
SSL Providers: домены, Let’s Encrypt, автопродление.

Через несколько секунд панель напишет .. request was successful, затем Configuring webserver to use new certificate and key .. done и перезапустит nginx. Проверьте сайт без пропуска предупреждения: https://ваш-домен должен открыться с замком. У нас сертификат выдан Let’s Encrypt, а команда curl без ключа -k отработала без ошибок. Ошибка проверки почти всегда значит неверную A-запись или закрытый порт 80.

Результат запроса сертификата: request was successful
Сертификат выпущен: все шаги завершены.

Шаг 6. Установите WordPress из панели

В Virtualmin GPL установщик WordPress есть, платная версия для него не нужна. Откройте виртуальный сервер, затем Manage Web Apps, вкладка Available Web Apps. В бесплатной редакции помечены GPL девять приложений: ClassicPress, Matomo, phpMyAdmin, phpPgAdmin, RoundCube, SquirrelMail, Tiki Wiki, WHMCS и WordPress (у нас версия 7.1.2). Остальные закрыты меткой Pro.

Manage Web Apps: список приложений, WordPress 7.1.2 помечен GPL
Manage Web Apps: WordPress доступен в GPL.

Отметьте WordPress и нажмите кнопку установки внизу списка. Откроется форма:

  • Database for WordPress tables — новая база (у нас one30_49_177_214_wordpress), её создаёт Virtualmin;
  • WordPress table prefix — wp_, можно оставить;
  • Install sub-directory under public_html — по умолчанию WordPress уйдёт в подпапку wordpress, и сайт откроется по адресу /wordpress. Чтобы он был главным, выберите At top level;
  • WordPress site name — название сайта, подставляется из описания;
  • Initial login for web app — логин и пароль первого администратора, пароль генерируется сам.
Форма установки WordPress в Virtualmin: база, префикс, каталог, название и логин
Параметры установки WordPress. Пароль закрыт на скриншоте.

Нажмите Install Now. Панель попросит подтвердить: Are you sure you want to install WordPress into the directory /home/ИМЯ/public_html? и предупредит, что там уже лежат четыре файла (заглушка сайта). Нажмите Install Now ещё раз. Дальше панель сама скачает WP-CLI (около 7 МиБ), поставит недостающие модули PHP (у нас ssh2, imagick, zip), перезагрузит PHP-FPM и nginx и напишет: WordPress installation completed. It can be accessed at https://ваш-домен/, логин и пароль администратора. Пароль показан только здесь, сохраните его и смените в админке WordPress.

Журнал установки WordPress: завершено, адрес сайта и логин администратора
Установка завершена. Пароль закрыт на скриншоте.

Откройте сайт: у нас сразу загрузилась главная страница с названием, которое мы вписали в описание, без дополнительного мастера. Админка — https://ваш-домен/wp-admin. Если нужен WordPress без панели, смотрите установку WordPress на сервер, со стеком вручную — LEMP, на другой панели — CyberPanel и WordPress.

Файлы, пользователи, PHP и бэкап

Файлы загружайте по SFTP (передача файлов поверх SSH, порт 22) под владельцем домена: у владельца настроена оболочка /bin/bash, и вход по паролю работал на нашем образе. Клиенты те же, что в статье как загрузить файлы сайта на сервер. FTP при mini не ставится, и это плюс: он шлёт пароль открытым текстом. Есть и встроенные File Manager и Terminal в меню виртуального сервера.

Заводите по виртуальному серверу на каждый независимый сайт: у каждого свой системный пользователь, и взлом одного не открывает файлы другого. Версию PHP смотрите в Web Configuration - PHP Options; на нашем сервере была 8.3. Меняйте, только если плагин требует.

Бэкап: раздел Backup and Restore → Backup Virtual Servers для разовой копии и Scheduled Backups для регулярной. Копия на том же диске не защитит при потере сервера: укажите другой сервер по SSH или внешнее хранилище и раз в месяц пробуйте восстановить на тестовом домене. Шифрование бэкапов в GPL недоступно (пункт Backup Encryption Keys с меткой Pro).

Файрвол: здесь UFW не работает

Главное отличие от обычной Ubuntu: установщик Virtualmin удаляет UFW (после установки ufw status отвечает command not found) и включает собственные правила nftables в таблице webmin_profile_hosting. Политика входящих — drop: всё закрыто, кроме списка. А список широкий. Открыты для всех:

  • TCP: 20, 21, 22, 25, 53, 80, 110, 143, 443, 465, 587, 853, 993, 995, 2222, 20000;
  • TCP: диапазоны 10000-10100 (панель и соседние) и 49152-65535 (динамические порты, например для пассивного FTP);
  • UDP: 53 и 443.

При типе mini на портах почты, FTP и DNS никто не слушает, поэтому они безвредны. Но порт 10000 управляет всем сервером, и его сканируют круглосуточно. Откройте его только со своего IP. Правила видно в самой панели: в Webmin найдите модуль Linux Firewall (nftables), вкладки Chains и Sets; на странице модуля по умолчанию выбрана пустая таблица inet filter, нужную таблицу выберите в списке Selected table.

Страница Linux Firewall в Webmin: выбор таблицы, цепочки, кнопки просмотра ruleset
Модуль Linux Firewall (nftables) в Webmin.

Пускаем на 10000 только себя

Узнайте свой внешний IP (любой сервис «мой IP») и подставьте его вместо 203.0.113.10. Мы проверили эти две команды на сервере.

nft delete element inet webmin_profile_hosting profile_hosting_tcp_ports '{ 10000-10100 }'
nft insert rule inet webmin_profile_hosting input ip saddr 203.0.113.10 tcp dport 10000-10100 accept
  • первая убирает диапазон 10000-10100 из общего списка открытых портов;
  • вторая добавляет правило в начало цепочки input: этот порт открыт только вашему адресу.

Проверка: с вашего адреса панель отвечает, с любого другого соединение молчит до таймаута, сайты на 80 и 443 работают. Такие правила живут только до перезагрузки, поэтому сохраните их в файл, который читает служба nftables при старте. Сначала копия старого файла.

cp /etc/nftables.conf /root/nftables.conf.bak
(echo '#!/usr/sbin/nft -f'; echo 'flush ruleset'; nft list ruleset) > /etc/nftables.conf
nft -c -f /etc/nftables.conf && echo syntax-ok

Вторая строка собирает файл заново: заголовок, команда flush ruleset и текущие правила. Третья проверяет синтаксис и должна ответить syntax-ok. После этого мы перезагрузили сервер и убедились, что правило осталось, а сайт и панель работают.

Если ваш IP сменится, вы потеряете доступ к панели. Вернёте его по SSH одной командой с новым адресом: nft insert rule inet webmin_profile_hosting input ip saddr НОВЫЙ_IP tcp dport 10000-10100 accept (и сохраните файл, как выше). Модуль Webmin и пункт Create Ruleset Profile могут переписать эту таблицу, поэтому после работы с ними проверяйте правила заново. Если не хотите вручную править файл, ходите в панель через SSH-туннель ssh -L 10000:127.0.0.1:10000 root@IP-СЕРВЕРА и откройте у себя https://127.0.0.1:10000, а порт закройте совсем.

Дополнительно: на странице System Settings есть пункт Enroll For Two-Factor для двухфакторного входа, на форме входа для кода есть отдельное поле. Пакет fail2ban на нашем сервере после установки стоял. Обновления панели приходят в уведомлениях на главном экране.

Типичные ошибки

Симптом Причина Что делать
Установщик отказывается или ломается на сервере со старым сайтом Система не чистая: стоят nginx, другая панель или база Переустановите ОС и повторите; на рабочий сервер ставить нельзя
ufw отвечает command not found Установщик удалил UFW и включил nftables Правила — в модуле Linux Firewall или командами nft (см. выше)
Сайт не открывается, WordPress пишет ошибку подключения к базе Служба MariaDB остановлена (например, при ответе No в мастере) systemctl enable --now mariadb
Let’s Encrypt отказал: invalid email address Имя сервера не FQDN, владельцу подставлен нерабочий адрес Впишите настоящий Contact email в Edit Virtual Server и повторите запрос
Порт 10000 не открывается Сменился ваш IP после ограничения порта Добавьте правило с новым адресом по SSH или зайдите через туннель
WordPress открылся по адресу /wordpress При установке оставили подпапку по умолчанию Переустановите с пунктом At top level или перенесите сайт
Процессы пропадают, сервер тормозит Не хватает памяти Проверьте journalctl -k | grep -i 'Out of memory'; возьмите тариф больше

Вопросы и ответы

Virtualmin бесплатный?

Да, редакция GPL бесплатна и закрывает типичные задачи хостинга: виртуальные серверы, базы, сертификаты Let’s Encrypt, бэкапы, девять установщиков приложений, включая WordPress. Платная Pro добавляет графики, пакетные операции, шифрование бэкапов и больше приложений.

Сколько памяти нужно для Virtualmin?

Минимальная установка без почты на нашем тесте заняла около 800 МБ с работающим сайтом на WordPress. Полная с почтой, SpamAssassin и ClamAV требует, по документации, около 4 ГБ. На 1 ГБ мы не проверяли; для WordPress комфортный старт — 2 ГБ.

Можно ли поставить Virtualmin на Ubuntu 22.04?

В списке систем установщика её нет: там Ubuntu 24.04 и 26.04, Debian 12 и 13, семейство RHEL. Для новой установки берите одну из них.

Как открыть панель Virtualmin?

В браузере: https://IP-СЕРВЕРА:10000 или https://имя-хоста:10000. Логин — root. Предупреждение о сертификате при первом входе нормально.

Можно ли поставить Virtualmin на сервер с работающим сайтом?

Нет. Установщик ждёт чистую систему и сам настраивает веб-сервер и базу, поэтому конфликтует с существующими. Создайте новый VPS, перенесите сайт и переключите домен.

Готовы попробовать? Закажите VPS с Virtualmin или чистой Ubuntu на ufo.hosting, а если сомневаетесь в тарифе, начните со статьи как выбрать подходящий тариф.

Похожее

Все статьи
Четыре консоли панелей управления на площадках, одна подсвечена мятным лучом

Какую панель управления выбрать для VPS: Hestia, CyberPanel, Virtualmin, Vesta или ISPmanager

В форме заказа Linux VPS в UFO.Hosting есть список панелей управления: Vesta, Hestia, CyberPanel, Virtualmin и ISPmanager. Все пять доступны на каждом тарифе Linux, на Windows панелей нет. Выбор кажется мелочью, но поменять панель потом можно только переустановкой системы. Ниже…

Панель управления CyberPanel и сайт на WordPress со значком скорости и замком

CyberPanel на VPS: установка и WordPress на OpenLiteSpeed

CyberPanel ставится одной официальной командой на чистую Ubuntu 24.04 или 22.04: у нас на 2 vCPU и 4 ГБ установка заняла 8 минут. Сайт создаётся в два клика, сертификат Let’s Encrypt панель выпускает сама. Установка WordPress «в один клик» в…