|
|
Вверх #1 |
3Dnews fanАвтор темы Регистрация: 13.09.2016
Адрес: Citizen of the World
|
Домашний NAS (один из вариантов)
Наконец-то созрел, чтобы рассказать о своей полусамосборной файлопомойке.
Дисклеймер. Здесь поделюсь своими мыслями, техническими решениями и опишу, почему такой путь самурая выбрал. Всё нижеизложенное не есть истина в первой инстанции, а всего лишь жонглирование между ценой, трудоёмкостью и тз, но может кому-то понравятся некоторые технические моменты, поэтому и выкладываю сие. Ценники в рублях, конечный продублирую в долларах. ТЗ. Без ТЗ - результат хз (с) Так что тут без него никак, хотя оно наипростейшее: дешёвая мультимедийная файлопомойка, на которую не страшно посмотреть. Ну и реального доступного места от 10TiB, всё же все мои потребители контента могут воспроизводить 4к, да и какой-никакой запас контента должен быть. Никаких рейдов, ибо высокая доступность не нужна. Эта файлопомойка является ответом на уход Нетфликсов/Амазонов/etc, тут на >90% контент будет состоять из фильмов и сериалов. Бекапы? Вероятны для оставшихся <10%, но без изысканных решений, простой rsync на внешний das. Железо. Уже давно присматривался к китайским nas'ам, но то ценник заоблачный, то железо слабенькое, особенно сетевая часть. По факту следил за эволюцией Kingnovy R1/AOOSTAR R1/TAPTON R1/CHATREEY R1, там много клонов этой платформы на разных процах. Очень хотелось на райзене r7, но это сразу ставило крест на ТЗ, где во главе стоял ценник, так что мониторил варианты на Intel N100. Что мне не нравилось в варианте на Intel: слабая сетевая часть (1-2 гигабитных интерфейса) и высокий ценник, если без скидок. Рядовая цена была около 25к, что много для данной платформы, что по мне. Но порой на Али проскакивают акции и сие железо можно взять за ~15к, что уже адекватно. И вот как-то звёзды сложились очень удачно и на просторах Али нашёл вариант за 15к, так ещё с intel i226v сдвоенной сетевухой, т.е. 2.5Гб/с врывается в нашу жизнь с двух ног за очень "вкусный" прайс. Решено было брать безотлагательно, по итогу не пожалел. Вот тут можно найти обзор это коробки. Если тезисно, то: дёшево, сердито, биос глючный, охлад надо доводить до ума, но своих денег стоит. В свой вариант добавил 16ГБ RAM, бо для файлопомойки этого хватает с головой. Ну и вентилятор заменил на ID-COOLING TF-9215-W. Диски. Это боль в моя дырка зад...ца (с) Самая затратная часть бюджета. Локальные ценники ни в какие ворота, а с учётом обрезанной годовой гарантии даже не рассматривал локальный ритейл как вариант. В статье Собираем бюджетный домашний NAS на 14 ТБ, которая стала для меня стартовой точкой для сбора файлопомойки, как раз обсуждается вариант покупки б/у дисков за рубежом, но отталкиваясь от статистики Backblaze. Хотел повторить всё 1-в-1, но варианты на 14ТБ резко стали невыгодны, видимо "хабраэффект" на Али сработал, пришлось брать Exos X12, которые не так хороши в статистике Backblaze, но показывали лучшее отношение цены/объём на тот момент. Оба диска в среднем вышли по 13к. Пробил их по серийнику - не retail вариант и были поставлены в составе каких-то серваков, дата производства - оба январь 2024, смарт сброшен. Посмотрим, как себя поведут со временем, пока всё ок. Итого: 2х12ТБ за 26к. Системный диск. Тут m.2 nvme без вариантов. Intel N100 поддерживает только pcie 3.0, так что можно было не гнаться за скоростью, а выбрать проверенный вариант. Там же на Али нашёл WD Black SN770 на 1ТБ за 7к. Пробил по серийнику: выпущен в мае 2024, 5 лет гарантии на Материковом Китае ![]() В планах хочу туда слетать, так что гарантия условно-рабочая ![]() Софт. Надо выбирать ОС, которую хорошо знает твой друг-админ (с) Тут как бы само напрашивается либо OMV, либо Truenas, либо Xpenology. Но у самурая свой путь, выбрал ОС общего назначения в лице Alpine Linux, ибо легковесная и я всё собираюсь докеризировать в ней. По-классике настроил связку zsh + oh-my-zsh + powerlevel10k, нужных мне плагинов накидал, современных тулов (docker + docker compose, lazydocker, btop, ncdu, duf, etc) и готово, осталось подготовить docker compose файлы с подмонтированными дисками. В докере крутятся: самба с RO для всех (это домашняя мультимедийная файлопомойка), transmission и jellyfin. Последнее в связке в впн на роутере даёт возможность смотреть фильмы извне даже на плохих каналах, т.к. jellyfin умеет транскодить "на лету", чтобы подстраиваться под пропускную способность. Единственное что, так это лаг с воспроизведением и перемоткой секунд по 10, но я ещё с Intel QSV не разобрался, должно ускорить всё это, если правильно приготовить. Сеть. Самый короткий железный абзац: на Али купил sfp модуль для роутера на 2.5Гб/с за 1.5к. Работает на полной скорости. Единственное что, так это надо выключить Energy Efficient Ethernet, ибо i226v. Итого. Конечная стоимость: 55к или ~600$ за всё. Доступного места 21.5TiB. Доступа к фотографиям сего чуда пока нет, добавлю, если будет нужда. Советы, вопросы, критика приветствуются. |
|
|
|
|
|
Вверх #3 |
3Dnews fanАвтор темы Регистрация: 13.09.2016
Адрес: Citizen of the World
|
Цитата
(Multimedia) »
Зачем столько?
|
|
|
|
|
|
Вверх #4 |
ЗапрещенныйРегистрация: 28.05.2024
Адрес: Germany
|
Цитата
(VitohA) »
Люблю смотреть в качестве. Три части Крёстного Отца, два Аватара и сериал Друзья - уже террабайт
|
|
|
|
|
|
Вверх #6 |
3Dnews fanАвтор темы Регистрация: 13.09.2016
Адрес: Citizen of the World
|
Multimedia
На телевизорах, оба 4к. И у обоих на плеерах установлен coreelec, а на файлопомойке микро-база для синка библиотеки и прогресса между ними. Как тут: KODI: собираем удобный и функциональный медиацентр для дома. Часть 6. MariaDB и синхронизация медиатеки |
|
|
|
|
|
Вверх #8 |
3Dnews fanАвтор темы Регистрация: 13.09.2016
Адрес: Citizen of the World
|
Цитата
(Lesnik75) »
2.5 на сколько избыточно? На телевизорах то поди 100
|
|
|
|
|
|
Вверх #9 |
Сам ты IMHO!Регистрация: 08.02.2003
Адрес: Nsk
|
Цитата
(VitohA) »
и на 100, последнюю надо менять тоже на гигабит, а то на крупных файлах лагает из-за сети.
__________________
и тут пришел лесник ;) |
|
|
|
|
|
Вверх #10 |
3Dnews fanАвтор темы Регистрация: 13.09.2016
Адрес: Citizen of the World
|
Цитата
(Lesnik75) »
Так и я за то же. Хотя на мелких файлах не лагает, факт )))
|
|
|
|
|
|
Вверх #11 |
3Dnews fanАвтор темы Регистрация: 13.09.2016
Адрес: Citizen of the World
|
И пару слов о софте/багах/etc.
Т.к. у меня всё докеризировано, а файлопомоечные диски не рутовые, то нужно пофиксить демон докера, чтобы он ждал маунта всех дисков. В противном случае докер порой поднимается быстрее, нежели монтируются диски, легковесность дистрибутива даёт о себе знать. Так что правим openrc конфиг докера в /etc/runlevels/default/docker, добавив dev-mount в depend() секцию. По итогу получаем такой результат: СПОЙЛЕР »
Код:
#!/sbin/openrc-run
supervisor=supervise-daemon
name="Docker Daemon"
description="Persistent process that manages docker containers"
description_reload="Reload configuration without exiting"
command="${DOCKERD_BINARY:-/usr/bin/dockerd}"
command_args="${DOCKER_OPTS}"
DOCKER_LOGFILE="${DOCKER_LOGFILE:-/var/log/${RC_SVCNAME}.log}"
DOCKER_ERRFILE="${DOCKER_ERRFILE:-${DOCKER_LOGFILE}}"
DOCKER_OUTFILE="${DOCKER_OUTFILE:-${DOCKER_LOGFILE}}"
if [ "$DOCKER_ERRFILE" = "$DOCKER_OUTFILE" ]; then
LOGPROXY_OPTS="$LOGPROXY_OPTS -m"
fi
export \
LOGPROXY_CHMOD="${LOGPROXY_CHMOD:-0644}" \
LOGPROXY_LOG_DIRECTORY="${LOGPROXY_LOG_DIRECTORY:-/var/log}" \
LOGPROXY_ROTATION_SIZE="${LOGPROXY_ROTATION_SIZE:-104857600}" \
LOGPROXY_ROTATION_TIME="${LOGPROXY_ROTATION_TIME:-86400}" \
LOGPROXY_ROTATION_SUFFIX="${LOGPROXY_ROTATION_SUFFIX:-.%Y%m%d%H%M%S}" \
LOGPROXY_ROTATED_FILES="${LOGPROXY_ROTATE_FILES:-5}"
output_logger="log_proxy $LOGPROXY_OPTS $DOCKER_OUTFILE"
error_logger="log_proxy $LOGPROXY_OPTS $DOCKER_ERRFILE"
extra_started_commands="reload"
rc_ulimit="${DOCKER_ULIMIT:--c unlimited -n 1048576 -u unlimited}"
retry="${DOCKER_RETRY:-TERM/60/KILL/10}"
if [ -e /etc/profile.d/proxy.sh ]; then
. /etc/profile.d/proxy.sh
fi
depend() {
need sysfs cgroups net dev-mount
after firewall
}
start_pre() {
checkpath -f -m 0644 -o root:docker "$DOCKER_ERRFILE" "$DOCKER_OUTFILE"
}
reload() {
ebegin "Reloading configuration"
$supervisor $RC_SVCNAME --signal HUP
eend $?
}
Весь софт докеризирован для лёгкого переноса между серверами и восстановления. Даже самба ![]() Всё добро расположено в одном docker-compose,yaml файле, примерно такого вида: СПОЙЛЕР »
Код:
services:
samba:
image: samba
restart: ${RESTART_POLICY}
build:
context: .
dockerfile: docker/samba
environment:
- PUID=1000
- PGID=1000
- TZ=${TIMEZONE:-Europe/Moscow}
volumes:
- ${DOWNLOAD_FOLDER}:/downloads
- ./config/samba/smb.conf:/etc/samba/smb.conf:ro
ports:
- 445:445
deploy:
resources:
limits:
cpus: '0.5'
memory: 500M
transmission:
image: transmission
user: vitoha
restart: ${RESTART_POLICY}
build:
context: .
dockerfile: docker/transmission
environment:
- PUID=1000
- PGID=1000
- TZ=${TIMEZONE:-Europe/Moscow}
volumes:
- ./config/transmission:/transmission/config
- ${DOWNLOAD_FOLDER}:/downloads
ports:
- ${WEB_UI_PORT:-9091}:9091
- ${TORRENT_PORT:-64320}:64320
- ${TORRENT_PORT:-64320}:64320/udp
deploy:
resources:
limits:
cpus: '1'
memory: 4G
jellyfin:
image: lscr.io/linuxserver/jellyfin:10.9.11
container_name: jellyfin
devices:
- /dev/dri
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- DOCKER_MODS=linuxserver/mods:jellyfin-opencl-intel
volumes:
- ./config/jellyfin:/config
- ${DOWNLOAD_FOLDER}/tvseries:/data/tvshows
- ${DOWNLOAD_FOLDER}/movies:/data/movies
ports:
- 8096:8096
- 8920:8920
- 7359:7359/udp
- 1900:1900/udp
restart: ${RESTART_POLICY}
deploy:
resources:
limits:
cpus: '2'
memory: 1G
И содержимое .env файла, откуда подтягиваются переменные (только там что-то и надо править): СПОЙЛЕР »
Код:
RESTART_POLICY=always DOWNLOAD_FOLDER=/fileshare Transmission и samba билдятся на локальной машине, вот их контент: samba СПОЙЛЕР »
Код:
FROM alpine:edge RUN apk add --no-cache samba ENTRYPOINT ["smbd", "-F", "--no-process-group"] transmission (с закомменченым примером смены веб-интерфейса) СПОЙЛЕР »
Код:
FROM alpine:edge
ENV USER_ID=1000
ENV GROUP_ID=1000
ENV USER_NAME=vitoha
ENV GROUP_NAME=vitoha
RUN addgroup -g $GROUP_ID $GROUP_NAME && \
adduser --shell /sbin/nologin --disabled-password \
--no-create-home --uid $USER_ID --ingroup $GROUP_NAME $USER_NAME
WORKDIR /app
RUN apk add --no-cache transmission-daemon wget unzip
#RUN wget https://github.com/Secretmapper/combustion/archive/release.zip && unzip release.zip
#ENV TRANSMISSION_WEB_HOME='/app/combustion-release'
ENTRYPOINT ["/usr/bin/transmission-daemon", "--foreground", "--config-dir", "/transmission/config"]
Да, не везде "красота", но это в процессе, т.к. надо добавить ещё jakett и Radarr для автоматизации автодобавления фильмов в библиотеку, а потом только оптимизировать compose. Ибо преждевременная оптимизация - корень всех бед. По-факту система работает и работает без сбоев, после ребута автоматически поднимается очень быстро, но работы много впереди: и сервисов добавить, и нормально переписать композ, и адекватно добавить второй диск, который пока что только для "красоты". По ресурсам: чисто для файлопомойки с торрентами хватит и 4ГБ ОЗУ, у меня потребление чуть повыше, т.к. ещё много, что там в тестовых целях крутится. |
|
|
|
|
|
Вверх #14 |
МодераторРегистрация: 17.03.2004
Адрес: K-PAX
|
Цитата
(VitohA) »
докеризировано
|
|
|
|
|
|
Вверх #17 |
МодераторРегистрация: 17.03.2004
Адрес: K-PAX
|
Цитата
(Lesnik75) »
XaXoL
Это контейнеры такие. |
|
|
|
|
|
Вверх #18 |
Сам ты IMHO!Регистрация: 08.02.2003
Адрес: Nsk
|
XaXoL
А что не понятно то? Специализированное ПО, разворачивающее конкретное приложение в автономном контейнере. Линуксовая тема, позволяющая избежать нестыковок и лишних костылей за счет костылей не лишних )))
__________________
и тут пришел лесник ;) |
|
|
|
|
|
Вверх #19 |
3Dnews fanАвтор темы Регистрация: 13.09.2016
Адрес: Citizen of the World
|
Цитата
(Lesnik75) »
Линуксовая тема, позволяющая избежать нестыковок и лишних костылей за счет костылей не лишних )))
![]() Цитата
(Multimedia) »
Я тоже подумал о файлопомойке,но как выяснилось мне это не нужно,посмотрел и удалил,нафиг их хранить? Сейчас у меня 3 тб мне хватит
Последний раз редактировалось VitohA; 24.11.2024 в 18:17. |
|
|
|
|
|
Вверх #20 |
Сам ты IMHO!Регистрация: 08.02.2003
Адрес: Nsk
|
Цитата
(VitohA) »
Не только линуксовая, в винде тоже есть.
__________________
и тут пришел лесник ;) |
|
|
|