Как установить и настроить Airsonic на VPS
Если у вас накопилась своя коллекция музыки — рипы с CD, FLAC-архив, редкие альбомы, которых нет в Spotify — и вы устали держать её на одном ноутбуке, Airsonic решает эту проблему. Это self-hosted стриминговый сервер, форк Subsonic, который отдаёт вашу библиотеку по REST API любому Subsonic-совместимому клиенту на телефоне, планшете или в браузере. Ниже — рабочая установка на VPS с нуля: Java, systemd, транскодирование на лету, HTTPS через Nginx и разбор нюансов, которые обычно всплывают уже после запуска.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Airsonic и стоит ли его выбирать в 2026 году
Airsonic появился в 2016 году как community-форк Subsonic, когда тот стал платным после шестой версии. Идея простая: сервер индексирует папки с музыкой, строит библиотеку с обложками и тегами, а клиенты подключаются по одному и тому же Subsonic API — это открытый протокол, под который написаны десятки приложений на всех платформах.
Важный нюанс, о котором стоит сказать честно: сам проект airsonic/airsonic последние пару лет обновляется медленно — основная активность разработчиков ушла в форк Airsonic-Advanced (airsonic-advanced/airsonic-advanced). Он совместим по данным и конфигурации с оригиналом, но получает больше исправлений и официальный Docker-образ. Если ставите сервер с нуля в 2026 году, разумнее сразу брать Advanced-форк — ниже показаны оба пути: standalone JAR под systemd (подходит для обоих проектов) и Docker Compose (проще для Advanced-форка).
Если вам скорее нужен полноценный медиацентр с видео, транскодированием под конкретные устройства и богатым UI, посмотрите в сторону Jellyfin — он тяжелее по ресурсам, зато закрывает не только музыку. Airsonic же нарочно узкоспециализирован: он делает одну вещь — стриминг аудио — и делает её без лишнего интерфейсного веса.
Требования к серверу и подготовка VPS
Airsonic не требователен к CPU — основная нагрузка это диск (место под библиотеку) и, если включено транскодирование, кратковременные всплески по CPU на каждый стрим. Ориентир для старта:
| Сценарий | vCPU | RAM | Диск |
|---|---|---|---|
| 1-3 слушателя, без транскодирования | 1 | 1 ГБ | 20 ГБ + место под библиотеку |
| 3-10 слушателей, транскодирование иногда | 2 | 2 ГБ | 40 ГБ + библиотека |
| Семья/друзья, регулярное транскодирование | 2-4 | 4 ГБ | SSD, библиотека на отдельном диске |
Сама библиотека может занимать десятки и сотни гигабайт — под неё лучше подключить отдельный блочный диск, а не расширять системный, так проще делать снапшоты и переносить данные отдельно от ОС. Возьмите VPS с Ubuntu 24.04 или Debian 12 — оба дистрибутива есть в панели заказа, дальше все команды даны под Ubuntu/Debian (apt).
Подключаемся по SSH и ставим Java — Airsonic classic работает на Java 8+, Advanced-форк требует Java 17:
apt update && apt install -y openjdk-17-jre-headless ffmpeg lame wget curl unzip
java -version
ffmpeg и lame понадобятся дальше для транскодирования — без них сервер сможет отдавать только оригинальные файлы без перекодирования на лету.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Airsonic и запуск как systemd-сервис
Заводим отдельного системного пользователя и структуру каталогов — так процесс не работает от root, а данные аккуратно разложены:
useradd -r -m -d /var/airsonic -s /usr/sbin/nologin airsonic
mkdir -p /var/airsonic/{app,db,playlists,podcasts}
mkdir -p /mnt/music # сюда смонтируйте отдельный диск под библиотеку
chown -R airsonic:airsonic /var/airsonic /mnt/music
Скачиваем актуальный standalone JAR со страницы релизов проекта (для Airsonic-Advanced — github.com/airsonic-advanced/airsonic-advanced/releases, для классического Airsonic — github.com/airsonic/airsonic/releases). Версию и точную ссылку на файл возьмите со страницы Releases на момент установки — они меняются, поэтому не привожу здесь конкретный номер:
cd /var/airsonic/app
wget -O airsonic.jar "<ссылка на *-standalone.jar с релиза>"
chown airsonic:airsonic airsonic.jar
Создаём unit-файл systemd:
# /etc/systemd/system/airsonic.service
[Unit]
Description=Airsonic Music Server
After=network.target
[Service]
Type=simple
User=airsonic
Group=airsonic
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
ExecStart=/usr/lib/jvm/java-17-openjdk-amd64/bin/java \
-Xmx768m \
-Dairsonic.home=/var/airsonic/db \
-Dserver.address=127.0.0.1 \
-Dserver.port=4040 \
-jar /var/airsonic/app/airsonic.jar
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
ProtectSystem=full
[Install]
WantedBy=multi-user.target
Обратите внимание на -Dserver.address=127.0.0.1 — сервис слушает только локально, наружу его отдаёт Nginx (см. следующий раздел). -Xmx768m ограничивает кучу JVM — для VPS с 1-2 ГБ RAM это разумный потолок, чтобы не словить OOM-killer вместе с ОС.
systemctl daemon-reload
systemctl enable --now airsonic
systemctl status airsonic
journalctl -u airsonic -f # первый запуск занимает 20-40 секунд — ждём инициализации БД
Альтернатива — Docker Compose (проще для Airsonic-Advanced, у него есть официальный образ в GitHub Container Registry):
services:
airsonic:
image: ghcr.io/airsonic-advanced/airsonic-advanced:latest
container_name: airsonic
restart: unless-stopped
ports:
- "127.0.0.1:4040:4040"
volumes:
- ./data:/airsonic
- ./playlists:/playlists
- ./podcasts:/podcasts
- /mnt/music:/music:ro
environment:
- JAVA_OPTS=-Xmx768m
docker compose up -d — сервер поднимется с теми же портами и доступом только на localhost.
Медиатека, транскодирование и плейлисты
Заходим на http://127.0.0.1:4040 (пока через SSH-туннель: ssh -L 4040:127.0.0.1:4040 user@ваш-сервер) или уже через домен после настройки Nginx из следующего раздела. Логин по умолчанию — admin / admin. Первым делом меняем пароль администратора в Settings → Users — дефолтные учётки на публично доступном сервере это дыра, которую сканируют ботами в первые же часы.
Дальше в Settings → Media Folders добавляем путь к библиотеке:
Name: Music
Path: /mnt/music
Airsonic просканирует папку, вытащит теги (ID3 для MP3, Vorbis comments для FLAC/OGG), найдёт обложки (cover.jpg/folder.jpg в папке альбома или embedded artwork) и построит индекс. Повторное сканирование запускается вручную из UI или по расписанию (Settings → General → задать интервал автосканирования).
Транскодирование пригождается, когда у слушателя медленный мобильный интернет, а библиотека в FLAC — гонять оригинал 40 МБ на 3G бессмысленно. В Settings → Transcoding проверьте, что определились пути к ffmpeg (обычно /usr/bin/ffmpeg — то, что мы поставили apt-пакетом) и настройте профили по битрейту, например 128/192/320 kbps в MP3 или Opus. Клиент сам запрашивает нужный битрейт исходя из настроек качества и типа сети (Wi-Fi / мобильная).
Плейлисты создаются прямо в веб-интерфейсе или через любой клиент (см. ниже) и хранятся в /var/airsonic/playlists в виде .m3u-файлов — их можно редактировать текстом или переносить между установками.
HTTPS через Nginx и Let's Encrypt, firewall
Сервис слушает только 127.0.0.1:4040, поэтому ставим перед ним Nginx как обратный прокси с TLS. Если Nginx ещё не установлен:
apt install -y nginx
Конфиг сайта:
# /etc/nginx/sites-available/airsonic.conf
server {
listen 80;
server_name music.example.com;
client_max_body_size 500M; # для загрузки треков через веб-UI, если используете
location / {
proxy_pass http://127.0.0.1:4040;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# для стриминга важно не буферизовать ответ целиком в память Nginx
proxy_buffering off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}
ln -s /etc/nginx/sites-available/airsonic.conf /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
Дальше выпускаем сертификат — подробный разбор certbot и альтернатив есть в статье про установку Let's Encrypt на VPS, здесь коротко:
apt install -y certbot python3-certbot-nginx
certbot --nginx -d music.example.com
Certbot сам допишет listen 443 ssl и настроит редирект с 80 на 443. После этого закройте прямой доступ к порту приложения на уровне файрвола — подробная настройка ufw описана в статье про установку файрвола ufw, минимальный набор правил:
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
Порт 4040 наружу не открывается вообще — он и так слушает только localhost, но лишним не будет держать это в голове при отладке.
Клиенты, бэкапы и обслуживание
Subsonic API, который использует Airsonic, поддерживают десятки клиентов — вы не привязаны к веб-интерфейсу:
- Android: Ultrasonic (свободный, активно развивается, есть на F-Droid) — надёжный выбор по умолчанию; Symfonium (платный, богатый UI) как более "премиальная" альтернатива.
- iOS: Amperfy, play:Sub — говорят по Subsonic API из коробки.
- Desktop: Sonixd/Feishin (Electron-приложения с поддержкой Subsonic-серверов) или просто веб-интерфейс Airsonic в браузере.
Подключение везде одинаковое: адрес сервера (https://music.example.com), логин и пароль пользователя Airsonic. Заведите отдельных пользователей для каждого члена семьи в Settings → Users — так проще ограничивать доступ к папкам и видеть в логах, кто что слушает.
Что бэкапить регулярно:
/var/airsonic/db(или./dataв Docker-варианте) — тут база данных (плейлисты, пользователи, история, рейтинги, обложки-кэш) и конфигурация. Это относительно небольшой объём, бэкапить легко и быстро.- Саму музыкальную библиотеку на
/mnt/musicбэкапить тем же способом обычно избыточно — это первичный носитель ваших файлов, логичнее держать её на резервируемом хранилище (RAID, объектное хранилище, второй диск) отдельно от бэкапа конфигурации сервиса.
Для регулярных бэкапов конфигурации и БД удобно взять BorgBackup — он умеет дедупликацию и шифрование, подробности в статье про установку BorgBackup на VPS:
borg create --stats /path/to/repo::airsonic-{now:%Y-%m-%d} /var/airsonic/db
Обновление — стандартный цикл для standalone-варианта: скачали новый JAR с релизов, остановили сервис, заменили файл, запустили обратно:
systemctl stop airsonic
mv /var/airsonic/app/airsonic.jar /var/airsonic/app/airsonic.jar.bak
wget -O /var/airsonic/app/airsonic.jar "<новая ссылка с релиза>"
chown airsonic:airsonic /var/airsonic/app/airsonic.jar
systemctl start airsonic
Для Docker-варианта — docker compose pull && docker compose up -d, база и конфиг сохраняются в volume и не теряются при обновлении образа.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Airsonic и Airsonic-Advanced — что ставить?
Для новой установки в 2026 году разумнее взять Airsonic-Advanced: тот же протокол и формат данных, но активнее сопровождается и имеет официальный Docker-образ. Классический Airsonic по-прежнему работает, но обновляется заметно реже.
Сколько RAM реально нужно под VPS?
Для 1-3 слушателей без частого транскодирования достаточно 1-2 ГБ — JVM сама по себе занимает несколько сотен мегабайт, остальное съедает индекс библиотеки и кэш. Точные цифры зависят от размера коллекции, ориентируйтесь на диапазон из таблицы выше и следите за journalctl -u airsonic на предмет ошибок нехватки памяти.
Можно ли подключить библиотеку с внешнего хранилища, а не с локального диска VPS?
Да, если оно смонтировано в файловую систему сервера (NFS, sshfs/rclone mount) — Airsonic видит его как обычную папку. Важно, чтобы монтирование переживало перезагрузку (запись в /etc/fstab или systemd-юнит), иначе при обрыве связи библиотека "опустеет" до переподключения.
Транскодирование обязательно?
Нет, по умолчанию сервер отдаёт оригинальные файлы. Транскодирование включается там, где важно экономить трафик клиента (мобильная сеть) или конвертировать редкие форматы (например, APE, WavPack) в то, что понимает конкретный плеер.
Как перенести Airsonic на другой сервер?
Останавливаете сервис, копируете каталог airsonic.home (в наших примерах — /var/airsonic/db) целиком на новый сервер, разворачиваете тот же JAR или Docker-образ той же версии, указываете туда -Dairsonic.home, запускаете. Библиотеку музыки переносите отдельно (rsync или тот же смонтированный диск) и переуказываете путь в Media Folders, если он изменился.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →