← К блогу

Как превратить старый телефон в домашний сервер: музыка, файлы и торренты

Настройка Termux, Navidrome и Tailscale.

После покупки нового телефона мой старый Redmi 13C долгое время валялся без дела. Однажды, видимо под воздействием последних веяний моды, мне захотелось купить отдельный MP3-плеер с разъёмом 3,5 мм и Bluetooth. Но, увидев цены на плееры, я передумал. Тут-то я и вспомнил про Redmi, который пылился без дела.

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

Тут меня ожидала первая загвоздка. Оказывается, с недавних пор разблокировка загрузчика на телефонах Xiaomi превратилась в прохождение всех кругов ада. Решил обойтись без root и сделать из телефона личный музыкальный и файловый сервер.

В итоге старый смартфон получил вторую жизнь. На нём теперь работают SSH-сервер, Navidrome и qBittorrent, а для удалённого доступа используется Tailscale. Всё это — без root-доступа, покупки дополнительного оборудования и аренды VPS.

В этой статье расскажу, как я всё настроил.

1. Подготовка телефона

Первым делом я сбросил телефон до заводских настроек и устроил тотальный debloat через ADB, удалив ненужные предустановленные приложения.

Затем в настройках роутера закрепил за Redmi постоянный внутренний IP-адрес. Это избавляет от необходимости каждый раз искать новый адрес телефона в домашней сети.

После этого установил Termux — приложение, предоставляющее Linux-подобное окружение на Android.

Обновляем пакеты:

pkg update && pkg upgrade

Предоставляем Termux доступ к общей памяти Android:

termux-setup-storage

Создаём пароль для будущего SSH-подключения:

passwd

Узнаём имя пользователя Termux:

whoami

Имя пользователя понадобится при подключении к серверу с компьютера.

2. Файловый сервер через SSH

Для доступа к файлам телефона по сети я решил использовать SSH. Это позволяет подключаться к файловой системе с компьютера и монтировать её как сетевой диск.

Устанавливаем OpenSSH:

pkg install openssh

Запускаем SSH-сервер:

sshd

По умолчанию SSH-сервер в Termux использует порт 8022.

2.1. Подключение к Windows

На компьютере с Windows устанавливаем:

После установки открываем проводник Windows и выбираем «Подключить сетевой диск».

Указываем букву диска, например X:, а в поле папки вводим путь следующего формата:

\\sshfs\ИМЯ_ПОЛЬЗОВАТЕЛЯ@192.168.0.8!8022\storage\emulated\0

Здесь:

  • ИМЯ_ПОЛЬЗОВАТЕЛЯ — имя пользователя Termux, полученное через whoami;
  • 192.168.0.8 — пример внутреннего IP-адреса Redmi;
  • 8022 — порт SSH;
  • storage\emulated\0 — путь к внутренней памяти Android.

Чтобы подключить карту памяти, указываем путь к соответствующему каталогу, например:

\\sshfs\ИМЯ_ПОЛЬЗОВАТЕЛЯ@192.168.0.8!8022\storage\5511-263E

5511-263E — идентификатор карты памяти в моём случае. У тебя он может отличаться.

После подключения память телефона и microSD становятся доступны в проводнике Windows как сетевые диски.

На Linux можно использовать SFTP или SSHFS. Например, для SSHFS:

mkdir -p ~/Redmi
sshfs -p 8022 ИМЯ_ПОЛЬЗОВАТЕЛЯ@192.168.0.8:/storage/emulated/0 ~/Redmi

Перед использованием необходимо установить SSHFS и убедиться, что у пользователя Termux есть доступ к нужным каталогам.

3. Автозагрузка SSH-сервера

Чтобы после каждой перезагрузки телефона не запускать SSH вручную, я установил Termux:Boot. После установки приложение нужно хотя бы один раз открыть вручную.

Создаём каталог для скриптов автозагрузки:

mkdir -p ~/.termux/boot

Создаём файл:

nano ~/.termux/boot/start-sshd

Добавляем следующий скрипт:

#!/data/data/com.termux/files/usr/bin/bash

termux-wake-lock

# Start SSH
if ! pgrep -x sshd >/dev/null 2>&1; then
    sshd
fi

Сохраняем файл и делаем его исполняемым:

chmod +x ~/.termux/boot/start-sshd

termux-wake-lock предотвращает обычное засыпание процессора, пока Android позволяет приложению работать. Это не абсолютная гарантия круглосуточной работы: также необходимо учитывать ограничения энергосбережения Android.

4. Музыкальный сервер на Navidrome

Файлового сервера мне оказалось недостаточно. Хотелось получить интерфейс, похожий на Spotify: упорядоченную музыкальную библиотеку, обложки, поиск и возможность слушать музыку вне домашней сети.

Для этого выбрал Navidrome — лёгкий музыкальный сервер с веб-интерфейсом и поддержкой Subsonic API.

