Метапакеты в Linux: свой deb для стека WordPress

Метапакет в Debian/Ubuntu – это deb почти без своих файлов: в Depends перечислены нужные пакеты, а при установке apt подтягивает весь набор. Так устроены tasksel-пакеты и многие «сборки» в репозиториях. Ниже: зачем это нужно и как собрать свой метапакет под стек WordPress (Nginx + PHP + MySQL/MariaDB).

Что такое метапакет

Обычный пакет несёт бинарники, конфиги, man-страницы. Метапакет в первую очередь описывает зависимости. При установке apt/dpkg не «магически разворачивает WordPress», а ставит перечисленные пакеты так же, как при apt install nginx php-fpm .... Плюс – один воспроизводимый артефакт: одна команда, один список зависимостей, удобно для своего репозитория и golden image.

Зачем это используют

  • Одна команда вместо десятка – одинаковый набор на нескольких серверах;
  • Явный список стека – зависимости версионируются вместе с пакетом;
  • Обновления – новый метапакет может подтянуть другие версии компонентов через Depends/Recommends.

Метапакет не заменяет Ansible или скрипты: конфиги Nginx, БД и сам WordPress всё равно настраиваются отдельно. Он закрывает только слой «какие deb нужны системе».

Собираем метапакет под WordPress-стек

Пример для Debian/Ubuntu: Nginx, сервер БД, PHP-FPM и модуль MySQL. Имена пакетов уточняйте под релиз (mysql-server vs mariadb-server, конкретная ветка php-fpm).

1. Структура каталога

У deb-пакета control-файл лежит в DEBIAN/control:

mkdir -p wordpress-meta/DEBIAN
cd wordpress-meta

2. Файл control

cat > DEBIAN/control << 'EOF'
Package: wordpress-meta
Version: 1.0
Section: web
Priority: optional
Architecture: all
Depends: nginx, mysql-server, php-fpm, php-mysql
Maintainer: Your Name 
Description: Meta package for WordPress stack dependencies
 Pulls in nginx, database server and PHP needed for a typical WP install.
EOF

Architecture: all – пакет не содержит машинного кода. В Depends можно указать версии: nginx (>= 1.18), если это важно.

3. Сборка .deb

cd ..
dpkg-deb --build wordpress-meta

Появится wordpress-meta.deb.

4. Установка

dpkg -i сам зависимости из репозиториев не дотягивает. Надёжнее через apt:

sudo apt update
sudo apt install ./wordpress-meta.deb

Либо dpkg -i и затем apt -f install, чтобы закрыть незакрытые Depends. Проверка, что ключевые пакеты на месте:

dpkg -l nginx mysql-server php-fpm php-mysql
# или
dpkg -l | grep -E 'nginx|mysql-server|^ii  php'

После метапакета: развёртывание WordPress

Метапакет поставил стек. Дальше – сам сайт: файлы, vhost, БД.

Скачать и положить файлы

wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
sudo mv wordpress /var/www/html/
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo find /var/www/html/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/html/wordpress -type f -exec chmod 644 {} \;

Конфиг Nginx

sudo nano /etc/nginx/sites-available/wordpress

Минимальный server-блок (путь к сокету PHP подставьте свой, например php8.3-fpm.sock):

server {
    listen 80;
    server_name your_domain_or_IP;

    root /var/www/html/wordpress;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Включить сайт и перезагрузить Nginx:

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

База данных

В консоли MySQL/MariaDB (пароль root/sudo по политике вашей системы):

CREATE DATABASE wordpress;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;

Дальше веб-мастер: откройте http://your_domain_or_IP, укажите БД, логин и пароль. При необходимости скопируйте wp-config-sample.php в wp-config.php и пропишите доступ вручную.

На что обратить внимание

  • имена пакетов зависят от дистрибутива: на Ubuntu 24.04 чаще MariaDB и php8.x;
  • метапакет не настраивает firewall, SSL и бэкапы;
  • для продакшена удобнее свой apt-репозиторий или Ansible, а .deb-метапакет – как «контракт» на стек.

Кратко

Метапакет – deb с зависимостями, а не с кодом приложения. Соберите DEBIAN/control, соберите через dpkg-deb, поставьте через apt install ./....deb, затем отдельно разложите WordPress, Nginx и БД. Один артефакт фиксирует «какой софт нужен серверу», а конфигурация остаётся под ваш сценарий.

Источники и ссылки


Комментарии загружаются…