Void Linux обрабатывает сервисы иначе, чем большинство дистрибутивов. Здесь нет никакой systemd. Runit управляет всем, а менеджер пакетов (xbps) быстрый и минимальный. Настройка стека LAMP на Void занимает около 10 минут

В этом руководстве рассказывается об установке Apache, MariaDB и PHP на Void Linux. Мы также рассмотрим два практических сценария: развертывание приложения PHP с подключением MariaDB и размещение простого сайта HTML/PHP с виртуальными хостами.

Предварительные условия

  • Сервер под управлением Void Linux.
  • Привилегии пользователя: пользователь root или не root с привилегиями sudo.

Конвенции

1
2
# - данные команды должны выполняться с правами root либо непосредственно от имени пользователя root, либо с помощью команды sudo.
$ - данные команды должны выполняться от имени обычного пользователя.

Обновите систему

Свежая установка Void Linux требует обновления пакетов до последних доступных версий.

1
sudo xbps-install -u xbps

После того, как xbps включен, запустите полное обновление системы.

1
sudo xbps-install -Syu

Система может нуждаться в перезагрузке после обновления.

1
sudo reboot -f

Установите Apache Web Server

Стек LAMP является ярлыком для Linux, Apache, MySQL и PHP и очень важен для создания веб-приложений. Первым стеком LAMP будет веб-сервер Apache. Чтобы установить веб-сервер Apache, выполните следующую команду:

1
sudo xbps-install apache

Подтвердите установленную версию:

1
apachectl -v

На выходе должна быть показана версия 2.4.65 или новее:

1
2
Server version: Apache/2.4.65 (Unix)
Server built:   Oct 15 2025 23:25:32

Void Linux использует runit вместо systemd. Чтобы включить услугу, вы создаёте симлинк из /etc/sv/ в /var/service/. Это позволяет сервису загружаться и сразу же запускать его.

1
sudo ln -s /etc/sv/apache /var/service/apache

Дайте ему пару секунд, затем убедитесь, что Apache работает:

1
sudo sv status apache

На выходе должна отображаться услуга с PID и временем безотказной работы:

1
run: apache: (pid 751) 5s; run: log: (pid 750) 5s

Корень документа Apache по умолчанию на Void Linux - это /srv/www/apache, а не /var/www/html, как на Debian или RHEL. Основной конфигурационный файл находится по адресу /etc/apache/httpd.conf.

Установите MariaDB

Следующим в стеке LAMP будет служба баз данных MariaDB. Чтобы установить его, выполните команду ниже:

1
sudo xbps-install mariadb

Включите и запустите службу MariaDB через runit:

1
sudo ln -s /etc/sv/mysqld /var/service/mysqld

Подождите несколько секунд для инициализации MariaDB, а затем проверьте его статус:

1
sudo sv status mysqld

Здоровый сервис выглядит так:

1
run: mysqld: (pid 741) 40s; run: log: (pid 740) 40s

Далее, запустите интерактивный скрипт безопасности, чтобы установить root пароль, удалить анонимных пользователей и удалить тестовую базу данных MariaDB:

1
sudo mariadb-secure-installation

После выполнения команды, вы должны выполнить следующие шаги, чтобы обеспечить установку MariaDB:

1
2
3
4
5
6
7
8
9
Enter current password for root (enter for none): [Enter]
Switch to unix_socket authentication [Y/n]: Y
Change the root password? [Y/n]: Y
New password: MariaDBRootPassword
Re-enter new password: MariaDBRootPassword
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

Убедитесь, что вы можете войти с новым паролем:

1
mariadb -u root -p -e "SELECT VERSION();"

Результат подтверждает MariaDB 11.1.2:

1
2
3
4
5
+------------------------+
| VERSION()              |
+------------------------+
| 11.1.2-MariaDB-debug   |
+------------------------+

Установите PHP вместе с модулем Apache

