MAATRIX / Блог / Ampache на Ubuntu 24.04: пошаговая установка

Ampache на Ubuntu 24.04: пошаговая установка

MAATRIX

Ampache — один из самых старых self-hosted музыкальных серверов, живёт с 2001 года, и именно поэтому у него нет проблем, знакомых более молодым конкурентам: он умеет отдавать музыку через Subsonic API, DAAP, WebDAV, UPnP/DLNA и собственный веб-плеер одновременно, поддерживает подкасты, аудиокниги, видео и плейлисты по правилам (smart playlists). Если вам нужен не просто плеер в браузере, а сервер, к которому подключится десяток разных приложений на телефоне, ТВ и в машине — Ampache закрывает этот вопрос. Ниже — установка с нуля на чистой Ubuntu 24.04: LEMP-стек, база данных, веб-установщик и настройка транскодирования.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что понадобится и почему именно так

Ampache написан на PHP и требует базу данных (MySQL или MariaDB), веб-сервер и, отдельно, ffmpeg для транскодирования — без него сервер будет отдавать файлы только в исходном формате, а часть клиентов (особенно мобильные с ограниченным трафиком) этого не умеют или не хотят.

Минимальные требования по железу скромные: 1 vCPU и 1 ГБ RAM вытянут библиотеку на несколько тысяч треков без транскодирования. Как только вы включаете транскодирование на лету для нескольких одновременных слушателей — каждый активный поток съедает заметную долю CPU, потому что ffmpeg перекодирует аудио в реальном времени. Для семьи из 3-4 человек с параллельным прослушиванием комфортнее закладывать 2 vCPU и 2-4 ГБ RAM, плюс дисковое пространство под саму библиотеку — она обычно в разы больше, чем занимает сама СУБД и код.

Мы будем ставить:

  • Ubuntu 24.04 LTS в качестве ОС;
  • Nginx как веб-сервер;
  • PHP-FPM 8.3 (штатная версия в репозиториях 24.04);
  • MariaDB как СУБД;
  • ffmpeg для транскодирования.

Если у вас ещё нет сервера под задачу — берите конфигурацию с 2 ядрами и 2-4 ГБ памяти на старте, диск наращивать по мере роста библиотеки проще, чем ошибиться с CPU для транскодирования.

Установка LEMP-стека

Обновляем систему и ставим Nginx, MariaDB и PHP с нужными модулями. Ampache активно использует расширения для работы с изображениями (обложки), XML/JSON (API) и мультибайтовыми строками (метаданные треков на разных языках).

sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx mariadb-server \
  php8.3-fpm php8.3-mysql php8.3-curl php8.3-mbstring \
  php8.3-xml php8.3-gd php8.3-zip php8.3-intl \
  php8.3-bcmath php8.3-cli unzip curl ffmpeg

Проверяем, что PHP-FPM и MariaDB поднялись и добавлены в автозагрузку:

sudo systemctl enable --now php8.3-fpm mariadb nginx
sudo systemctl status php8.3-fpm --no-pager

Убедитесь, что ffmpeg действительно установился и виден системе — от этого зависит транскодирование:

ffmpeg -version | head -1

Если бинарник не найден или собран без нужных кодеков, транскодирование в Ampache просто не заработает, а логи будут показывать таймауты при попытке проиграть файл в неподдерживаемом клиентом формате.

Подробный разбор самой связки веб-сервер + PHP-FPM с нуля (если хотите разобраться в деталях конфигурации) есть в статье про Nginx как reverse proxy — Ampache использует ту же логику проксирования запросов на PHP-FPM через unix-сокет.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

База данных MariaDB

Запускаем базовую защиту установки — убираем анонимных пользователей, тестовую базу, запрещаем удалённый root-доступ:

sudo mysql_secure_installation

Дальше создаём отдельную базу и пользователя специально для Ampache — не используйте root для работы приложения:

sudo mysql -u root -p
CREATE DATABASE ampache CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'ampache'@'localhost' IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ_СЮДА';
GRANT ALL PRIVILEGES ON ampache.* TO 'ampache'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Кодировка utf8mb4 важна: без неё названия треков и исполнителей с эмодзи, иероглифами или редкими символами будут либо обрезаться, либо падать с ошибкой при импорте библиотеки. Если планируете выносить MariaDB на отдельный сервер или тонко настраивать её под нагрузку — в статье про установку MariaDB на Ubuntu 24.04 разобраны параметры производительности отдельно.

Установка Ampache и настройка Nginx

Ampache распространяется как релизный архив на GitHub, в который уже упакованы все зависимости (composer-пакеты) — клонировать репозиторий напрямую не стоит, вы получите код без vendor-каталога и без сборки. Берём последний стабильный релиз через GitHub API, чтобы не привязываться к конкретному номеру версии, который к моменту чтения статьи уже устареет:

cd /tmp
DOWNLOAD_URL=$(curl -s https://api.github.com/repos/ampache/ampache/releases/latest \
  | grep "browser_download_url.*zip" | cut -d '"' -f 4)
curl -L -o ampache.zip "$DOWNLOAD_URL"
unzip -q ampache.zip -d ampache
sudo mkdir -p /var/www/ampache
sudo cp -r ampache/*/. /var/www/ampache/

Проверьте структуру каталога — начиная с 6-й ветки Ampache точкой входа служит подкаталог public/, в более старых сборках index.php лежит прямо в корне:

ls /var/www/ampache

Если видите папку public с index.php внутри — корнем сайта в Nginx укажите именно её. Если index.php лежит прямо в /var/www/ampache — используйте этот путь как есть. Дальше настраиваем права: веб-сервер должен иметь возможность писать в config/ (при первом запуске туда сохранится файл конфигурации) и в каталог с кэшем изображений:

sudo chown -R www-data:www-data /var/www/ampache
sudo find /var/www/ampache -type d -exec chmod 755 {} \;
sudo find /var/www/ampache -type f -exec chmod 644 {} \;

Теперь настраиваем Nginx. Создаём отдельный конфиг для сайта. Ниже — вариант с корнем в public/; если у вашей версии его нет, просто уберите /public из пути root.

server {
    listen 80;
    server_name music.example.com;

    root /var/www/ampache/public;
    index index.php;

    client_max_body_size 200M;

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

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

    location ~ /\.(?!well-known) {
        deny all;
    }
}

Значение client_max_body_size 200M нужно, если планируете загружать треки и обложки через веб-интерфейс, а не только сканированием файловой системы. fastcgi_read_timeout 300 подстраховывает на случай долгого сканирования большой библиотеки.

Активируем конфиг и проверяем синтаксис перед перезапуском:

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

Веб-установщик и первичная настройка

Открываем в браузере адрес сервера (http://music.example.com/ или http://IP-адрес/) — Ampache запустит пошаговый мастер установки. Он проверит версию PHP, наличие расширений, права на запись в config/ и попросит данные подключения к базе — те, что вы создали на шаге с MariaDB (хост localhost, имя базы ampache, пользователь ampache).

После успешного подключения мастер создаст таблицы и предложит завести первого администратора — учётную запись с полным доступом к настройкам, каталогам и пользователям. По завершении мастер сохранит ampache.cfg.php в каталог config/ — тот самый, на который мы давали права записи www-data.

Дальше в панели администратора (Admin → Configuration) есть несколько настроек, на которые стоит сразу обратить внимание:

  • transcode_cmd — путь к ffmpeg, обычно определяется автоматически (/usr/bin/ffmpeg), но стоит проверить;
  • encode_target — формат, в который транскодируются файлы для веб-плеера (обычно mp3 или opus);
  • catalog_check_permissions — включите, если хотите, чтобы Ampache уважал права доступа файловой системы при сканировании.

Каталог с музыкой и транскодирование

Каталог (Catalog) в Ampache — это привязка папки на диске к библиотеке. Создайте директорию под музыку и передайте права веб-серверу на чтение:

sudo mkdir -p /srv/music
sudo chown -R www-data:www-data /srv/music

Если музыка уже лежит на другом сервере или в сетевом хранилище, смонтируйте её через NFS или SMB и укажите точку монтирования — Ampache сканирует обычную файловую систему, ему всё равно, локальный это диск или сетевой том.

В админке идём в Admin → Catalogs → Add a New Catalog, выбираем тип local, указываем путь /srv/music и запускаем Add to catalog. Первое сканирование большой библиотеки (десятки тысяч файлов) может занять от нескольких минут до часа — зависит от скорости диска и объёма метаданных, точных цифр по вашей библиотеке заранее не скажет никто, ориентируйтесь на прогресс-бар в интерфейсе.

Транскодирование включается автоматически, когда клиент запрашивает формат, отличный от исходного, или когда битрейт исходника выше заданного лимита для потока. Настроить лимиты можно per-user в Admin → Users → [пользователь] → Preferences → Streaming — полезно, если часть слушателей в мобильной сети и им нужен принудительно более низкий битрейт.

Проверить, что транскодирование действительно работает, проще всего через Subsonic-совместимое приложение (Substreamer, DSub, Ultrasonic) — Ampache реализует Subsonic API «из коробки», и большинство таких клиентов подключаются без дополнительной настройки, достаточно указать адрес сервера, логин и пароль.

SSL и firewall

Mobile-клиенты по Subsonic API в большинстве своём требуют HTTPS — без него часть приложений просто откажется сохранять сервер или будет ругаться на подключение. Получить сертификат Let's Encrypt для домена, который вы уже привязали к серверу — отдельная и хорошо отработанная задача, шаги подробно разобраны в статье про установку Let's Encrypt SSL.

После выпуска сертификата не забудьте открыть только нужные порты в firewall и закрыть всё остальное — как это сделать через UFW, описано в статье про настройку UFW на Ubuntu 24.04:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Если Ampache стоит на выделенном сервере без других сервисов, этого достаточно. Если рядом крутится что-то ещё (например, тот же MariaDB слушает извне) — проверьте, что порт 3306 не торчит наружу без необходимости: по умолчанию MariaDB и так слушает только 127.0.0.1, но не будет лишним свериться с bind-address в /etc/mysql/mariadb.conf.d/50-server.cnf.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Чем Ampache отличается от Navidrome?

Ampache старше, тяжелее по требованиям к ресурсам, но заметно богаче по протоколам — DAAP, WebDAV, UPnP/DLNA, подкасты и умные плейлисты идут «из коробки». Navidrome легче и быстрее в развёртывании, но урезан по функциям в бесплатной версии. Если нужен максимум совместимости с разными клиентами и приложениями — Ampache вариант надёжнее; сравнение по железу и сценариям использования есть в статье про установку Navidrome.

Можно ли обойтись без транскодирования?

Да, если все ваши клиенты поддерживают исходный формат файлов и вы не ограничены по трафику на мобильных устройствах. В этом случае ffmpeg можно не задействовать, но лучше держать его установленным на будущее — включить транскодирование потом можно без переустановки.

Ampache подходит для видео и подкастов, а не только музыки?

Да, в каталогах можно указать тип video или podcast, интерфейс и API поддерживают оба сценария наравне с музыкальными библиотеками, хотя основной фокус проекта исторически именно на аудио.

Как обновить Ampache на новую версию?

Скачайте новый релизный архив, сохраните текущий config/ampache.cfg.php, замените файлы приложения (кроме config и upload-директорий), верните конфиг на место и откройте веб-интерфейс — Ampache сам предложит применить миграции базы данных, если они нужны в новой версии.

Нужен ли отдельный сервер под большую библиотеку?

Для библиотек до 50-100 тысяч треков хватает одного VPS с 2-4 ГБ RAM, если параллельных потоков с транскодированием немного (2-3). При росте числа одновременных слушателей с активным транскодированием узким местом почти всегда становится CPU, а не диск или память — в этом случае имеет смысл рассмотреть более производительный тариф.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →