В этой статье показано, как быстро развернуть медиа-стек из qBittorrent и Jellyfin на Ubuntu 24.04 с помощью Docker. Всё делается под пользователем gratz, временный пароль qBittorrent выводится в консоль после установки, а права Docker применяются автоматически.
1. Обновление пакетов системы
sudo apt update
sudo apt upgrade -y2. Создание пользователя
Создаём пользователя gratz и даём ему права sudo без запроса пароля:
sudo adduser gratz
sudo usermod -aG sudo gratz
sudo visudoВ открывшемся файле добавляем:
gratz ALL=(ALL) NOPASSWD:ALL3. Файл переменных окружения .env
Создаём файл .env в директории проекта:
# Путь к каталогу для медиа и загрузок
MEDIA_DIR=/home/gratz/media
# Порты для сервисов
QBITTORRENT_PORT=8080
JELLYFIN_PORT=80964. Docker Compose
Файл docker-compose.yml:
version: "3.8"
services:
  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Helsinki
      - WEBUI_PORT=${QBITTORRENT_PORT}
    volumes:
      - ${MEDIA_DIR}/downloads:/downloads
      - ./config/qbittorrent:/config
    ports:
      - "${QBITTORRENT_PORT}:${QBITTORRENT_PORT}"
    restart: unless-stopped
  jellyfin:
    image: lscr.io/linuxserver/jellyfin:latest
    container_name: jellyfin
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Helsinki
    volumes:
      - ${MEDIA_DIR}/downloads:/media
      - ./config/jellyfin:/config
    ports:
      - "${JELLYFIN_PORT}:8096"
    restart: unless-stopped5. Скрипт установки setup.sh
#!/bin/bash
set -e
# === Определяем каталог скрипта и переходим в него ===
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$DIR"
echo "=== Установка media-stack ==="
# === Установка Docker ===
if ! command -v docker > /dev/null; then
  echo "Docker не найден. Устанавливаю из официального репозитория..."
  sudo apt remove -y docker docker-engine docker.io containerd runc || true
  sudo apt update
  sudo apt install -y ca-certificates curl gnupg lsb-release
  sudo install -m 0755 -d /etc/apt/keyrings
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  sudo apt update
  sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  sudo systemctl enable --now docker
else
  echo "Docker найден."
fi
# === Добавление пользователя в группу docker ===
if groups $USER | grep -q '\bdocker\b'; then
  echo "Пользователь $USER уже в группе docker."
else
  echo "Добавляю $USER в группу docker..."
  sudo usermod -aG docker $USER
  echo "Перезапускаем скрипт с применением группы docker..."
  exec sg docker "$0"
  exit
fi
# === Проверка переменных окружения ===
: "${MEDIA_DIR:=$DIR/media}"       # Если MEDIA_DIR не задан, создаём папку media внутри скрипта
: "${JELLYFIN_PORT:=8096}"         # Порт по умолчанию
: "${QBITTORRENT_PORT:=8080}"      # Порт по умолчанию
# === Создание директорий ===
mkdir -p ./config/qbittorrent ./config/jellyfin "${MEDIA_DIR}/downloads"
# === Запуск контейнеров ===
echo "=== Запуск docker compose ==="
docker compose up -d
# === Ждём запуск qBittorrent ===
echo "⏳ Ждём 5 секунд, пока qBittorrent запустится..."
sleep 5
# === Вывод информации ===
echo "✅ Готово!"
echo "- Jellyfin: http://localhost:${JELLYFIN_PORT}"
echo "- qBittorrent: http://localhost:${QBITTORRENT_PORT}"
echo ""
echo "Временный пароль qBittorrent:"
docker logs qbittorrent 2>&1 | grep 'temporary password' || echo "Лог qBittorrent ещё не готов, попробуйте команду позже."
echo ""
echo "После входа смените пароль в настройках qBittorrent."
6. Запуск установки
chmod +x setup.sh
./setup.sh7. Скрипт автоматически
- Устанавливает Docker, если его нет.
- Добавляет пользователя в группу docker.
- Создаёт необходимые каталоги для конфигураций и загрузок.
- Поднимает контейнеры qBittorrent и Jellyfin через Docker Compose.
- Выводит в консоль временный пароль qBittorrent.
8. Вход в сервисы
- Jellyfin: http://<IP_сервера>:8096
- qBittorrent WebUI: http://<IP_сервера>:8080(используйте временный пароль из консоли)
После первого входа рекомендуется сменить пароль qBittorrent через настройки.
9. Советы по правам и папкам
Если появляются ошибки с доступом к папкам:
sudo chown -R gratz:gratz /home/gratz/media/downloadsЧтобы снова узнать временный пароль qBittorrent:
docker logs qbittorrent 2>&1 | grep 'temporary password'10. Итог
Теперь вы имеете полностью рабочий медиа-стек на Ubuntu 24.04:
- qBittorrent для скачивания торрентов
- Jellyfin для просмотра медиа
- Всё работает через Docker, легко обновляется и управляется
Скрипт делает установку максимально автоматизированной и безопасной.