soundwave/setup.sh
Iulian 51679d1943 Initial commit - SoundWave v1.0
- Full PWA support with offline capabilities
- Comprehensive search across songs, playlists, and channels
- Offline playlist manager with download tracking
- Pre-built frontend for zero-build deployment
- Docker-based deployment with docker compose
- Material-UI dark theme interface
- YouTube audio download and management
- Multi-user authentication support
2025-12-16 23:43:07 +00:00

152 lines
5.2 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}"
echo "╔════════════════════════════════════════╗"
echo "║ 🎵 SoundWave - Pre-Launch Setup 🎵 ║"
echo "╔════════════════════════════════════════╗"
echo -e "${NC}"
echo ""
# Navigate to project directory
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$SCRIPT_DIR"
# Step 1: Create .env file
echo -e "${YELLOW}📝 Step 1/6: Creating environment file...${NC}"
if [ ! -f .env ]; then
cp .env.example .env
echo -e "${GREEN}✅ Created .env file with default settings${NC}"
echo -e "${YELLOW} Default credentials: admin / soundwave${NC}"
else
echo -e "${BLUE} .env file already exists${NC}"
fi
echo ""
# Step 2: Create directories
echo -e "${YELLOW}📁 Step 2/6: Creating volume directories...${NC}"
mkdir -p audio cache es redis
chmod -R 755 audio cache es redis 2>/dev/null || true
echo -e "${GREEN}✅ Directories created: audio, cache, es, redis${NC}"
echo ""
# Step 3: Check if npm is installed
echo -e "${YELLOW}🔍 Step 3/6: Checking prerequisites...${NC}"
if ! command -v npm &> /dev/null; then
echo -e "${RED}❌ npm is not installed. Please install Node.js and npm first.${NC}"
exit 1
fi
echo -e "${GREEN}✅ npm found: $(npm --version)${NC}"
if ! command -v docker &> /dev/null; then
echo -e "${RED}❌ docker is not installed. Please install Docker first.${NC}"
exit 1
fi
echo -e "${GREEN}✅ docker found: $(docker --version | cut -d' ' -f3)${NC}"
echo ""
# Step 4: Build frontend
echo -e "${YELLOW}⚛️ Step 4/6: Building React frontend...${NC}"
cd frontend
if [ ! -d "node_modules" ]; then
echo "Installing dependencies..."
npm install
fi
echo "Building production bundle..."
npm run build
cd ..
echo -e "${GREEN}✅ Frontend built successfully${NC}"
echo ""
# Step 5: Start database services
echo -e "${YELLOW}🗄️ Step 5/6: Starting database services...${NC}"
docker compose up -d soundwave-es soundwave-redis
echo -e "${BLUE}⏳ Waiting 30 seconds for Elasticsearch to initialize...${NC}"
for i in {30..1}; do
echo -ne "${YELLOW} $i seconds remaining...\r${NC}"
sleep 1
done
echo -e "${GREEN}✅ Database services ready${NC}"
echo ""
# Step 6: Start main application
echo -e "${YELLOW}🚀 Step 6/6: Starting SoundWave application...${NC}"
docker compose up -d soundwave
echo -e "${BLUE}⏳ Waiting for application to start...${NC}"
sleep 10
echo -e "${GREEN}✅ Application container started${NC}"
echo ""
# Run migrations
echo -e "${YELLOW}🔄 Running database migrations...${NC}"
echo "Creating migrations for audio models..."
docker exec soundwave python manage.py makemigrations audio || echo "No new migrations needed"
echo "Applying all migrations..."
docker exec soundwave python manage.py migrate
echo -e "${GREEN}✅ Migrations completed${NC}"
echo ""
# Create superuser
echo -e "${YELLOW}👤 Setting up admin user...${NC}"
docker exec soundwave python manage.py shell << 'PYEOF'
from django.contrib.auth import get_user_model
import os
User = get_user_model()
username = os.getenv('SW_USERNAME', 'admin')
password = os.getenv('SW_PASSWORD', 'soundwave')
if not User.objects.filter(username=username).exists():
User.objects.create_superuser(username, 'admin@soundwave.local', password)
print(f'✅ Admin user created: {username}')
else:
print(f' Admin user already exists: {username}')
PYEOF
echo ""
# Collect static files
echo -e "${YELLOW}📦 Collecting static files...${NC}"
docker exec soundwave python manage.py collectstatic --noinput
echo -e "${GREEN}✅ Static files collected${NC}"
echo ""
# Check container health
echo -e "${YELLOW}🏥 Checking service health...${NC}"
echo ""
docker compose ps
echo ""
# Final summary
echo -e "${GREEN}"
echo "╔════════════════════════════════════════╗"
echo "║ 🎉 Setup Complete! 🎉 ║"
echo "╚════════════════════════════════════════╝"
echo -e "${NC}"
echo ""
echo -e "${BLUE}📊 Service Information:${NC}"
echo -e "${GREEN} 🌐 Application:${NC} http://localhost:123456"
echo -e "${GREEN} 👤 Username:${NC} admin"
echo -e "${GREEN} 🔑 Password:${NC} soundwave"
echo ""
echo -e "${BLUE}📝 Useful Commands:${NC}"
echo -e "${YELLOW} View logs:${NC} docker compose logs -f soundwave"
echo -e "${YELLOW} Stop services:${NC} docker compose down"
echo -e "${YELLOW} Restart:${NC} docker compose restart soundwave"
echo -e "${YELLOW} Shell access:${NC} docker exec -it soundwave bash"
echo ""
echo -e "${BLUE}🧪 Next Steps:${NC}"
echo " 1. Open http://localhost:123456 in your browser"
echo " 2. Login with admin / soundwave"
echo " 3. Test local file upload"
echo " 4. Install PWA (look for install icon in address bar)"
echo " 5. Test offline mode"
echo ""
echo -e "${GREEN}🎵 Enjoy SoundWave! 🎵${NC}"
echo ""