1. Блог
  2. Мануали

Tube Archivist: власний архів YouTube на сервері

Tube Archivist: власний архів YouTube на сервері

Tube Archivist — медіасервер для особистого архіву YouTube. Він завантажує окремі відео, плейлисти й цілі канали, зберігає описи, обкладинки та субтитри, індексує все це для пошуку й дає змогу дивитися ролики в браузері без реклами та без підключення до YouTube. Корисно, коли потрібно зберегти навчальні курси, записи конференцій або відео, які можуть зникнути.

Що вміє Tube Archivist

  • підписка на канали й плейлисти з автоматичним завантаженням нових відео;
  • черга завантаження з вибором якості;
  • повнотекстовий пошук за назвами, описами й субтитрами;
  • позначки про перегляд і продовження з місця зупинки;
  • вбудований плеєр і розширення для браузера, яке додає відео в архів однією кнопкою;
  • інтеграція з медіасерверами Jellyfin і Plex.

Вимоги до сервера

Tube Archivist використовує Elasticsearch, тому до пам’яті він вибагливіший за більшість self-hosted сервісів.

  • Пам’ять: від 4 ГБ, з яких не менше ніж 2 ГБ потрібно Elasticsearch.
  • Процесор: від 2 ядер.
  • Диск: визначається розміром архіву. Година відео в якості 1080p займає приблизно 1–2 ГБ.
  • Архітектура: готовий образ Elasticsearch від проєкту зібрано лише для amd64.

Для архіву зручно взяти VPS із великим диском. Знадобляться Docker і Docker Compose — див. інструкцію зі встановлення.

Крок 1. Підготовка системи

Elasticsearch потребує збільшеного ліміту відображень пам’яті. Без цього параметра контейнер не запуститься:

echo 'vm.max_map_count=262144' | sudo tee /etc/sysctl.d/99-elasticsearch.conf
sudo sysctl --system

Крок 2. Файл Compose

mkdir -p ~/tubearchivist && cd ~/tubearchivist

Створіть docker-compose.yml:

services:
  tubearchivist:
    container_name: tubearchivist
    restart: unless-stopped
    image: bbilly1/tubearchivist
    ports:
      - "127.0.0.1:8000:8000"
    volumes:
      - media:/youtube
      - cache:/cache
    environment:
      - ES_URL=http://archivist-es:9200
      - REDIS_CON=redis://archivist-redis:6379
      - TA_HOST=https://tube.example.com
      - TA_USERNAME=admin
      - TA_PASSWORD=надійний_пароль
      - ELASTIC_PASSWORD=інший_надійний_пароль
      - TZ=Europe/Kyiv
    depends_on:
      - archivist-es
      - archivist-redis

  archivist-redis:
    image: redis
    container_name: archivist-redis
    restart: unless-stopped
    expose:
      - "6379"
    volumes:
      - redis:/data
    depends_on:
      - archivist-es

  archivist-es:
    image: bbilly1/tubearchivist-es
    container_name: archivist-es
    restart: unless-stopped
    environment:
      - "ELASTIC_PASSWORD=інший_надійний_пароль"
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      - "xpack.security.enabled=true"
      - "discovery.type=single-node"
      - "path.repo=/usr/share/elasticsearch/data/snapshot"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es:/usr/share/elasticsearch/data
    expose:
      - "9200"

volumes:
  media:
  cache:
  redis:
  es:

На що звернути увагу:

  • TA_HOST — повна адреса, за якою ви відкриватимете сервіс, обов’язково з протоколом. У разі розбіжності вхід у систему не спрацює.
  • ELASTIC_PASSWORD має збігатися в обох сервісах.
  • TA_USERNAME і TA_PASSWORD — облікові дані для першого входу.
  • Том media зберігає завантажені відео. Щоб розмістити архів на окремому диску, замініть його на шлях до каталогу, наприклад /mnt/storage/youtube:/youtube.

Склад змінних змінюється від версії до версії, тому перед встановленням звірте файл з актуальним зразком у репозиторії проєкту tubearchivist/tubearchivist на GitHub.

Крок 3. Запуск

docker compose up -d
docker compose logs -f tubearchivist

Перший запуск триває одну-дві хвилини: Elasticsearch створює індекси. Коли в журналі з’явиться повідомлення про готовність вебсервера, сервіс доступний.

Крок 4. Доступ за доменом

Порт опубліковано лише на локальній адресі. Опублікуйте сервіс через зворотний проксі з HTTPS — у Nginx Proxy Manager або Nginx. Адреса має збігатися зі значенням TA_HOST.

Для швидкої перевірки без домену підійде SSH-тунель; у цьому разі вкажіть TA_HOST=http://localhost:8000:

ssh -L 8000:127.0.0.1:8000 root@203.0.113.10

Крок 5. Перші завантаження

Увійдіть із логіном і паролем із файлу Compose.

Окреме відео або плейлист. Відкрийте розділ Downloads, натисніть Add to download queue, вставте посилання або ідентифікатор і запустіть чергу кнопкою Start download.

Підписка на канал. У розділі Channels натисніть Subscribe to Channels і вставте посилання на канал. Потім у Downloads натисніть Rescan subscriptions — у чергу потраплять відео каналу.

Якість. Типово завантажується найкраща доступна якість, і архів швидко росте. У Settings → Application → Download Format можна обмежити роздільну здатність, наприклад 720p.

Розклад. У Settings → Scheduling налаштуйте автоматичну перевірку підписок і запуск черги — наприклад, раз на добу вночі.

Обхід обмежень YouTube

YouTube періодично обмежує завантаження з адрес дата-центрів: з’являються помилки з вимогою підтвердити, що ви не бот. У налаштуваннях застосунку можна імпортувати cookies свого акаунта й задати паузу між завантаженнями. Не завантажуйте сотні відео поспіль без пауз — це швидко призводить до тимчасового блокування.

Резервна копія та оновлення

Самі відео лежать у томі media у вигляді звичайних файлів. Індекс і метадані зберігаються знімками: у Settings → Application налаштуйте створення знімків за розкладом.

Оновлення:

cd ~/tubearchivist
docker compose pull
docker compose up -d

Перед оновленням прочитайте примітки до випуску: під час переходу між великими версіями змінюються змінні оточення й версія Elasticsearch.

Якщо не запускається

  • Контейнер archivist-es постійно перезапускається. Не задано vm.max_map_count або бракує пам’яті.
  • Помилка прав доступу до даних Elasticsearch. Якщо використовується каталог замість тому, призначте власника: chown 1000:0 -R шлях/до/каталогу.
  • Не вдається увійти. Значення TA_HOST не збігається з адресою в браузері.
  • Завантаження завершуються помилкою. Оновіть образ: разом із ним оновлюється завантажувач yt-dlp, який має встигати за змінами YouTube.

Юридичний бік

Завантаження відео може суперечити умовам використання YouTube й авторському праву. Використовуйте архів для особистого перегляду та для матеріалів, які ви маєте право зберігати, і не публікуйте свій екземпляр у відкритому доступі.

#tube archivist#youtube#self-hosted#docker#медіаархів

Ця стаття іншими мовами:EnglishРусский