#!/bin/bash # # Production Setup Script # Quick setup for production deployment # set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' echo -e "${BLUE}" echo "==========================================" echo " Movie Scheduler - Production Setup" echo "==========================================" echo -e "${NC}" # Check if running as root if [ "$EUID" -eq 0 ]; then echo -e "${RED}Please don't run as root. Run as your regular user.${NC}" echo "The script will use sudo when needed." exit 1 fi # Detect deployment method echo "Choose deployment method:" echo "1) Systemd service (bare metal)" echo "2) Docker container" read -p "Enter choice [1-2]: " DEPLOY_METHOD if [ "$DEPLOY_METHOD" == "1" ]; then echo -e "${GREEN}Setting up systemd service...${NC}" # Check dependencies echo "Checking dependencies..." for cmd in python3 ffmpeg git sqlite3 systemctl; do if ! command -v $cmd &> /dev/null; then echo -e "${RED}✗ Missing: $cmd${NC}" echo "Install it with: sudo apt-get install $cmd" exit 1 else echo -e "${GREEN}✓ Found: $cmd${NC}" fi done # Check whisper.cpp if ! command -v whisper.cpp &> /dev/null; then echo -e "${YELLOW}⚠ whisper.cpp not found${NC}" read -p "Install whisper.cpp now? [y/N]: " INSTALL_WHISPER if [[ $INSTALL_WHISPER =~ ^[Yy]$ ]]; then echo "Installing whisper.cpp..." git clone https://github.com/ggerganov/whisper.cpp.git /tmp/whisper.cpp cd /tmp/whisper.cpp make sudo cp main /usr/local/bin/whisper.cpp sudo chmod +x /usr/local/bin/whisper.cpp rm -rf /tmp/whisper.cpp echo -e "${GREEN}✓ whisper.cpp installed${NC}" fi fi # Create scheduler user if ! id -u scheduler &> /dev/null; then echo "Creating scheduler user..." sudo useradd -r -s /bin/bash -d /opt/scheduler -m scheduler sudo usermod -aG video,render scheduler echo -e "${GREEN}✓ User created${NC}" else echo -e "${GREEN}✓ User already exists${NC}" fi # Create directories echo "Creating directories..." sudo mkdir -p /opt/scheduler /opt/models sudo mkdir -p /mnt/storage/raw_movies /mnt/storage/final_movies sudo chown scheduler:scheduler /opt/scheduler sudo chown scheduler:scheduler /mnt/storage/raw_movies /mnt/storage/final_movies # Copy application files echo "Copying application files..." SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" sudo -u scheduler cp "$PROJECT_DIR/agent.py" /opt/scheduler/ sudo -u scheduler cp "$PROJECT_DIR/requirements.txt" /opt/scheduler/ # Create virtual environment echo "Setting up Python virtual environment..." sudo -u scheduler python3 -m venv /opt/scheduler/venv sudo -u scheduler /opt/scheduler/venv/bin/pip install --upgrade pip sudo -u scheduler /opt/scheduler/venv/bin/pip install -r /opt/scheduler/requirements.txt # Download whisper model if needed if [ ! -f "/opt/models/ggml-base.bin" ]; then echo "Downloading whisper model..." sudo wget -q -O /opt/models/ggml-base.bin \ https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin echo -e "${GREEN}✓ Model downloaded${NC}" fi # Create config directory echo "Setting up configuration..." sudo mkdir -p /etc/scheduler # Create environment file if [ ! -f "/etc/scheduler/scheduler.env" ]; then cat << 'EOF' | sudo tee /etc/scheduler/scheduler.env > /dev/null # NocoDB Configuration NOCODB_URL=https://your-nocodb.com/api/v2/tables/YOUR_TABLE_ID/records NOCODB_TOKEN=YOUR_TOKEN_HERE # RTMP Server RTMP_SERVER=rtmp://your-rtmp-server.com/live/stream # Storage Paths RAW_DIR=/mnt/storage/raw_movies FINAL_DIR=/mnt/storage/final_movies # Whisper Model WHISPER_MODEL=/opt/models/ggml-base.bin # VAAPI Device VAAPI_DEVICE=/dev/dri/renderD128 # Timing NOCODB_SYNC_INTERVAL_SECONDS=60 WATCHDOG_CHECK_INTERVAL_SECONDS=10 STREAM_GRACE_PERIOD_MINUTES=15 EOF sudo chmod 600 /etc/scheduler/scheduler.env sudo chown scheduler:scheduler /etc/scheduler/scheduler.env echo -e "${YELLOW}⚠ IMPORTANT: Edit /etc/scheduler/scheduler.env with your actual values${NC}" echo " sudo nano /etc/scheduler/scheduler.env" fi # Install systemd service echo "Installing systemd service..." sudo cp "$PROJECT_DIR/scheduler.service" /etc/systemd/system/ sudo sed -i 's|^Environment=|# Environment=|g' /etc/systemd/system/scheduler.service sudo sed -i 's|^# EnvironmentFile=|EnvironmentFile=|g' /etc/systemd/system/scheduler.service sudo systemctl daemon-reload echo "" echo -e "${GREEN}=== Installation Complete ===${NC}" echo "" echo "Next steps:" echo "1. Edit configuration:" echo " sudo nano /etc/scheduler/scheduler.env" echo "" echo "2. Enable and start service:" echo " sudo systemctl enable scheduler" echo " sudo systemctl start scheduler" echo "" echo "3. Check status:" echo " sudo systemctl status scheduler" echo "" echo "4. View logs:" echo " sudo journalctl -u scheduler -f" elif [ "$DEPLOY_METHOD" == "2" ]; then echo -e "${GREEN}Setting up Docker deployment...${NC}" # Check docker if ! command -v docker &> /dev/null; then echo -e "${RED}✗ Docker not found${NC}" echo "Install Docker first: https://docs.docker.com/get-docker/" exit 1 fi # Check docker compose if ! docker compose version &> /dev/null && ! docker-compose --version &> /dev/null; then echo -e "${RED}✗ Docker Compose not found${NC}" exit 1 fi SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" # Create deployment directory read -p "Installation directory [/opt/scheduler]: " INSTALL_DIR INSTALL_DIR=${INSTALL_DIR:-/opt/scheduler} sudo mkdir -p "$INSTALL_DIR" sudo chown $USER:$USER "$INSTALL_DIR" # Copy files echo "Copying files..." cp "$PROJECT_DIR/agent.py" "$INSTALL_DIR/" cp "$PROJECT_DIR/requirements.txt" "$INSTALL_DIR/" cp "$PROJECT_DIR/Dockerfile" "$INSTALL_DIR/" cp "$PROJECT_DIR/docker-compose.prod.yml" "$INSTALL_DIR/" # Create environment file if [ ! -f "$INSTALL_DIR/.env.production" ]; then cp "$PROJECT_DIR/.env.production.example" "$INSTALL_DIR/.env.production" echo -e "${YELLOW}⚠ Edit $INSTALL_DIR/.env.production with your actual values${NC}" fi # Create storage directories sudo mkdir -p /mnt/storage/raw_movies /mnt/storage/final_movies sudo mkdir -p /opt/models # Download whisper model if [ ! -f "/opt/models/ggml-base.bin" ]; then echo "Downloading whisper model..." sudo wget -q -O /opt/models/ggml-base.bin \ https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin echo -e "${GREEN}✓ Model downloaded${NC}" fi echo "" echo -e "${GREEN}=== Installation Complete ===${NC}" echo "" echo "Next steps:" echo "1. Edit configuration:" echo " nano $INSTALL_DIR/.env.production" echo "" echo "2. Build and start:" echo " cd $INSTALL_DIR" echo " docker compose -f docker-compose.prod.yml up -d" echo "" echo "3. View logs:" echo " docker compose -f docker-compose.prod.yml logs -f" echo "" echo "4. Check status:" echo " docker compose -f docker-compose.prod.yml ps" else echo -e "${RED}Invalid choice${NC}" exit 1 fi echo "" echo -e "${BLUE}See PRODUCTION.md for complete documentation${NC}"