Гид по технологиям

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

8 min read Самохостинг Обновлено 22 Nov 2025
Ampache на Fedora 33 — установка и настройка
Ampache на Fedora 33 — установка и настройка

Обложка: логотип Ampache и примеры интерфейса сервера

Основная идея

Ampache позволяет хранить музыкальную коллекцию на собственном сервере и транслировать её на компьютеры, телефоны и смарт‑ТВ. Внутри стека обычно присутствуют: веб‑сервер (Nginx), PHP‑FPM, база данных (MariaDB/MySQL) и опционально FFmpeg для транскодирования.

В этом руководстве вы найдёте подробные команды, конфигурационные файлы и практические рекомендации по безопасности и эксплуатации.

Первые шаги и системные требования

Требования перед началом:

  • Сервер с Fedora 33.
  • Нон‑рут пользователь с sudo.
  • Обновление системы и базовые утилиты.

Команды обновления и установки базовых утилит (вставлены как в исходнике):

$ sudo dnf upgrade
$ sudo dnf install wget curl nano zip -y

Отключение SELinux временно (только для тестовой среды; в продакшне лучше настроить правила или использовать permissive/модули):

$ sudo setenforce 0

Important: на продакшн‑сервере лучше не отключать SELinux полностью — рассмотрите настройку контекстов и правил для nginx/php‑fpm.

Настройка файрвола (firewalld)

Fedora поставляется с firewalld. Проверка статуса:

$ sudo firewall-cmd --state

Ожидаемый вывод:

running

Установка зоны по умолчанию и открытие HTTP/HTTPS:

$ sudo firewall-cmd --set-default-zone=public
$ sudo firewall-cmd --zone=public --permanent --add-service=http
$ sudo firewall-cmd --zone=public --permanent --add-service=https
$ sudo firewall-cmd --zone=public --permanent --list-services
$ sudo systemctl reload firewalld

Проверяйте итоговый список сервисов и при необходимости открывайте дополнительные порты (например, для SSH, если он в другой зоне).

Установка Git

$ sudo dnf install git

Настройте глобальные параметры Git (подставьте свои данные):

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Установка и настройка MariaDB

Fedora 33 по умолчанию включает MariaDB 10.4, но мы используем официальный репозиторий MariaDB 10.5. Создайте файл репозитория:

$ sudo nano /etc/yum.repos.d/MariaDB.repo

Вставьте:

# MariaDB 10.5 Fedora repository list
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/fedora33-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Установите MariaDB и включите сервис:

$ sudo dnf install MariaDB-server -y
$ mysql --version
$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb
$ sudo mysql_secure_installation

В ходе mysql_secure_installation вы встретите подсказку про unix_socket — можно использовать плагин unix_socket для входа под системным пользователем (без пароля), но при этом для сторонних приложений понадобится отдельный пользователь с паролем. В этом руководстве мы оставим unix_socket активным.

Создание базы данных для Ampache

Войдите в клиент MySQL и создайте базу и пользователя:

$ sudo mysql

В prompt MariaDB выполните:

mysql> CREATE DATABASE ampache;
mysql> CREATE USER 'ampuser'@'localhost' IDENTIFIED BY 'yourpassword';
mysql> GRANT ALL PRIVILEGES ON ampache.* TO 'ampuser'@'localhost';
mysql> exit

Подсказка: используйте надёжный пароль вместо ‘yourpassword’. Если вы планируете внешние подключения к БД, ограничьте доступ по IP и используйте TLS.

Установка PHP и расширений

Добавим REMI репозиторий и установим PHP 7.4 как модуль (в соответствии с исходным руководством):

$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-33.rpm
$ sudo dnf module install php:remi-7.4
$ php --version

Установите обязательные расширения для Ampache:

sudo dnf install php-curl php-gd php-intl php-mysql

Настройка PHP‑FPM

Откройте конфигурацию PHP‑FPM для пула www:

$ sudo nano /etc/php-fpm.d/www.conf

Найдите и замените user/group на nginx:

user = nginx
group = nginx

Откройте /etc/php.ini и увеличьте лимиты загрузки, чтобы пользователи могли загружать аудио‑файлы до 100 МБ:

post_max_size = 110M
upload_max_filesize = 100M

Перезапустите php-fpm:

