- Еще один домашний медиасервер на базе Docker
- Железо
- Операционная система
- Программное обеспечение
- Хранилище для TimeMachine + общий ресурс для Mac OS X
- Общий ресурс для Windows
- Торрент клиент и Мониторинг обновляющихся торрентов и Персональное облачное хранилище и Медиасервер
- Linux server transmission docker
Еще один домашний медиасервер на базе Docker
Добрый день Хабр. На написание этой статьи меня сподвигло закрытие довольно известных в UA-IX ресурсов ex.ua и fs.to. Поскольку доблестные правоохранители не озаботились предоставлением какой-либо достойной альтернативы, было принято решение взять процесс в свои руки, к тому же давно хотелось организовать домашнее хранилище/файлопомойку не зависящее от внешних провайдеров. В процессе реализации было перепробовано довольно много разных систем, но в итоге все выстроилось именно так, а не иначе. Мнение субъективное, реализация доступная. Сама статья рассчитана на новичков которым необходимо просто работающее решение, или на тех кто задумался о своем медиасервере, но еще не определился с реализацией.
Итак решение принято, начнем.
Железо
Критерии выбора были достаточно простыми: компактность, нормальная работа с WiFi, тишина. После изучения рынка железа, выбор которого сейчас дает самые широкие возможности, осталось несколько кандидатов. А именно — HP MicroServer G8, ASUS VivoMini VC65R, и само собой Rapsberry Pi 3.
После изучения доступного софта для создания медиасервера было решено было остановиться на ASUS VivoMini VC65R, так как Rapsberry, который базируется на ARM, не поддерживает транскодинг, а доступные варианты MicroServer были укомплектованы достаточно старым Celeron G1610T, который мог не обеспечить достаточной производительности. Итак, был приобретен VC65R и 4хSamsung ST1500LM006 1.5TB.
Операционная система
С одной стороны — на рынке присутствует довольно большое количество специализированных дистрибутивов, как то FreeNAS, NAS4Free, OpenMediaVault, Rockstor. С другой — хотелось бы полностью контролировать систему, и по возможности не использовать ненужные сервисы. Так что выбор остановился на Ubuntu Server 16.04 LTS. В целом — получившаяся конфигурация благодаря Docker не зависит от операционной системы, но некоторые сервисы так или иначе завязаны на дистрибутив, так что если вам захочется повторить данную конфигурацию — имейте это в виду.
Для организации файлов была выбрана следующая структура директорий:
/data — отдельный logical volume для хранения медиа данных и бекапов
/data/Media — медиаданные
/data/TimeMachine — бекапы TimeMachine
/opt/mediacenter — отдельный logical volume для хранения данных сервисов
Сам процесс установки описывать не стоит, так как он зависит от того дистрибутива который вы выберете, единственный нюанс в том, что поскольку было бы неплохо работать с файлами не беспокоясь о разрешениях доступа предоставим нашему пользователю доступ с помощью setfacl
Программное обеспечение
Итак, какие требования мы можем выставить к подобному медиасерверу, с учетом того что присутствует широкий ряд техники под Mac OS X, iOS, Windows, и Android:
— Хранилище для TimeMachine + общий ресурс для Mac OS X
— Общий ресурс для Windows
— Торрент клиент
— Мониторинг обновляющихся торрентов
— Персональное облачное хранилище
— Медиасервер
Начнем по порядку.
Хранилище для TimeMachine + общий ресурс для Mac OS X
Установка весьма тривиальна, как впрочем и все описанное далее.
С помощью этой команды мы устанавливаем open source реализации AppleTalk протокола и Bonjour. Теперь осталось только экспортировать директорию /data/Media как доступный общий ресурс, и директорию /data/TimeMachine как доступную для TimeMachine backup.
Для этого отредактируем файл /etc/netatalk/AppleVolumes.default добавив в конце
Для ограничения доступного для TimeMachine места добавлена опция
Для ограничения доступа для конкретного пользователя добавлена опция
Общий ресурс для Windows
Поскольку в моей сети присутствует Windows мне нужна также и Samba. Здесь все сверх просто, благо руководств по использованию Samba в сети очень много. Тем не менее для полноты статьи:
И содержимое smb.conf
Торрент клиент и Мониторинг обновляющихся торрентов и Персональное облачное хранилище и Медиасервер
Эти требования было решено объединить в одну часть, так как все это реализовано на базе docker compose, и по сути представляют собой один файл благодаря которому все можно стартовать одной командой. Установку docker и docker-compose я пожалуй опущу, так как они не представляют собой ничего сложного и достаточно описаны на сайте docker.
Начнем с выбранного программного обеспечения:
В качестве торрент клиента будем использовать относительно легковесный Transmission.
Для мониторинга обновляющихся торрентов было выбрано на тестирование два решения специализирующихся на русскоязычном сегменте сети, а именно TorrentMonitor и Monitorrent. Сейчас они оба работают на моем медиасервере, и в результате останется тот что покажет себя наиболее оптимальным образом. Кстати, авторы обоих решений присутствуют на Хабре.
В качестве персонального дропбокса будем использовать ownCloud. Я не уверен что это именно то решение которое подойдет мне на все сто процентов, но на данном этапе оно меня устраивает. В качестве альтернативы можно использовать NextCloud, Pydio или Seafile. На самом деле выбор гораздо шире и на рынке представлено довольно много достойных альтернатив.
В качестве медиасервера будем использовать Plex. Также была апробирована альтернатива под названием Emby, но мне она не пришлась по душе.
Для всего вышеперечисленного уже присутствуют готовые образы docker, единственное что мне не понравился образ TorrentMonitor, так что было решено написать свой.
Сам репозиторий лежит здесь
UPD: Мой пулл реквест в nawa/torrentmonitor был смерджен, поэтому статья обновлена.
Итак, образы готовы, напишем docker-compose.yml
UPD2: Для тех у кого не работает DLNA можно заккоментировать секцию ports и раскомментировать network_mode: host
Теперь необходимо создать структуру директорий для хранения метаданных и медиаданных:
И для полного удобства создадим systemd сервис
[Unit]
Description=Mediacenter Service
After=docker.service
Requires=docker.service
[Service]
ExecStartPre=-/usr/local/bin/docker-compose -f /opt/mediacenter/docker-compose.yml down
ExecStart=/usr/local/bin/docker-compose -f /opt/mediacenter/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /opt/mediacenter/docker-compose.yml stop
Docker compose выкачает образы с docker hub и запустит наши сервисы. Теперь они будут доступны по адресам:
Plex: http:// :32400
Transmission: http:// :9091
TorrentMonitor: http:// :8080
Monitorrent: http:// :6687
ownCloud: http:// :8081
Ну что же, вроде все запустилось и работает. Теперь можно начать тестирование, например сохранить .torrent файл в директорию Torrents. Transmission должен начать закачку, и в скором времени выкачанные файлы появятся в директории Downloads/complete.
Теперь остался последний шаг, облегчить медиасерверу работу по распознаванию скачанных фильмов/сериалов/музыки. Для этого используем отличный продукт под названием FileBot который умеет переименовывать файлы базируясь на информации из открытых источников вроде TheTVDB.
Ну и для удобства переименования напишем пару алиасов:
Теперь, например для работы с сериалом можно использовать команду:
Если результат работы нас не устраивает, можем модифицировать условия поиска с помощью опций —q и —filter. Если же результат работы нас устроит — выполняем команду:
В результате файлы нашего сериала окажутся в директории /data/Media/TV Shows/Series Name. Ну и если мы работаем с онгоингом или хотим продолжить раздачу можно выполнить команду:
В результате в директории /data/Media/TV Shows/Series Name окажутся хардлинки.
В общем такой вот тривиальный способ как быстро и безболезненно сделать свой медиасервер.
Источник
Linux server transmission docker
Copy raw contents
Copy raw contents
The LinuxServer.io team brings you another container release featuring:
- regular and timely application updates
- easy user mappings (PGID, PUID)
- custom base image with s6 overlay
- weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
- regular security updates
- Blog — all the things you can do with our containers including How-To guides, opinions and much more!
- Discord — realtime support / chat with the community and the team.
- Discourse — post on our community forum.
- Fleet — an online web interface which displays all of our maintained images.
- GitHub — view the source for all of our repositories.
- Open Collective — please consider helping us by either donating or contributing to our budget
Transmission is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, µTP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more.
Our images support multiple architectures such as x86-64 , arm64 and armhf . We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.
Simply pulling lscr.io/linuxserver/transmission should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
The architectures supported by this image are:
Architecture | Tag |
---|---|
x86-64 | amd64-latest |
arm64 | arm64v8-latest |
armhf | arm32v7-latest |
Webui is on port 9091, the settings.json file in /config has extra settings not available in the webui. Stop the container before editing it or any changes won’t be saved.
If you choose to use transmission-web-control as your default UI, just note that the origional Web UI will not be available to you despite the button being present.
Securing the webui with a username/password.
Use the USER and PASS variables in docker run/create/compose to set authentication. Do not manually edit the settings.json to input user/pass, otherwise transmission cannot be stopped cleanly by the s6 supervisor.
Updating Blocklists Automatically
This requires «blocklist-enabled»: true, to be set. By setting this to true, it is assumed you have also populated blocklist-url with a valid block list.
The automatic update is a shell script that downloads a blocklist from the url stored in the settings.json, gunzips it, and restarts the transmission daemon.
The automatic update will run once a day at 3am local server time.
Use WHITELIST to enable a list of ip as whitelist. This enable support for rpc-whitelist . When WHITELIST is empty support for whitelist is disabled.
Use HOST_WHITELIST to enable an list of dns names as host-whitelist. This enable support for rpc-host-whitelist . When HOST_WHITELIST is empty support for host-whitelist is disabled.
Here are some example snippets to help you get started creating a container.
:/watch ports: — 9091:9091 — 51413:51413 — 51413:51413/udp restart: unless-stopped «>
:/watch \ —restart unless-stopped \ lscr.io/linuxserver/transmission «>
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate : respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host’s IP on port 8080 outside the container.
Parameter | Function |
---|---|
-p 9091 | WebUI |
-p 51413 | Torrent Port TCP |
-p 51413/udp | Torrent Port UDP |
-e PUID=1000 | for UserID — see below for explanation |
-e PGID=1000 | for GroupID — see below for explanation |
-e TZ=Europe/London | Specify a timezone to use EG Europe/London. |
-e TRANSMISSION_WEB_HOME=/combustion-release/ | Specify an alternative UI options are /combustion-release/ , /transmission-web-control/ , /kettu/ and /flood-for-transmission/ . |
-e USER=username | Specify an optional username for the interface |
-e PASS=password | Specify an optional password for the interface |
-e WHITELIST=iplist | Specify an optional list of comma separated ip whitelist. Fill rpc-whitelist setting. |
-e HOST_WHITELIST=dnsnane list | Specify an optional list of comma separated dns name whitelist. Fill rpc-host-whitelist setting. |
-v /config | Where transmission should store config files and logs. |
-v /downloads | Local path for downloads. |
-v /watch | Watch folder for torrent files. |
Environment variables from files (Docker secrets)
You can set any environment variable from a file by using a special prepend FILE__ .
Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.
Umask for running applications
For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it’s value it does not add. Please read up here before asking for support.
User / Group Identifiers
When using volumes ( -v flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID .
Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.
In this instance PUID=1000 and PGID=1000 , to find yours use id user as below:
We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.
- Shell access whilst the container is running: docker exec -it transmission /bin/bash
- To monitor the logs of the container in realtime: docker logs -f transmission
- container version number
- docker inspect -f ‘<< index .Config.Labels "build_version" >>’ transmission
- image version number
- docker inspect -f ‘<< index .Config.Labels "build_version" >>’ lscr.io/linuxserver/transmission
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (ie. nextcloud, plex), we do not recommend or support updating apps inside the container. Please consult the Application Setup section above to see if it is recommended for the image.
Below are the instructions for updating containers:
Via Docker Compose
- Update all images: docker-compose pull
- or update a single image: docker-compose pull transmission
- Let compose update all containers as necessary: docker-compose up -d
- or update a single container: docker-compose up -d transmission
- You can also remove the old dangling images: docker image prune
- Update the image: docker pull lscr.io/linuxserver/transmission
- Stop the running container: docker stop transmission
- Delete the container: docker rm transmission
- Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your /config folder and settings will be preserved)
- You can also remove the old dangling images: docker image prune
Via Watchtower auto-updater (only use if you don’t remember the original parameters)
Pull the latest image at its tag and replace it with the same env variables in one run:
You can also remove the old dangling images: docker image prune
Note: We do not endorse the use of Watchtower as a solution to automated updates of existing Docker containers. In fact we generally discourage automated updates. However, this is a useful tool for one-time manual updates of containers where you have forgotten the original parameters. In the long term, we highly recommend using Docker Compose.
Image Update Notifications — Diun (Docker Image Update Notifier)
- We recommend Diun for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
If you want to make local modifications to these images for development purposes or just to customize the logic:
The ARM variants can be built on x86_64 hardware using multiarch/qemu-user-static
Источник