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

Основная идея
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 для 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 — вы увидите веб‑установщик.

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


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

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



Включение FFmpeg для транскодирования
Отредактируйте конфигурацию:
$ sudo nano /var/www/html/ampache/config/ampache.cfg.php
Найдите и замените строку:
;transcode_cmd = "ffmpeg"
на
transcode_cmd = "ffmpeg"
Сохраните файл и перезапустите соответствующие сервисы при необходимости.
Добавление музыки в Ampache
- В веб‑интерфейсе нажмите Add catalog (Добавить каталог).
- Выберите тип local и укажите путь к каталогу, например /data/Music или /home/user/music.
- При необходимости включите Build Playlists from Playlist Files для импорта плейлистов.

Чтобы пользователи могли загружать файлы через веб, включите опцию Allow user uploads в разделе Admin → Server Config → System и укажите Destination catalog.
Загрузки происходят через Upload в разделе Music. Если оставить поля Artist и Album пустыми, Ampache попытается распознать их по ID3‑тегам.

После индексации музыка станет доступна в левой панели и для стриминга на устройствах.
Дополнительные рекомендации по эксплуатации и безопасности
Важно: не храните в каталоге 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 с быстрым диском и высокой пропускной способностью.
Контейнеризация (краткая методология):
- Подготовьте docker-compose.yml с сервисами: app (php+nginx), db (mariadb), storage (volume) и opc.
- Монтируйте каталог музыки как volume.
- Настройте резервное копирование тома и бэкапы базы данных.
Чеклисты по ролям
Администратор (развёртывание)
- Настроить 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)
- Сделать бэкап базы данных и каталога с музыкой.
- Просмотреть release notes Ampache и проверить зависимости.
- Остановить веб‑сервер и php‑fpm (минимум простоя).
- Обновить файлы Ampache (замена директорий), сохранить права.
- Запустить миграции базы, если требуется.
- Протестировать основные сценарии (вход, стриминг, загрузка).
Частые альтернативы клиентских приложений
- 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:
- Настройте систему и базовые пакеты.
- Установите MariaDB и создайте базу/пользователя.
- Установите PHP и расширения, настройте PHP‑FPM под nginx.
- Настройте Nginx, включите HTTPS и загрузите Ampache.
- Добавьте каталоги музыки, включите загрузки и проверьте трансляцию.
Если возникли вопросы — опишите конфигурацию и ошибки, приложите логи nginx и php‑fpm.
Похожие материалы
Исправить «This Accessory May Not Be Supported» на iPhone
Монтирование файлов хоста в Docker
Как закрепить разговор в Google Messages
Как максимально использовать камеру iPhone
Отключить Best Stuff First в Tumblr