$ sudo systemctl restart php-fpm

Note: значение upload_max_filesize можно адаптировать под ваши файлы. Всегда проверяйте, что post_max_size больше upload_max_filesize.

Установка и запуск Nginx

$ sudo dnf install nginx -y
$ nginx -v
$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Откройте IP сервера в браузере — вы должны увидеть стартовую страницу Nginx.

Стартовая страница Nginx на Fedora

Конфигурация Nginx для Ampache

Создайте каталоги для конфигураций сайтов и подключите include в основной nginx.conf:

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
$ sudo nano /etc/nginx/nginx.conf

Вставьте после include /etc/nginx/conf.d/*.conf:

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Создайте файл /etc/nginx/sites-available/ampache.conf и вставьте предложенную конфигурацию сервера (полный блок ниже сохранён точно как в исходном материале):

server {

    # listen to
    listen  [::]:80;
    listen       80;

    server_name ampache.example.com;
    charset utf-8;

    # Logging, error_log mode [notice] is necessary for rewrite_log on,
    # (very usefull if rewrite rules do not work as expected)

    error_log       /var/log/nginx/ampache.error.log; # notice;
    access_log      /var/log/nginx/ampache.access.log;
    # rewrite_log     on;

    # Use secure headers to avoid XSS and many other things
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header Referrer-Policy "no-referrer";
    add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval'; frame-src 'self'; object-src 'self'";

    # Avoid information leak
    server_tokens off;
    fastcgi_hide_header X-Powered-By;

    root /var/www/html/ampache;
    index index.php;
    client_max_body_size 100m;

    # Somebody said this helps, in my setup it doesn't prevent temporary saving in files
    proxy_max_temp_file_size 0;

    # Rewrite rule for Subsonic backend
    if ( !-d $request_filename ) {
        rewrite ^/rest/(.*).view$ /rest/index.php?action=$1 last;
        rewrite ^/rest/fake/(.+)$ /play/$1 last;
    }

    # Rewrite rule for Channels
    if (!-d $request_filename){
      rewrite ^/channel/([0-9]+)/(.*)$ /channel/index.php?channel=$1&target=$2 last;
    }

    # Beautiful URL Rewriting
    rewrite ^/play/ssid/(\w+)/type/(\w+)/oid/([0-9]+)/uid/([0-9]+)/name/(.*)$ /play/index.php?ssid=$1&type=$2&oid=$3&uid=$4&name=$5 last;
    rewrite ^/play/ssid/(\w+)/type/(\w+)/oid/([0-9]+)/uid/([0-9]+)/client/(.*)/name/(.*)$ /play/index.php?ssid=$1&type=$2&oid=$3&uid=$4&client=$5&name=$6 last;
    rewrite ^/play/ssid/(\w+)/type/(\w+)/oid/([0-9]+)/uid/([0-9]+)/client/(.*)/player/(.*)/name/(.*)$ /play/index.php?ssid=$1&type=$2&oid=$3&uid=$4&client=$5&player=$6&name=$7 last;
    rewrite ^/play/ssid/(\w+)/type/(\w+)/oid/([0-9]+)/uid/([0-9]+)/client/(.*)/bitrate/([0-9]+)/player/(.*)/name/(.*)$ /play/index.php?ssid=$1&type=$2&oid=$3&uid=$4&client=$5&bitrate=$6player=$7&name=$8 last;
    rewrite ^/play/ssid/(\w+)/type/(\w+)/oid/([0-9]+)/uid/([0-9]+)/client/(.*)/transcode_to/(w+)/bitrate/([0-9]+)/player/(.*)/name/(.*)$ /play/index.php?ssid=$1&type=$2&oid=$3&uid=$4&client=$5&transcode_to=$6&bitrate=$7&player=$8&name=$9 last;
    rewrite ^/play/ssid/(\w+)/type/(\w+)/oid/([0-9]+)/uid/([0-9]+)/client/(.*)/noscrobble/([0-1])/name/(.*)$ /play/index.php?ssid=$1&type=$2&oid=$3&uid=$4&client=$5&noscrobble=$6&name=$7 last;
    rewrite ^/play/ssid/(\w+)/type/(\w+)/oid/([0-9]+)/uid/([0-9]+)/client/(.*)/noscrobble/([0-1])/player/(.*)/name/(.*)$ /play/index.php?ssid=$1&type=$2&oid=$3&uid=$4&client=$5&noscrobble=$6&player=$7&name=$8 last;
    rewrite ^/play/ssid/(\w+)/type/(\w+)/oid/([0-9]+)/uid/([0-9]+)/client/(.*)/noscrobble/([0-1])/bitrate/([0-9]+)/player/(.*)/name/(.*)$ /play/index.php?ssid=$1&type=$2&oid=$3&uid=$4&client=$5&noscrobble=$6&bitrate=$7player=$8&name=$9 last;
    rewrite ^/play/ssid/(\w+)/type/(\w+)/oid/([0-9]+)/uid/([0-9]+)/client/(.*)/noscrobble/([0-1])/transcode_to/(w+)/bitrate/([0-9]+)/player/(.*)/name/(.*)$ /play/index.php?ssid=$1&type=$2&oid=$3&uid=$4&client=$5&noscrobble=$6&transcode_to=$7&bitrate=$8&player=$9&name=$10 last;

    # the following line was needed for me to get downloads of single songs to work
    rewrite ^/play/ssid/(.*)/type/(.*)/oid/([0-9]+)/uid/([0-9]+)/action/(.*)/name/(.*)$ /play/index.php?ssid=$1&type=$2&oid=$3&uid=$4action=$5&name=$6 last;
    location /play {
        if (!-e $request_filename) {
            rewrite ^/play/art/([^/]+)/([^/]+)/([0-9]+)/thumb([0-9]*)\.(?:[a-z]+)$ /image.php?object_type=$2&object_id=$3&auth=$1 last;
        }

        rewrite ^/([^/]+)/([^/]+)(/.*)?$ /play/$3?$1=$2;
        rewrite ^/(/[^/]+|[^/]+/|/?)$ /play/index.php last;
        break;
    }

   location /rest {
      limit_except GET POST {
         deny all;
      }
   }

   location ^~ /bin/ {
      deny all;
      return 403;
   }

   location ^~ /config/ {
      deny all;
      return 403;
   }

   location / {
      limit_except GET POST HEAD{
         deny all;
      }
   }

   location ~ ^/.*.php {
        fastcgi_index index.php;

        # sets the timeout for requests in [s] , 60s are normally enough
        fastcgi_read_timeout 600s;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        # Mitigate HTTPOXY https://httpoxy.org/
        fastcgi_param HTTP_PROXY "";

        # has to be set to on if encryption (https) is used:
        fastcgi_param HTTPS on;

        fastcgi_split_path_info ^(.+?\.php)(/.*)$;

        # chose as your php-fpm is configured to listen on
        fastcgi_pass unix:/run/php-fpm/www.sock;
   }

   # Rewrite rule for WebSocket
   location /ws {
        rewrite ^/ws/(.*) /$1 break;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8100/;
   }
}

Активируйте конфигурацию и проверьте nginx:

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

HTTPS через Let’s Encrypt (Certbot)

Установим Certbot и выдадим сертификат для домена ampache.example.com:

$ sudo dnf install certbot certbot-nginx -y
$ sudo certbot --nginx -d ampache.example.com

Выберите опцию перенаправления HTTP на HTTPS (рекомендуется “Redirect”). Для автоматического продления добавьте cron‑задачу:

$ echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew" | sudo tee -a /etc/crontab > /dev/null

Совет: тестируйте автоматическое продление в dry‑run: sudo certbot renew –dry-run

Установка Ampache

Создайте корневую папку и скачайте релиз Ampache (в примере 4.4.1):

$ sudo mkdir -p /var/www/html/ampache
$ wget https://github.com/ampache/ampache/releases/download/4.4.1/ampache-4.4.1_all.zip
$ sudo unzip ampache-4.4.1_all.zip -d /var/www/html/ampache/
$ sudo chown --recursive  nginx:nginx /var/www/html/ampache/

Создайте каталог для музыки и выставьте права:

$ sudo mkdir -p /data/Music
$ sudo chown -R nginx:nginx /data/Music

Установка FFmpeg (через RPMFusion):

$ sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
$ sudo dnf install ffmpeg

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

Откройте https://ampache.example.com — вы увидите веб‑установщик.

Старт веб‑установщика Ampache

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

Проверка требований Ampache

Настройка базы данных в веб‑установщике

Некоторые версии веб‑инсталлятора могут не обнаружить расположение ffmpeg автоматически на Fedora. В этом случае после установки завершите установку и включите транскодирование вручную, отредактировав конфигурационный файл Ampache.

Страница конфигурации Ampache

Создайте учётную запись администратора и войдите.

Создание администратора Ampache

Страница входа Ampache

Главная страница Ampache после входа

Включение FFmpeg для транскодирования

Отредактируйте конфигурацию:

$ sudo nano /var/www/html/ampache/config/ampache.cfg.php

Найдите и замените строку:

;transcode_cmd = "ffmpeg"

на

transcode_cmd = "ffmpeg"

Сохраните файл и перезапустите соответствующие сервисы при необходимости.

Добавление музыки в Ampache

  1. В веб‑интерфейсе нажмите Add catalog (Добавить каталог).
  2. Выберите тип local и укажите путь к каталогу, например /data/Music или /home/user/music.
  3. При необходимости включите Build Playlists from Playlist Files для импорта плейлистов.

Добавление каталога в Ampache

Чтобы пользователи могли загружать файлы через веб, включите опцию Allow user uploads в разделе Admin → Server Config → System и укажите Destination catalog.

Загрузки происходят через Upload в разделе Music. Если оставить поля Artist и Album пустыми, Ampache попытается распознать их по ID3‑тегам.

Страница загрузки файлов в Ampache

После индексации музыка станет доступна в левой панели и для стриминга на устройствах.

Дополнительные рекомендации по эксплуатации и безопасности

Важно: не храните в каталоге ampache файлы с правами на запись для всех. Держите веб‑корень с минимальными правами и используйте отдельную папку для пользовательских загрузок.

Рекомендации:

  • Регулярно обновляйте систему и пакеты: sudo dnf upgrade.
  • Делайте резервные копии базы данных и каталога с музыкой.
  • Отключите доступ к /bin и /config через nginx (кажется уже в конфиге).
  • Ограничьте размер загружаемых файлов и таймауты PHP.
  • Если сайт публичный — используйте fail2ban и ограничьте попытки авторизации.

Безопасность PHP и Nginx

  • Используйте более новые версии PHP при возможности; проверяйте совместимость с Ampache.
  • Отключите display_errors в php.ini на продакшне.
  • Настройте Content‑Security‑Policy (CSP) аккуратно — слишком строгая политика может ломать клиентские плееры.

Бэкапы и миграции

  • Бэкап MySQL: mysqldump –single-transaction –quick –lock-tables=false ampache > ampache.sql
  • Бэкап музыки: rsync -a /data/Music/ /backup/music/
  • Перед апгрейдом Ampache делайте бэкап config/ и базы данных.

Варианты развёртывания (альтернативы)

  • Docker/Podman: официальный образ Ampache доступен в Docker Hub; контейнеризация упрощает обновления и изоляцию.
  • Использование Apache вместо Nginx: конфигурация отличается, но Ampache работает и с Apache + mod_php / php-fpm.
  • Облачные VPS: если вы планируете большой трафик, рассмотрите VPS с быстрым диском и высокой пропускной способностью.

Контейнеризация (краткая методология):

  1. Подготовьте docker-compose.yml с сервисами: app (php+nginx), db (mariadb), storage (volume) и opc.
  2. Монтируйте каталог музыки как volume.
  3. Настройте резервное копирование тома и бэкапы базы данных.

Чеклисты по ролям

Администратор (развёртывание)

  • Настроить SELinux или документировать причину отключения.
  • Установить и настроить MariaDB.
  • Установить PHP, расширения и PHP‑FPM.
  • Настроить Nginx и SSL (Let’s Encrypt).
  • Обеспечить резервное копирование БД и музыки.

Catalog Manager (операции)

  • Создать каталоги и назначить права.
  • Добавить и синхронизировать каталоги в Ampache.
  • Утвердить правила загрузки и максимальный размер файлов.

Обычный пользователь

  • Зарегистрироваться/получить доступ у администратора.
  • Загрузить файлы через Upload.
  • Проверить корректность тегов ID3.

Критерии приёмки

  • Веб‑интерфейс Ampache доступен по HTTPS.
  • Транскодирование работает (тест: воспроизвести файл, требующий конверсии).
  • Пользователь может загрузить файл до заданного лимита без ошибок.
  • Музыкальная коллекция корректно индексируется и отображается в интерфейсе.

Отладка и частые проблемы

Проблема: страница установки не видит ffmpeg

  • Проверьте, что ffmpeg установлен и доступен в PATH: ffmpeg -version
  • Укажите полный путь к ffmpeg в ampache.cfg.php, например transcode_cmd = “/usr/bin/ffmpeg”

Проблема: 502 Bad Gateway при обращении к PHP

  • Убедитесь, что php-fpm запущен и слушает unix:/run/php-fpm/www.sock
  • Проверьте соответствие fastcgi_pass в конфиге nginx и listen в /etc/php-fpm.d/www.conf

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

  • Проверьте владельца каталога и права: ls -la /data/Music
  • Убедитесь, что nginx (nginx:nginx) имеет права на чтение/запись, если включены загрузки.

Совместимость и миграционные заметки

  • При переходе с другой версии MariaDB/MySQL проверьте совместимость схемы.
  • При апгрейде Ampache ознакомьтесь с release notes на GitHub — иногда меняются требования к PHP или модулям.

Факты и эвристики

  • Минимальная структура сервиса: Nginx → PHP‑FPM → Ampache → MariaDB.
  • Транскодирование нагружает CPU; для больших библиотек используйте мощный CPU или выделенный транскодер.
  • Храните музыку на отдельном диске/томе для упрощения резервного копирования.

Краткий план обновления (SOP)

  1. Сделать бэкап базы данных и каталога с музыкой.
  2. Просмотреть release notes Ampache и проверить зависимости.
  3. Остановить веб‑сервер и php‑fpm (минимум простоя).
  4. Обновить файлы Ampache (замена директорий), сохранить права.
  5. Запустить миграции базы, если требуется.
  6. Протестировать основные сценарии (вход, стриминг, загрузка).

Частые альтернативы клиентских приложений

  • Android/iOS: несколько клиентов поддерживают Ampache API (используйте официальные и проверенные приложения).
  • Смарт‑ТВ: проверяйте поддержку кодеков и форматов.

FAQ

Q: Можно ли хранить музыку на удалённом NAS?
A: Да, смонтируйте NAS через NFS/SMB на сервер и укажите путь каталога при создании каталога в Ampache. Обратите внимание на права и латентность сети.

Q: Нужен ли FFmpeg, если все файлы уже в MP3?
A: Необязательно, но FFmpeg полезен для транскодирования под устройства с ограниченной поддержкой форматов.

Q: Как ограничить доступ к Ampache в локальной сети?
A: Можно настроить firewall (firewalld) и nginx, ограничив server_name или используя базовую аутентификацию.

Резюме

  • Установка Ampache включает подготовку стека: MariaDB, PHP, Nginx, FFmpeg.
  • Следуйте чеклистам ролей для развёртывания и операций.
  • Обеспечьте регулярные бэкапы и мониторинг транскодинга.

Summary:

  1. Настройте систему и базовые пакеты.
  2. Установите MariaDB и создайте базу/пользователя.
  3. Установите PHP и расширения, настройте PHP‑FPM под nginx.
  4. Настройте Nginx, включите HTTPS и загрузите Ampache.
  5. Добавьте каталоги музыки, включите загрузки и проверьте трансляцию.

Если возникли вопросы — опишите конфигурацию и ошибки, приложите логи nginx и php‑fpm.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Исправить «This Accessory May Not Be Supported» на iPhone
iPhone

Исправить «This Accessory May Not Be Supported» на iPhone

Монтирование файлов хоста в Docker
Docker

Монтирование файлов хоста в Docker

Как закрепить разговор в Google Messages
Мобильные приложения

Как закрепить разговор в Google Messages

Как максимально использовать камеру iPhone
Фото

Как максимально использовать камеру iPhone

Отключить Best Stuff First в Tumblr
Социальные сети

Отключить Best Stuff First в Tumblr

Копирование файлов между Pod и машиной
Kubernetes

Копирование файлов между Pod и машиной