From 44c19e2b45fc0b2302021d78fb3b14b93d3ef968 Mon Sep 17 00:00:00 2001 From: vrubelroman Date: Mon, 27 Oct 2025 23:52:27 +0300 Subject: [PATCH] feat: Ubuntu single-command deployment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed qBittorrent port configuration: 8080 → 8082 - Updated docker-compose.yml: TorAPI-qBittorrent uses host.docker.internal - Moved TELEGRAM_BOT_TOKEN to environment variables - Created start_ubuntu.sh for automated deployment - Added qBittorrent systemd service with autostart - Updated env.example with correct port (8082) - Added UBUNTU_DEPLOYMENT.md documentation All services now start with: ./start_ubuntu.sh --- UBUNTU_DEPLOYMENT.md | 129 +++++++++++++++++++++++++++++++++++ docker-compose.yml | 7 +- env.example | 4 +- start_ubuntu.sh | 155 +++++++++++++++++++++++++++++++++++++++++++ telegram_bot.py | 4 +- 5 files changed, 293 insertions(+), 6 deletions(-) create mode 100644 UBUNTU_DEPLOYMENT.md create mode 100755 start_ubuntu.sh diff --git a/UBUNTU_DEPLOYMENT.md b/UBUNTU_DEPLOYMENT.md new file mode 100644 index 0000000..02a3db8 --- /dev/null +++ b/UBUNTU_DEPLOYMENT.md @@ -0,0 +1,129 @@ +# Ubuntu Deployment Guide + +## Quick Start + +Для запуска всех сервисов на Ubuntu 24 одной командой: + +```bash +cd /home/vrubel/PROJECTS/TorrentFilms/findFilms +./start_ubuntu.sh +``` + +## What the Script Does + +Скрипт `start_ubuntu.sh` автоматически: + +1. **Проверяет и устанавливает Docker** (если нужно) +2. **Проверяет и устанавливает qBittorrent-nox** (если нужно) +3. **Настраивает systemd сервис** для qBittorrent на порту 8082 +4. **Включает автозапуск** qBittorrent при загрузке системы +5. **Создает Docker сеть** `torrentvideo_default` +6. **Запускает все Docker контейнеры** с автоперезапуском + +## Services + +После запуска будут доступны: + +- **Веб-интерфейс**: http://localhost:8089 +- **qBittorrent**: http://localhost:8082 (admin/vrubel07) +- **Telegram Bot**: @your_bot_username + +## Management + +### Stop All Services +```bash +docker compose down +sudo systemctl stop qbittorrent +``` + +### View Logs +```bash +# Docker logs +docker compose logs -f + +# qBittorrent logs +sudo journalctl -u qbittorrent -f +``` + +### Restart All +```bash +sudo systemctl restart qbittorrent +docker compose restart +``` + +### Uninstall +```bash +docker compose down +sudo systemctl disable qbittorrent +sudo systemctl stop qbittorrent +sudo rm /etc/systemd/system/qbittorrent.service +sudo systemctl daemon-reload +``` + +## Configuration + +### Environment Variables + +Все переменные окружения заданы в `docker-compose.yml`: + +- `TMDB_API_KEY`: API ключ TMDB +- `TELEGRAM_BOT_TOKEN`: Токен Telegram бота +- `QBITTORRENT_PORT`: 8082 +- `QBITTORRENT_HOST`: host.docker.internal +- `QBITTORRENT_USERNAME`: admin +- `QBITTORRENT_PASSWORD`: vrubel07 + +### Change qBittorrent Credentials + +1. Откройте `docker-compose.yml` +2. Измените `QBITTORRENT_PASSWORD` +3. Перезапустите: `docker compose restart` + +### Change Telegram Bot Token + +1. Откройте `docker-compose.yml` +2. Измените `TELEGRAM_BOT_TOKEN` +3. Перезапустите: `docker compose restart telegram-bot` + +## Troubleshooting + +### qBittorrent не запускается + +```bash +# Проверка статуса +sudo systemctl status qbittorrent + +# Просмотр логов +sudo journalctl -u qbittorrent -n 50 + +# Ручной запуск +sudo -u qbittorrent /usr/bin/qbittorrent-nox --webui-port=8082 +``` + +### Docker контейнеры не запускаются + +```bash +# Проверка логов +docker compose logs + +# Пересборка +docker compose up -d --build --force-recreate +``` + +### Port Already in Use + +```bash +# Проверка занятых портов +sudo lsof -i :8082 +sudo lsof -i :8089 + +# Остановка процесса +sudo kill -9 +``` + +## Notes + +- qBittorrent работает как systemd сервис с автозапуском +- Все Docker контейнеры настроены на автоперезапуск +- Используется `host.docker.internal` для доступа к qBittorrent из Docker + diff --git a/docker-compose.yml b/docker-compose.yml index 542fdff..699ac04 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -41,11 +41,13 @@ services: environment: - USERNAME=admin - PASSWORD=vrubel07 - - PROXY_ADDRESS=172.17.0.1 - - PROXY_PORT=8080 + - PROXY_ADDRESS=host.docker.internal + - PROXY_PORT=8082 ports: - "8444:8443" restart: unless-stopped + extra_hosts: + - "host.docker.internal:host-gateway" networks: - torrentvideo_default - default @@ -57,6 +59,7 @@ services: container_name: telegram-bot environment: - TMDB_API_KEY=6d58225585fb77af5945a964de41849f + - TELEGRAM_BOT_TOKEN=7662650066:AAFgsfYJNYgpcSHaSe6fspsjqmhMkOBT1s4 - TORRENT_SEARCH_URL=http://host.docker.internal:8443 - TORRENT_ADD_URL=http://host.docker.internal:8088 - QBITTORRENT_USERNAME=admin diff --git a/env.example b/env.example index 2079779..9655638 100644 --- a/env.example +++ b/env.example @@ -7,13 +7,13 @@ TMDB_API_KEY=your_tmdb_api_key_here # 🤖 Telegram Bot Token # Получите у @BotFather в Telegram -TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here +TELEGRAM_BOT_TOKEN=7662650066:AAFgsfYJNYgpcSHaSe6fspsjqmhMkOBT1s4 # 🐳 qBittorrent настройки QBITTORRENT_USERNAME=admin QBITTORRENT_PASSWORD=admin QBITTORRENT_HOST=host.docker.internal -QBITTORRENT_PORT=8080 +QBITTORRENT_PORT=8082 # 🔍 TorAPI настройки TORRENT_SEARCH_URL=http://host.docker.internal:8443 diff --git a/start_ubuntu.sh b/start_ubuntu.sh new file mode 100755 index 0000000..aa3e482 --- /dev/null +++ b/start_ubuntu.sh @@ -0,0 +1,155 @@ +#!/bin/bash + +# Скрипт для запуска всех сервисов findFilms на Ubuntu +# Устанавливает qBittorrent, настраивает systemd и запускает Docker контейнеры + +set -e # Остановка при ошибке + +echo "🚀 Запуск findFilms для Ubuntu" +echo "==============================================" +echo "" + +# Цвета для вывода +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +log_info() { + echo -e "${BLUE}ℹ️ $1${NC}" +} + +log_success() { + echo -e "${GREEN}✅ $1${NC}" +} + +log_warning() { + echo -e "${YELLOW}⚠️ $1${NC}" +} + +log_error() { + echo -e "${RED}❌ $1${NC}" +} + +# Проверка директории +if [ ! -f "app.py" ]; then + log_error "Запустите скрипт из директории проекта findFilms" + exit 1 +fi + +# Шаг 1: Проверка и установка Docker +log_info "Проверка Docker..." +if ! command -v docker &> /dev/null; then + log_warning "Docker не найден, установка Docker..." + curl -fsSL https://get.docker.com -o get-docker.sh + sudo sh get-docker.sh + sudo usermod -aG docker $USER + rm get-docker.sh + log_success "Docker установлен" + log_warning "Перезапустите терминал или выполните: newgrp docker" + exit 0 +else + log_success "Docker найден" +fi + +# Проверка Docker Compose +if ! command -v docker compose &> /dev/null; then + log_warning "Docker Compose не найден, установка..." + sudo apt-get update + sudo apt-get install -y docker-compose-plugin + log_success "Docker Compose установлен" +fi + +# Шаг 2: Установка qBittorrent +log_info "Проверка qBittorrent..." +if ! command -v qbittorrent-nox &> /dev/null; then + log_warning "qBittorrent не найден, установка..." + sudo apt-get update + sudo apt-get install -y qbittorrent-nox + log_success "qBittorrent установлен" +else + log_success "qBittorrent найден" +fi + +# Шаг 3: Настройка systemd сервиса для qBittorrent +log_info "Настройка qBittorrent systemd сервиса..." + +# Создание пользователя qbittorrent если не существует +if ! id "qbittorrent" &>/dev/null; then + sudo useradd -r -s /bin/false qbittorrent + log_info "Создан пользователь qbittorrent" +fi + +# Создание systemd сервиса +sudo tee /etc/systemd/system/qbittorrent.service > /dev/null <<'EOF' +[Unit] +Description=qBittorrent-nox +After=network.target + +[Service] +Type=simple +User=qbittorrent +Group=qbittorrent +ExecStart=/usr/bin/qbittorrent-nox --webui-port=8082 +Restart=always +RestartSec=5 +StandardOutput=journal +StandardError=journal + +[Install] +WantedBy=multi-user.target +EOF + +log_success "qBittorrent systemd сервис настроен" + +# Перезагрузка systemd и запуск сервиса +sudo systemctl daemon-reload +sudo systemctl enable qbittorrent +sudo systemctl restart qbittorrent + +log_success "qBittorrent запущен и настроен на автозапуск" +log_info "Веб-интерфейс: http://localhost:8082" +log_info "Логин: admin / vrubel07" + +# Шаг 4: Создание Docker сети +log_info "Создание Docker сети..." +if ! docker network ls | grep -q "torrentvideo_default"; then + docker network create torrentvideo_default + log_success "Сеть torrentvideo_default создана" +else + log_success "Сеть torrentvideo_default уже существует" +fi + +# Шаг 5: Остановка существующих контейнеров +log_info "Остановка существующих контейнеров..." +docker compose down 2>/dev/null || true + +# Шаг 6: Запуск Docker сервисов +log_info "Запуск Docker сервисов..." +docker compose up -d --build + +# Ждем немного для старта +sleep 5 + +# Проверка статуса +log_info "Проверка статуса сервисов..." +echo "" +docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -E "(NAMES|movie-search|TorAPI|telegram-bot)" || true + +echo "" +log_success "🎉 Все сервисы запущены!" +echo "" +echo "📱 Доступные интерфейсы:" +echo " • Веб-интерфейс: http://localhost:8089" +echo " • qBittorrent: http://localhost:8082 (admin/vrubel07)" +echo " • Telegram Bot: @your_bot_username" +echo "" +echo "🔧 Управление:" +echo " • Остановить Docker: docker compose down" +echo " • Остановить qBittorrent: sudo systemctl stop qbittorrent" +echo " • Перезапустить все: sudo systemctl restart qbittorrent && docker compose restart" +echo " • Логи Docker: docker compose logs -f" +echo " • Логи qBittorrent: sudo journalctl -u qbittorrent -f" +echo "" + diff --git a/telegram_bot.py b/telegram_bot.py index 93606dc..48e71ba 100644 --- a/telegram_bot.py +++ b/telegram_bot.py @@ -23,13 +23,13 @@ logging.basicConfig( logger = logging.getLogger(__name__) # Конфигурация -TELEGRAM_BOT_TOKEN = "7662650066:AAFgsfYJNYgpcSHaSe6fspsjqmhMkOBT1s4" +TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") TMDB_API_KEY = os.getenv("TMDB_API_KEY", "6d58225585fb77af5945a964de41849f") TMDB_BASE_URL = "https://api.themoviedb.org/3" TORRENT_SEARCH_URL = os.getenv("TORRENT_SEARCH_URL", "http://localhost:8443") TORRENT_ADD_URL = os.getenv("TORRENT_ADD_URL", "http://localhost:8444") QBITTORRENT_HOST = os.getenv("QBITTORRENT_HOST", "localhost") -QBITTORRENT_PORT = os.getenv("QBITTORRENT_PORT", "8080") +QBITTORRENT_PORT = os.getenv("QBITTORRENT_PORT", "8082") QBITTORRENT_USERNAME = os.getenv("QBITTORRENT_USERNAME", "admin") QBITTORRENT_PASSWORD = os.getenv("QBITTORRENT_PASSWORD", "vrubel07")