@woai
π Add Quick Start guide and Linux deployment scripts - QUICK_START_WINDOWS.md for 5-minute setup, deploy.sh and update.sh for Linux/Ubuntu servers, Complete cross-platform deployment support
4cfc8a2
# π YouTube Metadata Extractor - Deployment Script | |
# This script deploys the project on a remote Ubuntu server | |
echo "π Starting deployment of YouTube Metadata Extractor..." | |
# Configuration | |
PROJECT_DIR="$HOME/YouTube" | |
REPO_URL="https://huggingface.co/spaces/dzianisBY/YouTube_Creator_MetaData" | |
PYTHON_ENV="$PROJECT_DIR/.venv" | |
# Colors for output | |
GREEN='\033[0;32m' | |
YELLOW='\033[1;33m' | |
RED='\033[0;31m' | |
NC='\033[0m' # No Color | |
# Function to print colored output | |
print_status() { | |
echo -e "${GREEN}β $1${NC}" | |
} | |
print_warning() { | |
echo -e "${YELLOW}β οΈ $1${NC}" | |
} | |
print_error() { | |
echo -e "${RED}β $1${NC}" | |
} | |
# Check if running on Ubuntu/Debian | |
if ! command -v apt &> /dev/null; then | |
print_error "This script is designed for Ubuntu/Debian systems" | |
exit 1 | |
fi | |
# Update system packages | |
print_status "Updating system packages..." | |
sudo apt update && sudo apt upgrade -y | |
# Install required system packages | |
print_status "Installing system dependencies..." | |
sudo apt install -y python3 python3-pip python3-venv git curl nginx | |
# Create project directory | |
print_status "Setting up project directory..." | |
mkdir -p "$PROJECT_DIR" | |
cd "$PROJECT_DIR" | |
# Clone or update repository | |
if [ -d ".git" ]; then | |
print_status "Updating existing repository..." | |
git pull origin main | |
else | |
print_status "Cloning repository..." | |
git clone "$REPO_URL" . | |
fi | |
# Create virtual environment | |
print_status "Setting up Python virtual environment..." | |
python3 -m venv "$PYTHON_ENV" | |
source "$PYTHON_ENV/bin/activate" | |
# Install Python dependencies | |
print_status "Installing Python dependencies..." | |
pip install --upgrade pip | |
pip install -r requirements.txt | |
pip install -r telegram_requirements.txt | |
# Create .env file template if it doesn't exist | |
if [ ! -f ".env" ]; then | |
print_warning "Creating .env template file..." | |
cat > .env << EOF | |
# YouTube API Configuration | |
YOUTUBE_API_KEY=your_youtube_api_key_here | |
# Telegram Bot Configuration | |
TELEGRAM_TOKEN=your_telegram_bot_token_here | |
# MCP Server Configuration | |
MCP_BASE_URL=https://youtube-bot.tuttech.net/api/mcp | |
# Gemini AI Configuration | |
GEMINI_API_KEY=your_gemini_api_key_here | |
# Server Configuration | |
HOST=0.0.0.0 | |
PORT=8080 | |
EOF | |
print_warning "Please edit .env file with your actual API keys!" | |
print_warning "File location: $PROJECT_DIR/.env" | |
fi | |
# Create systemd service files | |
print_status "Creating systemd service files..." | |
# API Server service | |
sudo tee /etc/systemd/system/youtube-api.service > /dev/null << EOF | |
[Unit] | |
Description=YouTube MCP API Server | |
After=network.target | |
[Service] | |
Type=simple | |
User=$USER | |
WorkingDirectory=$PROJECT_DIR | |
Environment=PATH=$PYTHON_ENV/bin | |
ExecStart=$PYTHON_ENV/bin/python main.py | |
Restart=always | |
RestartSec=10 | |
[Install] | |
WantedBy=multi-user.target | |
EOF | |
# Telegram Bot service | |
sudo tee /etc/systemd/system/youtube-bot.service > /dev/null << EOF | |
[Unit] | |
Description=YouTube Telegram Bot | |
After=network.target youtube-api.service | |
[Service] | |
Type=simple | |
User=$USER | |
WorkingDirectory=$PROJECT_DIR | |
Environment=PATH=$PYTHON_ENV/bin | |
ExecStart=$PYTHON_ENV/bin/python run_telegram_bot.py | |
Restart=always | |
RestartSec=10 | |
[Install] | |
WantedBy=multi-user.target | |
EOF | |
# Reload systemd and enable services | |
print_status "Enabling systemd services..." | |
sudo systemctl daemon-reload | |
sudo systemctl enable youtube-api.service | |
sudo systemctl enable youtube-bot.service | |
# Configure Nginx (optional) | |
print_status "Configuring Nginx..." | |
sudo tee /etc/nginx/sites-available/youtube-api > /dev/null << EOF | |
server { | |
listen 80; | |
server_name localhost; | |
location / { | |
proxy_pass http://127.0.0.1:8080; | |
proxy_set_header Host \$host; | |
proxy_set_header X-Real-IP \$remote_addr; | |
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; | |
proxy_set_header X-Forwarded-Proto \$scheme; | |
proxy_connect_timeout 60s; | |
proxy_send_timeout 60s; | |
proxy_read_timeout 60s; | |
} | |
} | |
EOF | |
# Enable Nginx site | |
sudo ln -sf /etc/nginx/sites-available/youtube-api /etc/nginx/sites-enabled/ | |
sudo nginx -t && sudo systemctl reload nginx | |
# Start services | |
print_status "Starting services..." | |
sudo systemctl start youtube-api.service | |
sudo systemctl start youtube-bot.service | |
# Check service status | |
print_status "Checking service status..." | |
sleep 5 | |
if systemctl is-active --quiet youtube-api.service; then | |
print_status "YouTube API Server is running" | |
else | |
print_error "YouTube API Server failed to start" | |
sudo systemctl status youtube-api.service | |
fi | |
if systemctl is-active --quiet youtube-bot.service; then | |
print_status "YouTube Telegram Bot is running" | |
else | |
print_error "YouTube Telegram Bot failed to start" | |
sudo systemctl status youtube-bot.service | |
fi | |
print_status "Deployment completed!" | |
echo "" | |
echo "π Next steps:" | |
echo "1. Edit $PROJECT_DIR/.env with your API keys" | |
echo "2. Restart services: sudo systemctl restart youtube-api youtube-bot" | |
echo "3. Check logs: sudo journalctl -f -u youtube-api -u youtube-bot" | |
echo "" | |
echo "π Service URLs:" | |
echo "- API Server: http://localhost:8080" | |
echo "- Health Check: http://localhost:8080/health" | |
echo "" | |
echo "π± Service Management:" | |
echo "- Start: sudo systemctl start youtube-api youtube-bot" | |
echo "- Stop: sudo systemctl stop youtube-api youtube-bot" | |
echo "- Restart: sudo systemctl restart youtube-api youtube-bot" | |
echo "- Status: sudo systemctl status youtube-api youtube-bot" | |
echo "- Logs: sudo journalctl -f -u youtube-api -u youtube-bot" |