MAATRIX / Блог / Ampache в Docker Compose: готовый файл

Ampache в Docker Compose: готовый файл

MAATRIX

Если Navidrome кажется слишком минималистичным, а хочется полного набора протоколов — Subsonic API для мобильных клиентов, DAAP для iTunes, UPnP/DLNA для телевизора и WebDAV для прямого доступа к файлам — Ampache закрывает все эти сценарии одним сервером. Это один из старейших живых self-hosted музыкальных проектов, который тянется ещё с середины 2000-х и за это время оброс поддержкой практически всего, что придумали для стриминга своей коллекции. Ниже — рабочий docker-compose.yml и разбор нюансов, которые не всегда очевидны из официальной документации.

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

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

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

Что такое Ampache и когда он лучше Navidrome или Airsonic

Ampache — открытый PHP-проект, который живёт с 2001 года и с тех пор пережил несколько волн переписывания. В отличие от Navidrome (Go, только Subsonic API) или Airsonic-Advanced (Java, Subsonic + подкасты), Ampache делает ставку на максимальную широту протоколов на одном движке:

  • Subsonic/OpenSubsonic API — совместимость с теми же мобильными клиентами, что и у Navidrome/Airsonic (DSub, Substreamer, Symfonium, play:Sub).
  • Собственный Ampache API (XML/JSON) — используется родными веб-плеерами и некоторыми специализированными клиентами.
  • DAAP — можно подключить библиотеку прямо в iTunes/Music на macOS как расшаренную медиатеку в локальной сети.
  • UPnP/DLNA — раздача на телевизоры и медиаплееры без промежуточного приложения.
  • WebDAV — прямой файловый доступ к каталогу, удобно для синхронизации без стриминга.
  • Встроенные подкасты и веб-радио (добавление внешних потоков как каталога).
  • Поддержка не только музыки, но и аудиокниг, видео, живых записей (live streams) отдельными типами каталогов.

Плата за эту широту — более тяжёлый стек: PHP + веб-сервер + отдельная база MySQL/MariaDB, в отличие от однобинарного Navidrome со встроенным SQLite. Разворачивать и обновлять Ampache чуть сложнее, а первичная настройка идёт через классический веб-установщик, а не через переменные окружения. Если нужен только Subsonic-стриминг без изысков — Navidrome поднимется быстрее и с меньшим оверхедом. Если же вы хотите DAAP для Apple-экосистемы, DLNA для телевизора или держите в одном месте музыку, подкасты и аудиокниги — Ampache оправдывает дополнительную сложность.

Требования к серверу

PHP-стек с отдельной базой данных требовательнее, чем однобинарные альтернативы, но всё ещё комфортно живёт на бюджетном VPS для домашнего использования.

СценарийCPURAMДиск
1-2 пользователя, без транскодирования1-2 vCPU1.5-2 ГБместо под коллекцию
Семья, периодическое транскодирование, DLNA2 vCPU2-3 ГБместо под коллекцию + запас
Публичный сервер, несколько протоколов и потоков одновременно4 vCPU4 ГБSSD/NVMe, отдельный том под MySQL

Отдельно стоит закладывать память под саму базу данных — MariaDB в контейнере рядом с Ampache добавляет ещё 200-400 МБ базового потребления даже без активной нагрузки. Это ориентир, а не результат замеров на конкретном железе — цифры на вашем сервере будут отличаться в зависимости от размера коллекции и числа одновременных клиентов. Диск под музыку — отдельный вопрос: коллекция на несколько тысяч альбомов в FLAC легко занимает сотни гигабайт, поэтому разумно держать её на расширяемом блочном томе.

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

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

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

Docker и подготовка каталогов

Если Docker ещё не установлен на Ubuntu 24.04:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

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

mkdir -p /opt/ampache/{music,config,generated,local_metadata,search,channel,play,upload,tmp}
mkdir -p /opt/ampache/db

В /opt/ampache/music заливается коллекция — через rsync, scp или rclone, если музыка синхронизируется из облака. Ampache, как и большинство подобных серверов, разбирает метаданные из тегов файлов, но предсказуемая раскладка Артист/Альбом/01 - Трек.flac упрощает жизнь при первом сканировании и снижает число треков, которые придётся донастраивать вручную.