И последним из стека LAMP будет PHP, а также его расширения. Чтобы установить PHP с расширениями, выполните следующую команду:

1
sudo xbps-install php-apache php-mysql

Это включает в себя php8.4, php8.4-apache и php8.4-mysql (включая драйверы mysqli и PDO MySQL).

После установки проверьте установку с помощью следующей команды:

1
2
3
4
$ php -v
PHP 8.4.7 (cli) (built: Mar 25 2026 10:12:57) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.7, Copyright (c) Zend Technologies

Настройка Apache для использования PHP

Откройте файл конфигурации Apache:

1
sudo nano /etc/apache/httpd.conf

Найдите линии модулей MPM (около линии 66) и внесите следующие изменения:

1
2
3
4
5
# Comment out event MPM (not compatible with mod_php)
#LoadModule mpm_event_module /usr/libexec/httpd/mod_mpm_event.so

# Uncomment prefork MPM
LoadModule mpm_prefork_module /usr/libexec/httpd/mod_mpm_prefork.so

Затем прокрутите внизу файла и добавьте конфигурацию модуля PHP:

1
2
LoadModule php_module /usr/libexec/httpd/modules/libphp.so
Include /etc/apache/extra/php_module.conf

libphp.so автоматически указывает на активную версию PHP (в настоящее время libphp8.4.so), поэтому вам не нужно будет обновлять эту строку при обновлении PHP.

Проверьте конфигурацию для синтаксических ошибок:

1
httpd -t

Если все правильно, вы увидите:

1
Syntax OK

Перезагрузите Apache для загрузки модуля PHP:

1
sudo sv restart apache

Включить расширения PHP

Расширение MySQL установлено, но не включено автоматически. PHP на Void считывает дополнительные файлы конфигурации из /etc/php8.4/conf.d/. Создайте этот каталог и включите расширения:

1
sudo mkdir -p /etc/php8.4/conf.d

Включите расширения MySQLi и PDO MySQL:

1
2
echo "extension=mysqli.so" | sudo tee /etc/php8.4/conf.d/mysqli.ini
echo "extension=pdo_mysql.so" | sudo tee /etc/php8.4/conf.d/pdo_mysql.ini

Проверьте, загружаются ли расширения:

1
php -m | grep -i mysql

Все три модуля, связанные с MySQL:

1
2
3
mysqli
mysqlnd
pdo_mysql

Перезагрузите Apache еще раз, чтобы получить новые расширения:

1
sudo sv restart apache

Создание базы данных и пользователя

Стек LAMP сам по себе мало что даёт. Вот как подключить PHP к MariaDB с помощью рабочего примера. Во-первых, создать базу данных и пользователя для приложения и назначить правильные разрешения:

1
mariadb -u root -p

Запустите эти SQL-высказывания внутри оболочки MariaDB:

1
2
3
4
5
CREATE DATABASE app_db;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'YourStrongPasswordHere';
GRANT ALL PRIVILEGES ON app_db.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Замените YourStrongPassword сильным, уникальным паролем.

Теперь создайте файл PHP, который подключается к MariaDB, создаёт таблицу, вставляет строку и читает её обратно:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
sudo tee /srv/www/apache/app.php > /dev/null <<'EOF'
<?php
$conn = new mysqli("localhost", "appuser", "YourStrongPasswordHere", "app_db");
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Create table
$conn->query("CREATE TABLE IF NOT EXISTS messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    content VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)");

// Insert a test record
$conn->query("INSERT INTO messages (content) VALUES ('Hello from PHP 8.4 on Void Linux')");

// Read back
$result = $conn->query("SELECT * FROM messages ORDER BY id DESC LIMIT 5");
echo "<h2>Messages from MariaDB</h2>";
echo "<table border='1'><tr><th>ID</th><th>Message</th><th>Created</th></tr>";
while ($row = $result->fetch_assoc()) {
    echo "<tr><td>{$row['id']}</td><td>{$row['content']}</td><td>{$row['created_at']}</td></tr>";
}
echo "</table>";
echo "<p>PHP " . phpversion() . " | MariaDB " . $conn->server_info . "</p>";
$conn->close();
?>
EOF

Посетите http://your-server-ip/app.php в своём браузере. Вы должны увидеть таблицу с тестовым сообщением, подтверждающим, что PHP может читать и писать на MariaDB. Каждое обновление страницы добавляет еще один ряд.

Виртуальные хосты Apache

Для размещения нескольких сайтов на одном сервере Void Linux требуются виртуальные хосты Apache. Откройте основной файл конфигурации:

1
sudo nano /etc/apache/httpd.conf

Найдите и откомментируйте эту строку, чтобы включить виртуальную конфигурацию хоста:

1
Include /etc/apache/extra/httpd-vhosts.conf

Теперь отредактируйте файл виртуальных хостов:

1
sudo nano /etc/apache/extra/httpd-vhosts.conf

Замените конфигурацией вашего сайта:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<VirtualHost *:80>
    ServerName site1.example.com
    DocumentRoot "/srv/www/site1"
    <Directory "/srv/www/site1">
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog "/var/log/httpd/site1-error.log"
    CustomLog "/var/log/httpd/site1-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.example.com
    DocumentRoot "/srv/www/site2"
    <Directory "/srv/www/site2">
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog "/var/log/httpd/site2-error.log"
    CustomLog "/var/log/httpd/site2-access.log" common
</VirtualHost>

Создайте документ root и каталог журнала:

1
sudo mkdir -p /srv/www/site1 /srv/www/site2 /var/log/httpd

Добавьте тестовую страницу для каждого сайта:

1
2
echo "<h1>Site 1 on Void Linux</h1>" | sudo tee /srv/www/site1/index.html
echo "<h1>Site 2 on Void Linux</h1>" | sudo tee /srv/www/site2/index.html

Проверьте конфигурацию и перезапустите Apache:

1
sudo httpd -t && sudo sv restart apache

Каждый сайт теперь отвечает на своё собственное имя хоста на порту 80. Направьте свои записи DNS (или локальный файл /etc/hosts) на IP-адрес сервера и проверьте оба сайта самостоятельно.

Установите дополнительные расширения PHP

Для большинства приложений PHP требуется больше, чем базовая установка. Void предоставляет солидный набор расширений через свои репозитории. Установите наиболее часто необходимые:

1
sudo xbps-install php-gd php-intl php-sqlite

После установки каждому расширению требуется активировать файл *.ini в каталоге conf.d:

1
2
3
4
echo "extension=gd.so" | sudo tee /etc/php8.4/conf.d/gd.ini
echo "extension=intl.so" | sudo tee /etc/php8.4/conf.d/intl.ini
echo "extension=sqlite3.so" | sudo tee /etc/php8.4/conf.d/sqlite3.ini
echo "extension=pdo_sqlite.so" | sudo tee /etc/php8.4/conf.d/pdo_sqlite.ini

Перезапустите Apache и подтвердите полный список модулей:

1
2
sudo sv restart apache
php -m | sort

Вы должны увидеть 34+ загруженных модулей, включая gd, intl, mysqli, pdo_mysql, sqlite3 и pdo_sqlite.

Другие доступные расширения, которые вы можете установить таким же образом, включают: php-redis, php-ldap, php-pgsql, php-sodium, php-tidy и php-xsl. Запустите xbps-query -Rs php- чтобы увидеть полный список.

Если вы приходите из systemd дистрибутивов, управление сервисами runit требует привыкания.

Одно ключевое отличие: runit запускает услугу в тот момент, когда вы связываете её с /var/service/. Не существует отдельного шага «enable» и «start». Удаление symlink останавливает и отключает сервис.

Завершение

Если вам понравился этот пост о том, как установить стек LAMP на Void Linux, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.