From ae4ec9b96e6b988719c6c2ef4618889df89a23da Mon Sep 17 00:00:00 2001 From: Francisco Pessano Date: Fri, 11 Jul 2025 19:13:36 -0300 Subject: [PATCH] Docker and scripts --- Dockerfile | 65 ++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 32 ++++++++++++++++++++++ docker-entrypoint.sh | 42 ++++++++++++++++++++++++++++ setup.sh | 63 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 202 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100755 docker-entrypoint.sh create mode 100755 setup.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0d84916 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,65 @@ +# Use Ubuntu 22.04 as base +FROM ubuntu:22.04 + +# Avoid prompts from apt +ENV DEBIAN_FRONTEND=noninteractive + +# Enable universe category +RUN echo "deb http://archive.ubuntu.com/ubuntu bionic main universe" >> /etc/apt/sources.list +RUN echo "deb http://archive.ubuntu.com/ubuntu bionic-security main universe" >> /etc/apt/sources.list +RUN echo "deb http://archive.ubuntu.com/ubuntu bionic-updates main universe" >> /etc/apt/sources.list + + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + python3 \ + python3-pip \ + python3-venv \ + python3-dev \ + curl \ + wget \ + git \ + sudo \ + xvfb \ + x11vnc \ + fluxbox \ + novnc \ + websockify \ + xterm \ + firefox \ + python3-tk \ + python3-dev \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + + +# Install Ollama +RUN curl -fsSL https://ollama.ai/install.sh | sh + +# Create user +RUN useradd -m -s /bin/bash user && \ + usermod -aG sudo user && \ + echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers + +# Set up workspace +WORKDIR /workspace +RUN chown user:user /workspace + +# Switch to user +USER user + +# Install Python packages +COPY requirements.txt . +RUN python3 -m pip install --user -r requirements.txt + +# Set environment +ENV PATH="/home/user/.local/bin:$PATH" +ENV DISPLAY=:1 + +# Copy startup script +COPY docker-entrypoint.sh /home/user/ +USER root +RUN chmod +x /home/user/docker-entrypoint.sh +USER user + +ENTRYPOINT ["/home/user/docker-entrypoint.sh"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..077da24 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,32 @@ +version: '3.8' + +services: + youtube-classifier: + build: . + volumes: + - .:/workspace + - ollama-data:/home/user/.ollama + - /tmp/.X11-unix:/tmp/.X11-unix:rw + ports: + - "11434:11434" + - "6080:6080" + environment: + - DISPLAY=${DISPLAY:-:0} + - OLLAMA_HOST=0.0.0.0 + privileged: true + stdin_open: true + tty: true + working_dir: /workspace + + ollama-standalone: + image: ollama/ollama:latest + volumes: + - ollama-data:/root/.ollama + ports: + - "11435:11434" + environment: + - OLLAMA_HOST=0.0.0.0 + restart: unless-stopped + +volumes: + ollama-data: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100755 index 0000000..05eb4fb --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Start display server +echo "๐Ÿ–ฅ๏ธ Starting display server..." +Xvfb :1 -screen 0 1920x1080x24 > /dev/null 2>&1 & +sleep 2 +export DISPLAY=:1 + +# Start window manager +fluxbox > /dev/null 2>&1 & + +# Start VNC +x11vnc -display :1 -nopw -listen localhost -xkb -ncache 10 -ncache_cr -quiet > /dev/null 2>&1 & + +# Start noVNC +/usr/share/novnc/utils/launch.sh --vnc localhost:5900 --listen 6080 > /dev/null 2>&1 & + +echo "๐Ÿ–ฅ๏ธ GUI available at: http://localhost:6080/vnc.html" + +# Start Ollama +echo "๐Ÿค– Starting Ollama..." +ollama serve > /dev/null 2>&1 & + +# Wait and pull model +echo "โณ Waiting for Ollama..." +sleep 15 +echo "๐Ÿ“ฅ Pulling qwen2.5vl:7b model..." +ollama pull qwen2.5vl:7b + +echo "โœ… Setup complete!" +echo "" +echo "๐ŸŽฌ YouTube Video Classifier Ready!" +echo "๐Ÿ–ฅ๏ธ GUI: http://localhost:6080/vnc.html" +echo "๐Ÿค– API: http://localhost:11434" +echo "" +echo "๐Ÿ“– Commands:" +echo " python test_ollama.py" +echo " python demo_classification.py" +echo " python script.py" + +# Keep running +exec "$@" diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..d1cec89 --- /dev/null +++ b/setup.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +# YouTube Video Classifier Setup Script + +echo "๐ŸŽฌ YouTube Video Classifier Setup" +echo "==================================" + +# Check if Python 3.11 is available +if ! command -v python3 &> /dev/null; then + echo "โŒ Python 3.11 not found. Please install Python 3.11.10" + exit 1 +fi + +echo "โœ… Python 3.11 found" + +# Create virtual environment +echo "๐Ÿ“ฆ Creating virtual environment..." +python3 -m venv venv + +# Activate virtual environment +echo "๐Ÿ”ง Activating virtual environment..." +source venv/bin/activate + +# Install requirements +echo "๐Ÿ“ฅ Installing Python dependencies..." +pip install -r requirements.txt + +# Check if Ollama is installed +if ! command -v ollama &> /dev/null; then + echo "โŒ Ollama not found. Please install Ollama from https://ollama.ai" + echo " After installation, run:" + echo " 1. ollama serve" + echo " 2. ollama pull qwen2.5-vl:7b" + exit 1 +fi + +echo "โœ… Ollama found" + +# Check if Ollama is running +if ! curl -s http://localhost:11434/api/tags &> /dev/null; then + echo "โš ๏ธ Ollama is not running. Starting Ollama..." + ollama serve & + sleep 5 +fi + +# Pull Qwen2.5VL model +echo "๐Ÿค– Pulling Qwen2.5VL model..." +ollama pull qwen2.5vl:7b + +# Test setup +echo "๐Ÿงช Testing setup..." +python test_ollama.py + +echo "โœ… Setup complete!" +echo "" +echo "Next steps:" +echo "1. Make sure your browser is pinned to the taskbar" +echo "2. Update the browser image in img/ folder if needed" +echo "3. Run: python script.py" +echo "" +echo "Optional:" +echo "- Run demo: python demo_classification.py" +echo "- Analyze results: python playlist_manager.py --analyze"