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

Запустится 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.

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

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

Нужен чистый сервер под 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.

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

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

Шаг 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.

Отметьте 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 — логин и пароль первого администратора, пароль генерируется сам.

Нажмите 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.

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

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