Ставим Navidrome и ffmpeg в Termux:

pkg install navidrome ffmpeg

4.1. Организуем музыкальную библиотеку

Музыка хранится в двух местах: во внутренней памяти и на microSD. Чтобы Navidrome воспринимал её как единую библиотеку, создаём общий каталог:

mkdir -p ~/MusicLibrary

Добавляем символические ссылки на существующие музыкальные папки:

ln -s /storage/emulated/0/Music \
  ~/MusicLibrary/Internal

ln -s /storage/5511-263E/Music \
  ~/MusicLibrary/SDCard

Файлы при этом никуда не копируются: ссылки просто указывают на существующие каталоги.

4.2. Настраиваем Navidrome

Создаём конфигурационный файл:

nano ~/navidrome.toml

Добавляем:

MusicFolder = "/data/data/com.termux/files/home/MusicLibrary"
DataFolder = "/data/data/com.termux/files/home/navidrome-data"
Address = "0.0.0.0"
Port = "4533"
Scanner.FollowSymlinks = true

Что означают параметры:

  • MusicFolder — корневой каталог музыкальной библиотеки.
  • DataFolder — каталог для базы данных и других данных Navidrome.
  • Address = "0.0.0.0" — сервер принимает подключения на доступных сетевых интерфейсах.
  • Port = "4533" — порт веб-интерфейса и API.
  • Scanner.FollowSymlinks = true — позволяет сканеру переходить по символическим ссылкам.

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

4.3. Запускаем сервер

Выполняем:

navidrome --configfile "$HOME/navidrome.toml"

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

http://192.168.0.8:4533

Вместо 192.168.0.8 необходимо указать свой IP-адрес.

При первом открытии создаём учётную запись администратора.

4.4. Слушаем музыку

На компьютере можно открыть веб-интерфейс Navidrome и слушать музыку прямо в браузере.

На смартфоне я использую Symfonium. Из бесплатных и открытых альтернатив можно попробовать Navic.

В приложении выбираем совместимый сервер Subsonic, указываем адрес Navidrome, порт, имя пользователя и пароль.

Получаем собственную музыкальную библиотеку с поиском, альбомами, исполнителями и плейлистами. При этом музыка остаётся на телефоне, а не загружается в стороннее облако.

4.5. Что с автоматическим сканированием?

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

В частности, изменения на SD-карте через символические ссылки могут не обнаруживаться мгновенно. Поэтому, если новые треки не появились в библиотеке, стоит проверить настройки сканирования и при необходимости запустить его вручную.

Установленная версия Navidrome поддерживает команду:

navidrome scan --help

Для полного сканирования всех подпапок с использованием существующей конфигурации:

navidrome scan --configfile "$HOME/navidrome.toml" --full

Параметр --full заставляет сканер проверить все подпапки, игнорируя временные метки файлов.

5. Удалённый доступ через Tailscale

Музыкальный сервер работает дома, но хотелось слушать музыку и за пределами домашней сети.

Можно было бы настроить проброс портов на роутере, однако это потребовало бы дополнительной настройки и сделало бы сервис доступным через публичный адрес.

Вместо этого я выбрал Tailscale.

Tailscale создаёт приватную сеть между устройствами. Каждое устройство получает собственный адрес из диапазона 100.x.x.x и может обращаться к другим устройствам этой сети.

5.1. Настраиваем Tailscale

Устанавливаем Tailscale на Redmi 13C и основной смартфон. Затем авторизуем оба устройства в одной сети Tailscale и подтверждаем создание VPN-подключения.

После этого устройства появляются в панели управления Tailscale.

5.2. Подключаемся к Navidrome

Теперь доступны два способа подключения.

Дома, через Wi-Fi:

http://192.168.0.8:4533

Вне дома, через Tailscale:

http://100.x.x.x:4533

Вместо 100.x.x.x указываем реальный Tailscale IP Redmi 13C.

Для удалённого доступа Tailscale должен быть активен на клиентском устройстве, а Navidrome — работать на сервере. Сам по себе Tailscale не запускает приложения, которые остановил Android.

При этом не требуется открывать порт 4533 на роутере для всего интернета.

6. Автозапуск Navidrome

Чтобы после перезагрузки телефона не запускать Navidrome вручную, добавляем его в уже существующий скрипт автозагрузки.

Открываем файл:

nano ~/.termux/boot/start-sshd

Добавляем в конец:

# Start Navidrome
if ! pgrep -f 'navidrome.*navidrome.toml' >/dev/null 2>&1; then
    nohup "$PREFIX/bin/navidrome" \
        --configfile "$HOME/navidrome.toml" \
        >> "$HOME/navidrome.log" 2>&1 &
fi

Сохраняем файл и проверяем права:

chmod +x ~/.termux/boot/start-sshd

Теперь скрипт запускает SSH и Navidrome после загрузки Termux:Boot.

7. Добавляем торрент-сервер на qBittorrent

На этом этапе Redmi уже работал как музыкальный и файловый сервер. Но раз уж телефон постоянно подключён к сети, почему бы не использовать его ещё и для загрузок?

Для этого я установил qbittorrent-nox — вариант qBittorrent без графического окна, которым можно управлять через браузер.

7.1. Устанавливаем qBittorrent

В Termux подключаем репозиторий X11:

pkg install x11-repo
pkg update

Устанавливаем qBittorrent:

pkg install qbittorrent-nox

7.2. Запускаем веб-интерфейс

Выполняем:

qbittorrent-nox --webui-port=8080

При первом запуске программа выводит информацию о веб-интерфейсе и временный пароль администратора. Его необходимо сохранить.

После запуска открываем на компьютере браузер:

http://192.168.0.8:8080

Вводим логин admin и временный пароль. После входа задаём постоянный пароль в настройках WebUI.

Теперь можно добавлять magnet-ссылки и .torrent-файлы, следить за прогрессом загрузки, управлять очередью и ограничивать скорость скачивания и раздачи.

Всё это работает с компьютера, а сами загрузки выполняются на Redmi.

7.3. Настраиваем папку загрузок

В моём случае карта памяти доступна по пути:

/storage/5511-263E

Для сохранения файлов используется каталог:

/storage/5511-263E/Download

В настройках qBittorrent, в разделе Downloads, указываем этот путь в качестве папки сохранения.

Для незавершённых загрузок можно создать отдельную папку:

mkdir -p /storage/5511-263E/Download/Torrents/incomplete

Затем указываем её в настройках qBittorrent.

Важно убедиться, что Termux имеет разрешение на работу с общей памятью Android и что выбранный каталог доступен для записи.

7.4. Запускаем qBittorrent в фоне

Чтобы qBittorrent не зависел от открытой SSH-сессии, запускаем его в фоне:

nohup qbittorrent-nox --webui-port=8080 \
    > "$HOME/qbittorrent.log" 2>&1 < /dev/null &

Проверяем, что процесс работает:

pgrep -af qbittorrent

А посмотреть журнал можно командой:

tail -n 30 ~/qbittorrent.log

После этого SSH-сессию можно закрыть, а управлять загрузками — продолжать через веб-интерфейс.

7.5. Добавляем qBittorrent в автозагрузку

У меня уже был скрипт ~/.termux/boot/start-sshd, который запускает SSH и Navidrome. Поэтому я добавил в него ещё один блок:

# Start qBittorrent
if ! pgrep -f 'qbittorrent-nox.*--webui-port=8080' >/dev/null 2>&1; then
    nohup "$PREFIX/bin/qbittorrent-nox" --webui-port=8080 \
        >> "$HOME/qbittorrent.log" 2>&1 < /dev/null &
fi

Теперь один скрипт запускает все три сервиса:

  • SSH — доступ к файлам и командной строке;
  • Navidrome — музыкальная библиотека;
  • qBittorrent — торрент-загрузки.

Перед перезагрузкой полезно проверить синтаксис скрипта:

bash -n ~/.termux/boot/start-sshd

Если команда ничего не вывела, синтаксических ошибок не обнаружено.

Для корректного запуска после перезагрузки приложение Termux:Boot должно быть установлено и хотя бы один раз открыто вручную.

Важно: веб-интерфейс qBittorrent предоставляет доступ к управлению загрузками, поэтому не следует открывать порт 8080 напрямую в интернет. Для удалённого управления лучше использовать Tailscale и надёжный пароль.

8. Что получилось в итоге

В результате старый Redmi 13C превратился в небольшой домашний сервер.

Теперь у меня есть:

  • Файловый сервер: внутренняя память и microSD доступны по SSH/SFTP как сетевые диски.
  • Музыкальный сервер: Navidrome объединяет музыку из двух источников в единую библиотеку.
  • Музыкальный клиент: Navic и Symfonium позволяют слушать собственную музыку с основного смартфона.
  • Торрент-сервер: qBittorrent-nox скачивает файлы на карту памяти и управляется через браузер.
  • Удалённый доступ: Tailscale позволяет обращаться к сервисам вне домашней сети без проброса портов на роутере.
  • Автозапуск: Termux:Boot запускает SSH, Navidrome и qBittorrent после загрузки Android.

Всё это работает на уже имеющемся смартфоне — без root-доступа, аренды отдельного сервера и дополнительных затрат на оборудование.

Конечно, Redmi 13C не заменит полноценный NAS или Linux-сервер. Android накладывает ограничения на фоновые процессы, доступ к накопителям и автоматический запуск приложений. Но для личных задач мощности телефона вполне достаточно.

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