Готовый docker-compose.yml

Ampache требует внешнюю базу данных — в связке с ним обычно ставят MariaDB как более лёгкую и совместимую замену MySQL. Вот рабочий стек из двух сервисов:

services:
  db:
    image: mariadb:11
    container_name: ampache-db
    restart: unless-stopped
    environment:
      MARIADB_DATABASE: ampache
      MARIADB_USER: ampache
      MARIADB_PASSWORD: "смените_этот_пароль"
      MARIADB_RANDOM_ROOT_PASSWORD: "yes"
    volumes:
      - ./db:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5

  ampache:
    image: ampache/ampache:latest
    container_name: ampache
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "8080:80"
    environment:
      TZ: "Europe/Moscow"
    volumes:
      - ./music:/var/www/html/music
      - ./config:/var/www/html/config
      - ./generated:/var/www/html/generated
      - ./local_metadata:/var/www/html/local_metadata
      - ./search:/var/www/html/search
      - ./channel:/var/www/html/channel
      - ./play:/var/www/html/play
      - ./upload:/var/www/html/upload
      - ./tmp:/var/www/html/tmp

Пояснения по ключевым моментам:

  • Отдельные тома под generated, local_metadata, search, channel, play, upload, tmp — требование самого приложения: без них часть функций (веб-радио каналы, кэш обложек, загрузка через веб-интерфейс) не переживёт перезапуск контейнера.
  • depends_on с condition: service_healthy — Ampache стартует только после того, как MariaDB реально готова принимать подключения.
  • Пароль базы в примере — замените на собственный перед запуском.
  • Порт 8080:80 — наружу пробрасывается на 8080, чтобы не конфликтовать с другими веб-сервисами на хосте.

Запуск:

cd /opt/ampache
docker compose up -d
docker compose logs -f ampache

Первая настройка: веб-установщик, каталог и транскодирование

В отличие от Navidrome, у Ampache нет режима автонастройки через переменные окружения — первый запуск всегда проходит через классический веб-установщик. Откройте http://ваш-ip:8080 — вас перекинет на страницу проверки требований, а затем на форму подключения к базе. Укажите те же значения, что заданы в docker-compose.yml: хост db, имя базы ampache, пользователя и пароль. Установщик сам создаст таблицы и предложит создать первого администратора — задайте ему нормальный пароль, а не тестовый.

После входа под администратором добавьте каталог: Admin → Catalogs → Add a New Catalog. Укажите тип Music (или Podcast/Video, если планируете использовать эти разделы отдельно), путь /music — именно так каталог виден изнутри контейнера, вне зависимости от того, куда он смонтирован на хосте. Запустите Add Catalog, чтобы Ampache просканировал коллекцию и разобрал теги; на крупной библиотеке первичное сканирование на PHP-стеке идёт заметно дольше, чем на нативном Go-бинарнике Navidrome — рассчитывайте на десятки минут, а не секунды, для коллекций на десятки тысяч треков.

Транскодирование настраивается в Admin → Server Config → Transcoding — в образе уже установлен ffmpeg, дополнительно ничего ставить не нужно. Там же задаются профили по битрейту для мобильных клиентов и лимиты на число одновременных потоков транскодирования — их стоит выставить осознанно, чтобы один активный пользователь с медленным интернетом не съел всё CPU сервера.

HTTPS и доступ извне через reverse proxy

Открывать порт 8080 напрямую в интернет без TLS не стоит — как и любой сервис с логином и паролем, Ampache должен работать только по HTTPS вне локальной сети. Если на сервере уже настроен Traefik, добавьте к сервису ampache из основного файла сеть и лейблы (volumes и остальные параметры оставляете как есть):

    networks:
      - traefik-net
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.ampache.rule=Host(`music.example.com`)"
      - "traefik.http.routers.ampache.entrypoints=websecure"
      - "traefik.http.routers.ampache.tls.certresolver=letsencrypt"
      - "traefik.http.services.ampache.loadbalancer.server.port=80"

Не забудьте также убрать проброс ports: 8080:80 — при работе через Traefik он не нужен, трафик пойдёт через прокси-сеть traefik-net (её нужно один раз создать: docker network create traefik-net). Если Traefik ещё не настроен — есть отдельный разбор, как поднять Traefik как reverse proxy для Docker. Альтернатива для тех, кто предпочитает классику — nginx с обычным proxy_pass на порт 8080 и Certbot для сертификата; для DAAP и UPnP/DLNA это не подходит (эти протоколы рассчитаны на локальную сеть и работают напрямую, без HTTPS-прокси), но для Subsonic API и веб-интерфейса — рабочая связка. После настройки reverse proxy откройте Admin → Server Config → Interface и укажите публичный URL сервера — иначе ссылки на обложки и потоки могут генерироваться с внутренним адресом контейнера.

Резервное копирование и перенос данных

В Ampache критичны для бэкапа две вещи: база MariaDB (пользователи, плейлисты, история прослушиваний, рейтинги, настройки каталогов) и папка config с файлом ampache.cfg.php, где хранятся параметры подключения и ключи. Саму музыкальную коллекцию можно не дублировать в бэкапах VPS, если она уже надёжно хранится где-то ещё.

Скрипт для ежедневного дампа базы и архивации конфига:

#!/bin/bash
DATE=$(date +%Y%m%d)
mkdir -p /opt/backups/ampache
docker compose -f /opt/ampache/docker-compose.yml exec -T db \
  mariadb-dump -u ampache -p"смените_этот_пароль" ampache > /opt/backups/ampache/db-$DATE.sql
tar -czf /opt/backups/ampache/config-$DATE.tar.gz -C /opt/ampache config
find /opt/backups/ampache -mtime +14 -delete

Дамп через mariadb-dump можно снимать без остановки контейнера — в отличие от файловых БД вроде SQLite, MySQL/MariaDB отдаёт консистентный снапшот на лету. Для более серьёзного подхода к бэкапам всего сервера, а не только базы одного приложения, стоит посмотреть BorgBackup в Docker Compose — дедупликация снимает вопрос разрастания архивов при ежедневных дампах.

Перенос на новый сервер: скопируйте каталоги config, db (или восстановите базу из SQL-дампа в свежий контейнер MariaDB) и music, затем запустите тот же docker-compose.yml. Если переносите через дамп базы, а не копирование db, создайте пустую базу тем же именем и импортируйте дамп командой mariadb -u ampache -p ampache < db-DATE.sql перед первым запуском Ampache.

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

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

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

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

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

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

Ampache обязательно требует MySQL/MariaDB, SQLite не поддерживается?

Официально поддерживаемый и документированный вариант — MySQL-совместимая база (MySQL или MariaDB). Для домашнего сервера с одним-двумя пользователями это выглядит избыточно по сравнению с SQLite у Navidrome, но зато даёт больше гибкости при росте — например, вынос базы на отдельный сервер при масштабировании.

Чем Ampache принципиально отличается от Navidrome и Airsonic?

Широтой протоколов: DAAP и UPnP/DLNA есть только у Ampache из этой тройки, плюс встроенная поддержка видео и аудиокниг как отдельных типов каталогов. Расплата — более тяжёлый стек (PHP + веб-сервер + MySQL) и настройка через веб-установщик вместо переменных окружения. Если нужен только Subsonic-стриминг музыки — Navidrome проще и легче; если нужны подкасты без DAAP/DLNA — присмотритесь к Airsonic-Advanced.

Можно ли подключить Ampache напрямую в iTunes/Music на Mac?

Да, через DAAP — эта функция должна быть включена в Admin → Server Config → Features. После включения библиотека появляется в разделе общих медиатек в локальной сети, без установки отдельного приложения.

Какие мобильные клиенты работают с Ampache?

Любой Subsonic/OpenSubsonic клиент — DSub, Substreamer, Symfonium на Android; play:Sub, Amperfy на iOS — через Subsonic API. Плюс есть отдельные клиенты, написанные конкретно под нативный Ampache API, но Subsonic-режим обычно проще и универсальнее для повседневного использования.

После обновления образа веб-интерфейс ругается на несовместимую версию базы — что делать?

Ampache при обновлении иногда требует миграции схемы. Проверьте Admin → System → Database Update и примените миграции через интерфейс, прежде чем продолжать работу.

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

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

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