mirror of
https://github.com/FranP-code/classify_saved_videos_yt.git
synced 2025-10-13 00:32:25 +00:00
Devcontainer setup
This commit is contained in:
46
.devcontainer/Dockerfile
Normal file
46
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Install system dependencies (no Ollama needed - using separate container)
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
python3-dev \
|
||||||
|
curl \
|
||||||
|
wget \
|
||||||
|
git \
|
||||||
|
sudo \
|
||||||
|
xvfb \
|
||||||
|
x11vnc \
|
||||||
|
fluxbox \
|
||||||
|
novnc \
|
||||||
|
websockify \
|
||||||
|
firefox \
|
||||||
|
python3-tk \
|
||||||
|
build-essential \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Create user vscode
|
||||||
|
RUN useradd -m -s /bin/bash vscode && \
|
||||||
|
usermod -aG sudo vscode && \
|
||||||
|
echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
|
|
||||||
|
WORKDIR /workspace
|
||||||
|
RUN chown vscode:vscode /workspace
|
||||||
|
|
||||||
|
USER vscode
|
||||||
|
|
||||||
|
# Install pip
|
||||||
|
RUN python3 -m pip install --user --upgrade pip
|
||||||
|
|
||||||
|
ENV PATH="/home/vscode/.local/bin:$PATH"
|
||||||
|
ENV DISPLAY=:1
|
||||||
|
|
||||||
|
# Copy startup script and make it executable
|
||||||
|
COPY --chown=vscode:vscode start-services.sh /home/vscode/start-services.sh
|
||||||
|
USER root
|
||||||
|
RUN chmod +x /home/vscode/start-services.sh
|
||||||
|
USER vscode
|
||||||
|
|
||||||
|
CMD ["/bin/bash", "/home/vscode/start-services.sh"]
|
||||||
56
.devcontainer/Dockerfile.simple
Normal file
56
.devcontainer/Dockerfile.simple
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
curl \
|
||||||
|
wget \
|
||||||
|
git \
|
||||||
|
sudo \
|
||||||
|
xvfb \
|
||||||
|
x11vnc \
|
||||||
|
fluxbox \
|
||||||
|
novnc \
|
||||||
|
websockify \
|
||||||
|
firefox \
|
||||||
|
&& 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 vscode && \
|
||||||
|
usermod -aG sudo vscode && \
|
||||||
|
echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
|
|
||||||
|
WORKDIR /workspace
|
||||||
|
RUN chown vscode:vscode /workspace
|
||||||
|
|
||||||
|
USER vscode
|
||||||
|
RUN python3 -m pip install --user --upgrade pip
|
||||||
|
|
||||||
|
ENV PATH="/home/vscode/.local/bin:$PATH"
|
||||||
|
|
||||||
|
# Simple startup script
|
||||||
|
RUN echo '#!/bin/bash\n\
|
||||||
|
echo "🎬 Starting YouTube Video Classifier..."\n\
|
||||||
|
Xvfb :1 -screen 0 1920x1080x24 &\n\
|
||||||
|
sleep 2\n\
|
||||||
|
export DISPLAY=:1\n\
|
||||||
|
fluxbox &\n\
|
||||||
|
x11vnc -display :1 -nopw -listen localhost -quiet &\n\
|
||||||
|
/usr/share/novnc/utils/launch.sh --vnc localhost:5900 --listen 6080 &\n\
|
||||||
|
echo "🖥️ GUI: http://localhost:6080/vnc.html"\n\
|
||||||
|
ollama serve &\n\
|
||||||
|
echo "⏳ Starting Ollama..."\n\
|
||||||
|
sleep 10\n\
|
||||||
|
echo "📥 Pulling model..."\n\
|
||||||
|
ollama pull qwen2.5vl:7b\n\
|
||||||
|
echo "✅ Ready! Use: python test_ollama.py"\n\
|
||||||
|
exec sleep infinity\n' > /home/vscode/start-simple.sh && \
|
||||||
|
chmod +x /home/vscode/start-simple.sh
|
||||||
|
|
||||||
|
CMD ["/bin/bash"]
|
||||||
65
.devcontainer/README.md
Normal file
65
.devcontainer/README.md
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
# Dev Container Setup 🐳
|
||||||
|
|
||||||
|
## ⚠️ Quick Fix for the Error
|
||||||
|
|
||||||
|
The dev container failed due to a Docker Compose syntax error. This has been **fixed**!
|
||||||
|
|
||||||
|
## <20> Try Again
|
||||||
|
|
||||||
|
1. **Close VS Code completely**
|
||||||
|
2. **Reopen the project**: `code .`
|
||||||
|
3. **Reopen in Container**: `Cmd/Ctrl + Shift + P` → "Dev Containers: Reopen in Container"
|
||||||
|
|
||||||
|
The container should now build successfully!
|
||||||
|
|
||||||
|
## 📋 Alternative Setup Options
|
||||||
|
|
||||||
|
If you still have issues, try these alternatives:
|
||||||
|
|
||||||
|
### Option 1: Simple Dev Container
|
||||||
|
```bash
|
||||||
|
# Rename the alternative config
|
||||||
|
cd .devcontainer
|
||||||
|
mv devcontainer.json devcontainer-compose.json
|
||||||
|
mv devcontainer-simple.json devcontainer.json
|
||||||
|
|
||||||
|
# Then reopen in VS Code
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 2: Manual Docker Setup
|
||||||
|
```bash
|
||||||
|
# Build and run manually
|
||||||
|
cd .devcontainer
|
||||||
|
docker build -t youtube-classifier .
|
||||||
|
docker run -it --rm -p 11434:11434 -p 6080:6080 -v $(pwd)/..:/workspace youtube-classifier
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 3: Local Installation
|
||||||
|
Use the main project's `setup.sh` script instead.
|
||||||
|
|
||||||
|
## 🔧 What Was Fixed
|
||||||
|
|
||||||
|
- **Docker Compose syntax error**: Removed extra colon in volumes section
|
||||||
|
- **Simplified configuration**: Reduced complexity to improve reliability
|
||||||
|
- **Better error handling**: More robust startup script
|
||||||
|
|
||||||
|
## 📖 Once Running
|
||||||
|
|
||||||
|
After the container starts successfully:
|
||||||
|
|
||||||
|
1. **Wait for setup** (~5-10 minutes first time)
|
||||||
|
2. **Access GUI**: http://localhost:6080/vnc.html
|
||||||
|
3. **Test setup**: `python test_ollama.py`
|
||||||
|
4. **Run demo**: `python demo_classification.py`
|
||||||
|
5. **Start classifying**: `python script.py`
|
||||||
|
|
||||||
|
## <20> Still Having Issues?
|
||||||
|
|
||||||
|
1. **Clean Docker**: `docker system prune -a`
|
||||||
|
2. **Update VS Code**: Make sure you have the latest Dev Containers extension
|
||||||
|
3. **Check Docker**: Ensure Docker Desktop is running
|
||||||
|
4. **Try simple version**: Use `devcontainer-simple.json` instead
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**The main issue has been fixed - try reopening in container now! <20>**
|
||||||
25
.devcontainer/devcontainer-simple.json
Normal file
25
.devcontainer/devcontainer-simple.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "YouTube Video Classifier (Simple)",
|
||||||
|
"build": {
|
||||||
|
"dockerfile": "Dockerfile.simple"
|
||||||
|
},
|
||||||
|
"workspaceFolder": "/workspace",
|
||||||
|
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached",
|
||||||
|
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"extensions": [
|
||||||
|
"ms-python.python"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"python.defaultInterpreterPath": "/usr/bin/python3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"forwardPorts": [11434, 6080],
|
||||||
|
|
||||||
|
"postCreateCommand": "pip install --user -r requirements.txt && echo 'Run: bash /home/vscode/start-simple.sh to start services'",
|
||||||
|
|
||||||
|
"remoteUser": "vscode"
|
||||||
|
}
|
||||||
26
.devcontainer/devcontainer.json
Normal file
26
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": "YouTube Video Classifier",
|
||||||
|
"dockerComposeFile": "docker-compose.yml",
|
||||||
|
"service": "youtube-classifier",
|
||||||
|
"workspaceFolder": "/workspace",
|
||||||
|
"shutdownAction": "stopCompose",
|
||||||
|
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"extensions": [
|
||||||
|
"ms-python.python",
|
||||||
|
"ms-python.pylint"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"python.defaultInterpreterPath": "/usr/bin/python3",
|
||||||
|
"terminal.integrated.defaultProfile.linux": "bash"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"forwardPorts": [11434, 6080],
|
||||||
|
|
||||||
|
"postCreateCommand": "pip install --user -r requirements.txt && sh /home/vscode/start-services.sh",
|
||||||
|
|
||||||
|
"remoteUser": "vscode"
|
||||||
|
}
|
||||||
30
.devcontainer/docker-compose.yml
Normal file
30
.devcontainer/docker-compose.yml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
services:
|
||||||
|
youtube-classifier:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
volumes:
|
||||||
|
- ../:/workspace:cached
|
||||||
|
ports:
|
||||||
|
- "6080:6080"
|
||||||
|
environment:
|
||||||
|
- DISPLAY=:1
|
||||||
|
- OLLAMA_HOST=http://ollama:11434
|
||||||
|
depends_on:
|
||||||
|
- ollama
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
command: sleep infinity
|
||||||
|
|
||||||
|
ollama:
|
||||||
|
image: ollama/ollama:latest
|
||||||
|
volumes:
|
||||||
|
- ollama-data:/root/.ollama
|
||||||
|
ports:
|
||||||
|
- "11434:11434"
|
||||||
|
environment:
|
||||||
|
- OLLAMA_HOST=0.0.0.0
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
ollama-data:
|
||||||
51
.devcontainer/entrypoint.sh
Normal file
51
.devcontainer/entrypoint.sh
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Start VNC server for GUI access
|
||||||
|
echo "Starting VNC 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 server
|
||||||
|
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 for Ollama to be ready
|
||||||
|
echo "⏳ Waiting for Ollama to start..."
|
||||||
|
sleep 15
|
||||||
|
|
||||||
|
# Pull the required model
|
||||||
|
echo "📥 Pulling qwen2.5vl:7b model (this may take a while)..."
|
||||||
|
ollama pull qwen2.5vl:7b
|
||||||
|
|
||||||
|
# Test setup
|
||||||
|
echo "🧪 Testing setup..."
|
||||||
|
cd /workspace
|
||||||
|
python test_ollama.py
|
||||||
|
|
||||||
|
echo "✅ Container setup complete!"
|
||||||
|
echo ""
|
||||||
|
echo "🎬 YouTube Video Classifier is ready!"
|
||||||
|
echo "📖 Available commands:"
|
||||||
|
echo " python test_ollama.py # Test Ollama setup"
|
||||||
|
echo " python demo_classification.py # Run classification demo"
|
||||||
|
echo " python script.py # Run main classifier"
|
||||||
|
echo " python playlist_manager.py --help # Manage classifications"
|
||||||
|
echo ""
|
||||||
|
echo "🖥️ Access GUI at: http://localhost:6080/vnc.html"
|
||||||
|
echo "🤖 Ollama API at: http://localhost:11434"
|
||||||
|
|
||||||
|
# Keep container running
|
||||||
|
sleep infinity
|
||||||
60
.devcontainer/start-services.sh
Executable file
60
.devcontainer/start-services.sh
Executable file
@@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "🎬 YouTube Video Classifier Dev Container"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
# Install Python dependencies if not already installed
|
||||||
|
if [ -f "/workspace/requirements.txt" ]; then
|
||||||
|
echo "📦 Installing Python dependencies..."
|
||||||
|
cd /workspace
|
||||||
|
pip install --user -r requirements.txt
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 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"
|
||||||
|
|
||||||
|
# Wait for Ollama container to be ready
|
||||||
|
echo "⏳ Waiting for Ollama container to start..."
|
||||||
|
for i in {1..30}; do
|
||||||
|
if curl -s http://ollama:11434/api/tags > /dev/null 2>&1; then
|
||||||
|
echo "✅ Ollama container is ready!"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo " Attempt $i/30 - waiting for Ollama..."
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
|
||||||
|
# Pull the required model
|
||||||
|
echo "📥 Pulling qwen2.5vl:7b model (this may take a while)..."
|
||||||
|
curl -X POST http://ollama:11434/api/pull -d '{"name":"qwen2.5vl:7b"}' > /dev/null 2>&1 &
|
||||||
|
|
||||||
|
echo "✅ Setup complete!"
|
||||||
|
echo ""
|
||||||
|
echo "🎬 YouTube Video Classifier is ready!"
|
||||||
|
echo "📖 Available commands:"
|
||||||
|
echo " python test_ollama.py # Test Ollama setup"
|
||||||
|
echo " python demo_classification.py # Run classification demo"
|
||||||
|
echo " python script.py # Run main classifier"
|
||||||
|
echo ""
|
||||||
|
echo "🖥️ Access GUI at: http://localhost:6080/vnc.html"
|
||||||
|
echo "🤖 Ollama API at: http://localhost:11434 (via ollama container)"
|
||||||
|
echo ""
|
||||||
|
echo "💡 Note: Model download happens in background"
|
||||||
|
echo " Check status with: curl http://ollama:11434/api/tags"
|
||||||
|
|
||||||
|
# Keep container running
|
||||||
|
exec sleep infinity
|
||||||
Reference in New Issue
Block a user